使用NLTK中的词性标签构建CFG

-4 投票
1 回答
2879 浏览
提问于 2025-04-17 16:37

我正在尝试使用NLTK来检查一个句子是否语法正确

举个例子:

可以的: 鲸鱼舔着悲伤

不可以的: 我曾经拥有的最好的一切

我知道我可以做词性标注,然后使用上下文无关文法(CFG)解析器来检查,但我还没找到一个使用词性标记而不是实际单词作为终端分支的CFG。

有没有人可以推荐一个CFG?我觉得自己做一个很傻,因为我不是语言学家,可能会漏掉重要的结构。

另外,我的应用场景是,系统最好能拒绝很多句子,只批准那些它非常确定的句子。

谢谢 :D

1 个回答

3

CFG的终端节点可以是任何东西,甚至是词性标签。只要你的短语规则是根据词性而不是单词来识别输入的,那么用词性来定义语法就没有问题。

import nltk
# Define the cfg grammar.
grammar = nltk.parse_cfg("""
S -> NP VP
NP -> 'DT' 'NN'
VP -> 'VB'
VP -> 'VB' 'NN'
""")


# Make your POS sentence into a list of tokens.
sentence = "DT NN VB NN".split(" ")

# Load the grammar into the ChartParser.
cp = nltk.ChartParser(grammar)

# Generate and print the nbest_parse from the grammar given the sentence tokens.
for tree in cp.nbest_parse(sentence):
    print tree

撰写回答