使用部分匹配解析终端符号

Parsing terminal symbols with partial match

我的语法是这样的:

S -> 'My' 'age' 'is' NUM
NUM -> '18', '20'

我用这种语法构建的解析器可以解析像 My age is 18 这样的句子,但是如果我的实际句子像 My age is 20> —— 其中 20> 意味着超过 20 —— 它会失败.

所以我想问:有没有办法强制解析器接受终端符号的部分匹配?

提前致谢!

P.S。我是 ntlk 的菜鸟,所以也许我正在以最糟糕的方式解决问题。任何提示将不胜感激。

nltk的CFG是教学工具,不是正经的NLP框架。它不支持任何类型的开放式词汇项(这将不可避免地导致未知单词,包括未知数字)。您最好的选择是预处理您的输入,例如用语法识别的固定数字(或 #NUM# 之类的符号)替换所有数字。然后如果你需要原始数字,你可以post-处理解析器结果并将它们放回去。