Как я могу извлечь слова из предложения и определить, какой частью речи является каждый из них? [закрыто]

19

Я хочу написать что-то, что берет предложение и идентифицирует каждое слово, которое оно содержит, и определяет, какой частью речи является каждое слово.

Например

Hello World, я предложение

вернул бы это

verb noun, pronoun verb adjective noun

В идеале я хотел бы в конечном итоге сделать еще один шаг вперед, сделать предложение и программно дать ему понять, что он пытается интерпретировать, и, возможно, что-то с этим сделать.

Итак, мой вопрос: кто-нибудь слышал что-то подобное?

Vinny
источник
2
«Привет» - это глагол? Я имею в виду, я не знаю, что еще это будет, но это не похоже на глагол.
Дэн Рэй
@DanRay: Может быть, это вопрос для english.stackexchange.com?
StriplingWarrior
1
@ DanRay, ха-ха, понимаешь? Вот почему я пытаюсь понять, если что-то может сделать это, потому что, очевидно, я ужасен в грамматике.
Винни
@Vinny - Конечно, это возможно. Проблема в том ... что это следующая идея на триллион долларов, и в настоящее время она все еще не превращена в продукт.
Ramhound
1
@ Винни Да, кто-то слышал о чем-то подобном.
Тулаинс Кордова

Ответы:

18

Это называется обработка естественного языка, и это огромное, сложное поле. То, что вы описываете, является монументальным достижением, и даже самые лучшие решения, такие как Watson , далеко не идеальны.

Такие вещи усложняют задачу: «Буффало Буффало Буффало Буффало Буффало Буффало Буффало Буффало»

грамматически правильное предложение в американском английском, используемое в качестве примера того, как омонимы и гомофоны могут использоваться для создания сложных лингвистических конструкций. Это обсуждалось в литературе с 1972 года ... Оно также было включено в книгу Стивена Пинкера 1994 года «Языковой инстинкт» в качестве примера предложения, которое «казалось бы бессмысленным», но грамматическим ...

Значение предложения становится более понятным, когда понимается, что оно использует город Буффало, штат Нью-Йорк, и несколько необычный глагол «буйвол» (что означает «запугивать или запугивать»), а также когда пунктуация и грамматика расширены, так что предложение гласит: «Буффало, Буффало, Буффало, Буффало, Буффало, Буффало, Буффало, Буффало». Смысл становится еще яснее, когда используются синонимы: «Бизон-бизон, другой бизон-бизон, хулиган, бизон-бизон».

Ryathal
источник
1
Это то, что я ищу! Кто-нибудь слышал, чтобы кто-то адаптировал это в меньших масштабах? Открытый источник? Примеры этого используются в меньших масштабах?
Винни
@Vinny AFAIK В открытом исходном коде ничего не доступно, так как решение этих проблем очень выгодно для таких компаний, как обнаружение грамматики MS Word. Хотя, я верю, есть некоторые программы для болтунов.
Ryathal
1
@Vinny Сложность не имеет ничего общего с масштабом. Обработка естественного языка имеет внутреннюю сложность, которая не уменьшается при уменьшении «масштаба».
Тулаинс Кордова
6

Хотя разделение предложения и определение грамматической правильности наряду с решением вашей первой проблемы проще, чем вашей второй проблемы, многие сложности, такие как существительные глаголов или герунды, такие как плавание, программирование и т. Д., И другие подобные сложности, все же являются проблемой - см. Моронс ответ.

Но ваша вторая проблема - люди приложили огромные усилия, чтобы найти идеальное решение, но действительно идеальный алгоритм «интерпретации» практически не реализуется для любого естественного языка, такого как английский, - есть варианты, которые испортят ваш алгоритм. Эта область - гибрид ИИ, информатики и лингвистики, известная как НЛП . Учтите это: даже Google Translate не идеален при «интерпретации» предложений.

Но, тем не менее, это очень интересное поле для игры.

Яти Сагаде
источник
@StriplingWarrior Я просто хотел в достаточной степени противопоставить две проблемы, поставленные ОП. Отметил. Редактировать на своем пути
Yati Sagade
4

Я думаю, что вы должны начать читать эту статью в Википедии:

http://en.wikipedia.org/wiki/Part-of-speech_tagging

(это область исследований, не ожидайте легкого решения для нее.)

Док Браун
источник
2
Следует добавить, что, хотя NLP огромен, сложен и, вероятно, трудноразрешим на современных компьютерах, маркировка POS является самой легкой частью этого процесса, и при достаточном размере корпуса или большом количестве самоотдачи и написании правил она может быть решена почти идеально, конечно выше 99% правильности. Этого вполне может быть достаточно для ваших нужд.
Килиан Фот
спасибо, это именно то, что я тоже искал.
Amc_rtty
фактически основанный на описании OP, это должен быть принятый ответ, поскольку вы правильно соблюдаете @KilianFoth
Amc_rtty
-1

Дешевый способ сделать это - создать базу данных словаря (я почти уверен, что кто-то это сделал).

Нужно два поля в таблице: wordиusage

Преврати фразу в массив строк (каждое слово является строкой) и независимо:

select 'usage' from Dictionary WHERE 'word' = $word; 

Это тяжелое решение, но я использовал его в прошлом.

mheinke
источник
5
Это предполагает, что каждое слово имеет только один возможный POS, и я уверяю вас, что это совсем не так.
микротерион
Согласен - нет способа, которым это могло бы реально работать (по крайней мере, на английском языке) со всеми словами, которые могут выступать в качестве существительных, глаголов и т. Д., В зависимости от контекста.
Дерек