Python 在NLTK pos_标签中,为什么;“你好”;被归类为名词吗?

Python 在NLTK pos_标签中,为什么;“你好”;被归类为名词吗?,python,nlp,nltk,Python,Nlp,Nltk,我试过了 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 NLTK使用自己的标记器标记词性 但准确度会因文本而异。这是因为标记者是使用NLTK本身提供的语料库

我试过了

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

NLTK使用自己的标记器标记词性

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

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

如果你有时间的话,你可以训练你自己的标记员


计算机不是人,计算机只是按照我们告诉他们的去做。因此,为了让它正确地运行,你应该正确地教它们以获得最佳效果。

查阅任何字典,你都会发现hello被定义为一个“名词”(例如Longman)。它通常被描述为“感叹号”或“感叹词”,但标记“名词”并不错误。

根据宾夕法尼亚州Treebank的标记集,hello肯定是一个感叹词,并且一直被标记为UH。您遇到的问题是,NLTK提供的标记器很可能是在宾夕法尼亚州树状银行的《华尔街日报》部分免费培训的,不幸的是,该部分没有出现hello一词,只有三个标记了UH(叹词)的词。如果你想标记口语文本,你需要对你的标记员进行整个宾夕法尼亚州树状银行的培训,其中包括大约300万个单词的口语


顺便说一句,NLTK标记者不会总是把hello称为名词——试着标记“别向我打招呼!”或“他说了你好”。

这样做的原因是计算机无法理解英语。@Ben@larsmans@Joce我期待一个感叹词@至少,计算机可以理解单词并寻找它们的定义。我知道,但我要说的是,我们通常把hello归类为名词。但本质上它是一个感叹词。当你说“一声你好”时,它是一个名词,用来命名话语或感叹词“你好”。所以,我希望是一个感叹词标记,而不是一个名词。但似乎我需要训练我的标记员,因为这个默认标记员做出了一些错误的决定。是的。我想说的是贴标签的人并不是真的做了一个错误的决定(不是你说的那样)。有人说“它这样做的原因是计算机不能理解英语。”这表明答案是错误的。我正在纠正这一点。是的,更多的带标签的训练数据会有帮助。你能告诉我默认的带标签的人以hello为名词的位置吗?你知道吗?我对此感到惊讶,因为它并不常见(即使它是正确的)。如果在培训中没有出现,我认为默认情况是将单词标记为名词。