#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
Комментарии:
1. Причина, по которой это происходит, заключается в том, что компьютеры не могут понимать английский.
2. @Ben @larsmans @Joce Я ожидал междометия. @kindall По крайней мере, компьютеры могут понимать слова и искать их определение. Но похоже, что теггер отдает приоритет «hello» как существительному.
Ответ №1:
Согласно набору тегов Penn Treebank, «привет» определенно является междометием и постоянно помечается как UH. Проблема вы бежите в том, что граффитчики, что в nltk суда с наибольшей вероятностью обучение со стороны Уолл-Стрит Джорнэл разделе Пенн Treebank, который доступен бесплатно, что, к сожалению для вас, содержит вхождений слова «привет» и только три слова тегами ох (междометие). Если вы хотите помечать устный текст тегом, вам нужно будет обучить свой теггер всему Penn Treebank, который включает примерно 3 миллиона слов разговорного английского.
Кстати, в nltk граффитчики не всегда называют Здравствуйте, Имя существительное-попробуйте пометки «не привет мне!» или «он сказал «Привет»».
Ответ №2:
NLTK использует свой собственный теггер для обозначения части речи.
Но точность будет варьироваться от текста к тексту. Это потому, что теггер был обучен с использованием корпуса, предоставленного самим NLTK. Корпус может быть о чем угодно.
Корпус не похож на ваш текст, тогда теггер не сможет пометить ваш текст, потому что контекст, стиль — все это очень отличается.
Вы можете обучить свой собственный теггер, если у вас есть на это время.
Компьютер не человек, компьютер просто делает то, что мы сказали ему делать. Итак, чтобы заставить его делать это правильно, вы должны научить их должным образом для достижения наилучшего результата.
Комментарии:
1. Можете ли вы указать мне, откуда теггер по умолчанию принимает hello как существительное? Вы знали это? Я удивлен этим, поскольку это не распространено (даже если это правильно).
2. Если в обучении нет вхождений, я думаю, что по умолчанию слово помечается как существительное.
Ответ №3:
Загляните в любой словарь, и вы найдете, что hello определяется как «существительное» (например, Longman). Это часто описывается как «восклицание» или «междометие», но тег «существительное» не является неправильным.
Комментарии:
1. Я знаю, но я бы сказал, что необычно мы классифицируем hello как существительное. Но по сути это междометие. Когда вы говорите «One Hello», это существительное, которое обозначает высказывание или междометие «Hello». Итак, я бы ожидал, что тег междометия не является существительным. Но, похоже, мне нужно обучить мой теггер, поскольку этот теггер по умолчанию принимает некоторые неправильные решения.
2. ДА. Я пытался подчеркнуть, что теггер на самом деле не принимал неправильного решения (не то, что вы сказали, что это так). Кто-то сказал «Причина, по которой это происходит, в том, что компьютеры не могут понимать английский». предполагая, что ответ неправильный . Я исправлял этот момент. Да, больше помеченных обучающих данных поможет.