使用部分匹配解析终端符号
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-处理解析器结果并将它们放回去。
我的语法是这样的:
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-处理解析器结果并将它们放回去。