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