Обнаружение предложений с использованием NLP

Я пытаюсь разбирать предложения из огромного количества текста. Используя java, я начал с таких инструментов NLP, как OpenNLP и Stanford's Parser.

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

Например, в моем тексте большинство предложений разделено точкой, но в некоторых случаях, например, в маркерах, это не так. Здесь оба анализа с треском провалились.

Я даже попытался установить опцию в stanford parses для нескольких терминаторов предложений, но результат был не намного лучше!

Любые идеи??

Изменить. Чтобы упростить задачу, я хочу проанализировать текст, в котором разделителем является либо новая строка ("\ n"), либо точка (".") ...


person Roopak Venkatakrishnan    schedule 12.12.2011    source источник
comment
Ваш текст закодирован в HTML? Затем вы можете использовать структуру HTML для поиска таких вещей, как маркированные списки, и анализа текста с помощью стандартных инструментов.   -  person Fred Foo    schedule 12.12.2011
comment
@larsmans нету не html, просто текст !!!   -  person Roopak Venkatakrishnan    schedule 15.12.2011


Ответы (5)


Для начала нужно четко определить задачу. Что конкретно вы определяете для слова «предложение»? Пока у вас не будет такого определения, вы будете просто блуждать по кругу.

Во-вторых, очистка грязного текста обычно отличается от «разделения предложений». Различные блоки предложений НЛП предполагают относительно чистый вводимый текст. Еще одна проблема - переход из HTML, извлеченного PowerPoint или другого шума в текст.

В-третьих, Стэнфорд и другие устройства большого калибра являются статистическими. Таким образом, у них гарантированно ненулевой коэффициент ошибок. Чем меньше ваши данные выглядят так, как они были обучены, тем выше процент ошибок.

person bmargulies    schedule 14.12.2011
comment
В этом есть смысл. Просто заставил меня понять, что мне нужно очистить свои данные, а затем передать их в парсеры. (Теперь поищем библиотеку, которая поможет мне с очисткой данных) - person Roopak Venkatakrishnan; 15.12.2011

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

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

РЕДАКТИРОВАТЬ: если вы вводите входной HTML-код, вам следует сначала его предварительно обработать, например, обрабатывать маркированные списки и прочее. Затем примените сплиттер.

person nflacco    schedule 13.12.2011
comment
Это то, что я думал сделать, у меня были проблемы, так как stanford parses удаляет все символы \ n в предложениях. Все еще пытаюсь найти способ работать без них. - person Roopak Venkatakrishnan; 15.12.2011
comment
@nflacco, это как раз моя ситуация! Я делаю разделение предложений в наборе данных GENIA с помощью Stanford CoreNLP, но иногда он не может определить границы предложения. Я думаю о постобработке, проверяя регулярное выражение \.\s+[A-Z]. Вы согласны? - person Alphaaa; 04.06.2013
comment
Точно. Вам просто нужно составить список общих сокращений - мистер доктор и т. Д. - и в сочетании с регулярным выражением вы должны покрыть 99% нарушенных границ предложения. Вы также можете посмотреть длину предложения. Обычным случаем, который я видел, был доктор, или какое-то медицинское сокращение трактовалось как приговор. Ну давай же! В предложениях нет одного или двух слов. Несколько простых правил исправят это. - person nflacco; 05.06.2013

Есть еще один отличный набор инструментов для обработки естественного языка - GATE. В нем есть несколько разделителей предложений, включая стандартный разделитель предложений ANNIE (не подходит вам полностью) и разделитель предложений RegEx. Используйте позже для любого сложного разделения.

Точный конвейер для вашей цели:

  1. Документ Сбросить PR.
  2. Энни Английский токенизатор.
  3. Разветвитель предложений ANNIE RegEx.

Также вы можете использовать правила JAPE GATE даже для того, чтобы более гибкий поиск по шаблону. (Полную документацию GATE см. Tao).

person ffriend    schedule 12.12.2011

Если вы хотите придерживаться Стэнфордского НЛП или OpenNLP, вам лучше переобучить эту модель. Почти все инструменты в этих пакетах основаны на машинном обучении. Только с индивидуальными данными обучения они могут дать вам идеальную модель и производительность.

Вот мое предложение: вручную разбейте предложения на основе ваших критериев. Думаю, пары тысяч предложений хватит. Затем вызовите API или командную строку, чтобы переобучить разделители предложений. Тогда все готово!

Но, прежде всего, вам нужно выяснить, как было сказано в предыдущих обсуждениях: «Сначала вы должны четко определить задачу. Каково, собственно, ваше определение« предложения »?»

Я использую Stanford NLP и OpenNLP в своем проекте Dishes Map, движке для поиска вкусных блюд, основанном на NLP и машинное обучение. Они очень хорошо работают!

person WDong    schedule 18.07.2013

В аналогичном случае я разделил текст на разные предложения (разделенные новыми строками) в зависимости от того, где я хочу разделить текст. Как и в вашем случае, это тексты, начинающиеся с маркеров (или именно текст с «тегом разрыва строки» в конце). Это также решит аналогичную проблему, которая может возникнуть, если вы работаете с HTML для того же. И после разделения их на разные строки вы можете отправить отдельные строки для обнаружения предложения, это будет более правильным.

person Prakash Pimpale    schedule 12.12.2011