В NLTK pos_tag, почему «привет» классифицируется как существительное? - PullRequest
2 голосов
/ 09 мая 2011

Я пробовал

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 ]

9 голосов
/ 10 мая 2011

Согласно тегу Penn Treebank, привет определенно является междометием и постоянно помечено UH. Проблема, с которой вы сталкиваетесь, заключается в том, что тегеры, с которыми поставляется NLTK, были, скорее всего, обучены в разделе «Уолл-стрит джорнал» в Penn Treebank, доступном бесплатно, который, к сожалению, для вас содержит ноль вхождений слова привет и только три слова помечены UH (междометие). Если вы хотите пометить разговорный текст, вам нужно будет обучить свой tagger всему банку Penn Tree, который включает в себя что-то вроде 3 миллионов слов разговорного английского.

Кстати, тегеры NLTK не всегда будут называть привет существительным - попробуйте пометить "не привет мне!" или "он сказал привет".

2 голосов
/ 09 мая 2011

Загляните в любой словарь, и вы найдете привет, определенный как «существительное» (например, Longman). Это часто описывается как «восклицание» или «междометие», но тег «существительное» не является неправильным.

2 голосов
/ 09 мая 2011

NLTK использует свой собственный тег для обозначения части речи.

Но точность будет варьироваться от текста к тексту. Это потому, что теггер был обучен с использованием корпуса, предоставленного самим NLTK. Корпус может быть о чем угодно.

Корпус не похож на ваш текст, тогда тегер не сможет пометить ваш текст, потому что контекст, стиль очень разные.

Вы можете обучить свой собственный tagger, если у вас есть время, чтобы сделать это.

Компьютер не человек, компьютер просто делает то, что мы им сказали. Поэтому, чтобы заставить его делать это правильно, вы должны научить их правильно достигать наилучшего результата.

...