module NLP.Extraction.Examples.ParsecExamples where
import qualified Data.Text as T
import Text.Parsec.Prim ( (<|>), try)
import qualified Text.Parsec.Combinator as PC
import NLP.Types
import NLP.Extraction.Parsec
import qualified NLP.Corpora.Brown as B
findClause :: Extractor B.Tag (ChunkOr B.Chunk B.Tag)
findClause = followedBy anyToken clause
clause :: Extractor B.Tag (ChunkOr B.Chunk B.Tag)
clause = do
np <- nounPhrase
vp <- verbPhrase
return $ mkChunk B.C_CL [np, vp]
prepPhrase :: Extractor B.Tag (ChunkOr B.Chunk B.Tag)
prepPhrase = do
prep <- posTok B.IN
np <- nounPhrase
return $ mkChunk B.C_PP [POS_CN prep, np]
nounPhrase :: Extractor B.Tag (ChunkOr B.Chunk B.Tag)
nounPhrase = do
nlist <- PC.many1 (try (posTok $ B.NN)
<|> try (posTok $ B.DT)
<|> try (posTok $ B.AT)
<|> (posTok $ B.JJ))
return (mkChunk B.C_NP $ map POS_CN nlist)
verbPhrase :: Extractor B.Tag (ChunkOr B.Chunk B.Tag)
verbPhrase = do
vp <- posPrefix "V"
obj <- PC.many1 $ ((try clause)
<|> (try nounPhrase)
<|> prepPhrase)
return $ mkChunk B.C_VP $ ((POS_CN vp):obj)