{-# LANGUAGE OverloadedStrings #-} module Main where import Data.Word2Vec.Model import Data.Text as T import qualified Data.Conduit.Binary as CB import qualified Data.Conduit.Text as CT import Data.Conduit import Data.Conduit.Combinators as C import System.Environment main :: IO () main = do (arg:_) <- getArgs w2v <- readWord2VecModel arg runConduitRes $ stdin .| CT.decodeUtf8Lenient .| CT.lines .| C.map (getSimilarOnes w2v) .| CT.encode CT.utf8 .| stdout getSimilarOnes :: Word2VecModel -> Text -> Text getSimilarOnes w2v w = T.unlines $ Prelude.map (format w) similarOnes where similarOnes = findKNearestToWord w2v 30 w format w (w', d) = T.intercalate "\t" [w, w', (T.pack $ show d)]