nltk使用RegexpParser

时间:2016-11-01 09:38:30

标签: python regex date parsing nltk

使用此博客post中的信息提取,我试图定义一个语法,其中包括将日期添加为具有以下语法的新块;

grammar = r"""
    NBAR:
        {<NN.*|JJ>*<NN.*>}  # Nouns and Adjectives, terminated with Nouns

    NP:
        {<NBAR>}
        {<NBAR><IN><NBAR>}  # Above, connected with in/of/etc...
    DATE -> MONTH SEP DAY SEP YEAR
    SEP -> "/"
    MONTH -> DIGIT | DIGIT DIGIT
    DAY -> DIGIT | DIGIT DIGIT
    YEAR -> DIGIT DIGIT DIGIT DIGIT
    DIGIT -> '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9' | '0'

但是当我打电话给chunker = nltk.RegexpParser(grammar)时,这会抛出一个非法的大块模式,任何关于如何包含始终表示为8位DD/MM/YYYY的日期或以月份拼写的长格式的想法out,日期后跟序数指标st,nd, or th,结果为DDthMONTHYYYY

1 个答案:

答案 0 :(得分:1)

你正在搅拌苹果和橘子。只有前两次扩展才是有效的nltk RegexpParser规则,因此您在第三次扩展时会遇到错误。将其余格式转换为相同的格式:将分隔符从->更改为:,然后将扩展名写为RegexpParser表达式。请注意,您正在使用chunker,而不是分层解析器。 (参见上述文档,以及NLTK书籍的所有Chapter 7。)