在NLTK pos_tag中,为什么"hello"被分类为名词?

2 投票
3 回答
1904 浏览
提问于 2025-04-16 17:15

我试过这个:

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

3 个回答

2

在任何字典里,你都会看到“hello”被定义为一个“名词”(比如说Longman字典)。它通常被描述为“感叹词”或“插入语”,但说它是“名词”也并没有错。

2

NLTK有自己的工具来给单词标注词性。

不过,这个工具的准确性会根据不同的文本而有所不同。这是因为这个标注工具是用NLTK自己提供的语料库训练出来的,而这个语料库可能包含各种各样的内容。

如果你的文本和这个语料库的内容不太相似,那么标注工具就可能无法正确标注你的文本,因为上下文和风格都差别很大。

如果你有时间的话,可以自己训练一个标注工具。

电脑不是人,它们只是按照我们告诉它们的去做。因此,为了让它们做得更好,你需要好好教它们,这样才能得到最佳的结果。

9

根据宾夕法尼亚树库的标记集,hello 确实是一个感叹词,通常会被标记为 UH。你遇到的问题是,NLTK 自带的标记工具可能是基于宾夕法尼亚树库中《华尔街日报》部分的内容进行训练的,而这部分内容是免费的。可惜的是,这里没有出现过 hello 这个词,只有三个词被标记为 UH(感叹词)。如果你想给口语文本打标签,就需要在整个宾夕法尼亚树库上训练你的标记工具,这里面大约有 300 万个英语口语单词。

顺便说一下,NLTK 的标记工具并不总是把 hello 当作名词来处理——试试给“don't hello me!”或者“he said hello”打标签。

撰写回答