【问题标题】:In NLTK pos_tag, why "hello" is classified as Noun?在 NLTK pos_tag 中,为什么“hello”被归类为名词?
【发布时间】:2011-05-10 12:13:22
【问题描述】:

我试过了

text = nltk.word_tokenize("hello, my name is John")
words = nltk.pos_tag(text)

for w in words:
    print "%s = %s" % (w[0], w[1])

我得到了:

hello = NN
, = ,
my = PRP$
name = NN
is = VBZ
John = NNP

【问题讨论】:

  • 这样做的原因是计算机听不懂英语。
  • @Ben @larsmans @Joce 我期待一个感叹词。 @kindall 至少,计算机可以理解单词并寻找它们的定义。但似乎标注器优先考虑“你好”作为名词。

标签: python nlp nltk


【解决方案1】:

根据 Penn Treebank 标记集,hello 绝对是一个感叹词,并且始终被标记为 UH。您遇到的问题是 NLTK 附带的标记器很可能是在 Penn Treebank 的华尔街日报部分免费提供的,不幸的是,它包含零出现的单词 你好并且只有三个词标记了UH(感叹词)。如果你想标记口语文本,你需要在整个 Penn Treebank 上训练你的标记器,其中包括大约 300 万个英语口语单词。

顺便说一句,NLTK 标记器不会总是将 hello 称为名词——尝试标记“don't hello me!”或“他打招呼”。

【讨论】:

    【解决方案2】:

    NLTK 使用它自己的标注器来标注词性。

    但准确性会因文本而异。这是因为标注器是使用 NLTK 本身提供的语料库进行训练的。语料库可以是任何东西。

    语料库与您的文本不相似,那么标注器将无法标记您的文本,因为上下文、样式都非常不同。

    如果你有时间,你可以训练自己的标注器。

    计算机不是人类,计算机只是做我们告诉他们做的事情。因此,为了使其正确地做到这一点,您应该正确地教他们以达到最佳效果。

    【讨论】:

    • 你能指出我从哪里默认标注器把你好作为名词吗?你知道吗?我对此感到惊讶,因为它并不常见(即使它是正确的)。
    • 如果训练中没有出现,我认为默认是把这个词标记为名词。
    【解决方案3】:

    查看任何字典,您都会发现 hello 被定义为“名词”(例如 Longman)。它通常被描述为“感叹词”或“感叹词”,但标签“名词”并不正确。

    【讨论】:

    • 我知道,但我想说的是,我们不寻常地将 hello 归类为名词。但本质上它是一个感叹词。当你说“一个你好”时,它是一个名词,将话语或感叹词命名为“你好”。所以,我希望一个感叹词标签不是名词。但似乎我需要训练我的标注器,因为这个默认标注器做出了一些错误的决定。
    • 是的。我试图表明标记器并没有真正做出 错误 决定(不是你说的那样)。有人说“它这样做的原因是计算机无法理解英语。”暗示答案是错误的。我正在纠正这一点。是的,更多标记的训练数据会有所帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-22
    • 2012-12-14
    • 2018-04-07
    • 1970-01-01
    • 2018-05-11
    • 2017-10-29
    相关资源
    最近更新 更多