nltk自定义语法,用于使用RegexpParser分块日期



使用从这篇博客文章中提取的信息,我试图定义一个语法,其中包括添加日期作为一个新的块,语法如下;

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表示,或者以长形式拼写月份,日期后跟顺序指示符st,nd, or th,这样结果将是DDthMONTHYYYY

你把苹果和橘子混在一起了。根据RegexpParser规则,只有前两个扩展是有效的,因此第三个扩展会出现错误。将其余部分转换为相同的格式:将分隔符从->更改为:,然后将展开写成RegexpParser表达式。注意,您使用的是分块器,而不是层次解析器。(请参阅上述文档,以及NLTK书的所有第7章)

最新更新