Как получить логические части предложения с Java? - PullRequest
6 голосов
/ 23 апреля 2010

Допустим, есть предложение:

On March 1, he was born.

Изменение на

He was born on March 1.

не нарушает смысла предложения и остается в силе. Перетасовывание слов любым другим способом привело бы к странным и недействительным предложениям. В общем, я говорю о частях предложения, которые делают информацию более конкретной, но удаление их не нарушает всего предложения. Есть ли какая-нибудь библиотека НЛП, в которой доступно определение таких частей?

Ответы [ 2 ]

26 голосов
/ 24 апреля 2010

трехсторонние

Звучит так, как будто вы хотите определить составляющие предложения , которые представляют собой группы слов, которые действуют как единое целое в соответствии с грамматикой языка.

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

Составляющие могут быть отдельными словами, фразами или даже более крупными группами, такими как целые предложения. Внутри предложения они имеют вложенную иерархическую структуру. Например, первое примерное предложение, которое вы дали, можно проанализировать как:

(S  (PP (IN On) (NP (NNP March) (CD 1)))
    (NP (PRP he))
    (VP (VBD was) (VP (VBN born))))

Целое предложение состоит из предложной фразы , за которой следует существительная фраза , а затем глагольная фраза . Фраза предложения может быть далее разложена на единицу, состоящую из одного слова «On», за которым следует именная фраза.

Парсеры структуры фраз

Для автоматического поиска составляющих, вы, вероятно, захотите использовать синтаксический анализатор структуры фразы . Существует множество таких парсетов на выбор, которые доступны с открытым исходным кодом, в том числе:

Парсеры Stanford и Berkeley, вероятно, наиболее просты в установке и использовании. Как видно из Cer et al. 2010 , самые точные парсеры - это Berkeley и Charniak. Парсер Bikel медленнее и менее точен, чем другие.

Демонстрационная версия

Онлайн-демо для парсера из Стэнфорда здесь . Я использовал демонстрацию, чтобы произвести синтаксический анализ, приведенный выше вашего примера предложения.

Примечание об удалении

В каждом компоненте будет заголовочное слово . Например, возьмите существительное:

(NP (DT The) (JJ big) (JJ blue) (NN ball))

Головным словом здесь является существительное ball, и оно изменяется прилагательными big и blue. Если бы эта существительная фраза была встроена в предложение, вы могли бы удалить эти модификаторы и при этом иметь что-то, что соответствовало бы, но менее конкретно, значению исходного предложения.

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

Внутри фраз глагола и полных предложений все становится более хитрым, поскольку удаление материала, который серверы в качестве аргумента для глагола могут полностью изменить интерпретацию предложения. Например, удаление the book из He sold Jim the book приводит к He sold Jim.

1 голос
/ 23 апреля 2010

OpenNLP может сделать это за вас. Фраза chunking и анализ должны помочь вам в этом.Однако это не очень простая проблема, и алгоритмы могут запутаться, поскольку структура предложений становится более сложной и неоднозначной.Иногда вы должны быть в состоянии изменить порядок фраз в предложении и сохранить значение.

...