【问题标题】:CFG using POS tags in NLTK [closed]在 NLTK 中使用 POS 标签的 CFG [关闭]
【发布时间】:2013-02-21 13:12:31
【问题描述】:

我正在尝试使用 NLTK 检查给定的句子是否语法

例如:

OK : 鲸舔悲伤

不好:我曾经拥有过的最好的

我知道我可以进行 POS 标记,然后使用 CFG 解析器并以这种方式进行检查,但我还没有找到使用 POS 标记而不是实际单词作为终端分支的 CFG。

有没有人可以推荐的CFG?我认为自己制作很愚蠢,因为我不是语言学家,可能会遗漏重要的结构。

另外,我的应用程序理想情况下系统会拒绝许多句子,只批准它非常确定的句子。

谢谢:D

【问题讨论】:

标签: python nlp nltk


【解决方案1】:

CFG 的终端节点可以是任何东西,甚至是 POS 标签。只要您的短语规则将 POS 而非单词识别为输入,使用 POS 声明语法应该没有问题。

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

【讨论】:

  • 为了从句子中获取词性标签,有许多英语词性标注器。例如code.google.com/p/hunpos
  • 我知道如何获取 POS 标签,但是如何获取使用 POS 标签作为终端的英语的 CFG?
  • POS标记语料库中的每一个句子,取出出现频率最高的POS模式。
  • NLTK 中的函数/类是否允许您采用语料库中最常见的模式并构建 cfg?还是必须手动操作?
  • 我可以用大约 5-6 行代码编写一个脚本,但我想你应该考虑使用 nltk.download() 提供的语料库 =)
猜你喜欢
  • 2012-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-02
相关资源
最近更新 更多