Обнаружение приговора с использованием НЛП - PullRequest
8 голосов
/ 12 декабря 2011

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

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

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

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

Есть идеи ??

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

Ответы [ 5 ]

6 голосов
/ 14 декабря 2011

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

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

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

3 голосов
/ 13 декабря 2011

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

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

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

1 голос
/ 18 июля 2013

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

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

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

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

1 голос
/ 12 декабря 2011

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

Точный трубопровод для вашей цели:

  1. Document Reset PR.
  2. Энни Английский токенизатор.
  3. Энни Реджекс Разделитель предложений.

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

0 голосов
/ 12 декабря 2011

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

...