繁体   English   中英

如何解析上下文无关语法中的特殊字符?

[英]How to parse the special character in Context Free Grammar?

我有一个涉及标点符号的上下文无关语法(CFG)。 例如 nltk.parse_cfg("""PP-CLR -> IN `` NP-TTL""")

`` 是有效的 Penn Treebank POS 标签。 但是nltk无法识别。 事实上,nltk.parse_cfg 无法识别字母数字和破折号以外的任何字符。 而 Penn Treebank POS 标签有几个标点符号,例如 $ #: 。 (

那么,我应该在我的数据集中保留标点符号吗? 或者有没有办法解析这些字符?

谢谢

您可能需要特别指定它们作为终端注释,例如:

>>> import nltk
>>> grammar = nltk.parse_cfg("""
... S -> NP VP
... VP -> V PUNCT
... PUNCT -> '.'
... V -> 'eat'
... NP -> 'I'
... """)
>>> 
>>> sentence = "I eat .".split()
>>> cp = nltk.ChartParser(grammar)
>>> for tree in cp.nbest_parse(sentence):
...     print tree
... 
(S (NP I) (VP (V eat) (PUNCT .)))

对于使用当前一代 NLTK 的人,您可以通过手动更新语法 object 的产生式集来添加包含特殊字符的非终端。下面,我添加了包含特殊字符$的标记/非终端PRP$ $

from nltk.grammar import Production
from nltk.grammar import Nonterminal
productions = my_grammar.productions()
productions.extend([Production(Nonterminal('Nom'),[Nonterminal('PRP$')])])

这相当于将以下内容添加到我们的 CFG 中:

Nom -> PRP$

使用nltk.CFG.fromstring("Nom -> PRP$")会引发错误。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM