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

Python 使用部分匹配解析终端符号,python,parsing,nlp,nltk,grammar,Python,Parsing,Nlp,Nltk,Grammar,我有一个语法,类似于: S -> 'My' 'age' 'is' NUM NUM -> '18', '20' 我用这种语法构建的解析器可以解析像“我的年龄是18岁”这样的句子,但是如果我的实际句子像“我的年龄是20岁”——其中20>意味着超过20岁——它就失败了 所以我在问:有没有办法强迫解析器接受终端符号上的部分匹配 提前谢谢 另一方面,我对ntlk是一个不折不扣的傻瓜,所以我可能正在以最糟糕的方式处理这个问题。任何提示都将不胜感激。nltk的CFG是一个教学工具,而不是一个严肃

我有一个语法,类似于:

S -> 'My' 'age' 'is' NUM
NUM -> '18', '20'
我用这种语法构建的解析器可以解析像“我的年龄是18岁”这样的句子,但是如果我的实际句子像“我的年龄是20岁”——其中
20>
意味着超过20岁——它就失败了

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

提前谢谢


另一方面,我对ntlk是一个不折不扣的傻瓜,所以我可能正在以最糟糕的方式处理这个问题。任何提示都将不胜感激。

nltk的CFG是一个教学工具,而不是一个严肃的NLP框架。它不支持任何类型的开放词汇表项(这将不可避免地导致未知单词,包括未知数字)。您最好的选择是预处理您的输入,例如,将所有数字替换为语法可以识别的固定数字(或类似
#NUM#
的符号)。然后,如果您需要原始数字,您可以对解析器结果进行后期处理并将其放回。

nltk的CFG是一个教学工具,而不是一个严肃的NLP框架。它不支持任何类型的开放词汇表项(这将不可避免地导致未知单词,包括未知数字)。您最好的选择是预处理您的输入,例如,将所有数字替换为语法可以识别的固定数字(或类似
#NUM#
的符号)。然后,如果您需要原始数字,您可以对解析器结果进行后处理并将其放回