Как получить логические члены предложения с Java?

Скажем, существует предложение:

On March 1, he was born.

Изменение его к

He was born on March 1.

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

6
задан dmcer 24 April 2010 в 03:48
поделиться

2 ответа

Составные части

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

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

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

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

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

Синтаксические анализаторы структуры фраз

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

Синтаксические анализаторы Стэнфорда и Беркли, вероятно, самые простые в установке и использовании. Как показано в Cer et al. 2010 , наиболее точными парсерами являются Беркли и Чарняк. Парсер Bikel медленнее и менее точен, чем другие.

Онлайн-демонстрация

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

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

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

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

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

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

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

27
ответ дан 8 December 2019 в 03:38
поделиться

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

1
ответ дан 8 December 2019 в 03:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: