2014-11-27 3 views
0

전치사와 같은 단어를 인식하는 간단한 렉서를 작성하려고합니다. CSV 형식의 단어 목록이 있습니다. 순간 나는 작동하는 렉서를 가지고 있지만 개별적으로 내 목록에서 각 문자열을 입력하는 데 예컨대 :CSV 파일의 문자열과 일치하는 하스켈 렉서 작성

... 
("before",rest) -> TokenPreposition : lexer rest 
("behind",rest) -> TokenPreposition : lexer rest 
... 

는 CSV 파일에서 단어를 읽을 수 있습니까? CSV 파일을 구문 분석하기위한 라이브러리가 있다는 것을 알고 있지만이 이후에도 계속하는 법을 모르겠습니다.

+0

Parsec 라이브러리가있는 CSV 파서 : http://book.realworldhaskell.org/read/using-parsec.html – Yuuri

+0

https://hackage.haskell.org/package/cassava에서 제공하지 않는 것은 무엇입니까? – d8d0d65b3f7cf42

+0

CSV 파일을 구문 분석하는 방법을 알고 있습니다. 하지만 일단 단어 목록이 있으면 전치사 = [..., "전에", "뒤에", ....] 등, 나는 렉서에서 그것을 어떻게 사용하는지 모른다. 내가 목록 comprehensions를 사용하여 노력했지만 그것을 얻을 수 없습니다 – user7533

답변

0

Set String을 사용하면 단어 목록을 저장하고 member 함수를 사용하여 단어가 포함되어 있는지 확인할 수 있습니다.

다음은 몇 가지 예제 코드입니다. lexer의 입력은 그 다음 단어에있는 목록에 따라 분류하는 동사, 명사와 전치사와 단어의 목록의 목록입니다.를 작성에 전념 "실제 세계 하스켈"의 장입니다

import qualified Data.Set as S 

data Speech = Verb | Noun | Preposition | Other 

-- classify a single word  
classify :: S.Set String -> S.Set String -> S.Set String -> String -> Speech 
classify verbs nouns preps word 
    | S.member word verbs = Verb 
    | S.member word nouns = Noun 
    | S.member word preps = Preposition 
    | otherwise   = Other 

lexer :: [String] -> [String] -> [String] -> [String] -> [Speech] 
lexer vlist nlist plist words = 
    let nouns = S.fromList nlist -- convert each word list into a set 
     verbs = S.fromList vlist 
     preps = S.fromList plist 
    in map (classify verbs nouns preps) words 
관련 문제