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

130
18

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


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


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


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


Любые идеи?


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

спросил(а) 2021-01-19T14:27:06+03:00 9 месяцев, 1 неделя назад
1
Решение
121

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


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

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

ответил(а) 2021-01-19T14:27:06+03:00 9 месяцев, 1 неделя назад
92

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


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

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

ответил(а) 2021-01-19T14:27:06+03:00 9 месяцев, 1 неделя назад
65

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


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


    Документ Reset PR.
    Английский токенизатор ANNIE.
    ANNIE RegEx Sentence Splitter.

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

ответил(а) 2021-01-19T14:27:06+03:00 9 месяцев, 1 неделя назад
65

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


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


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


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

ответил(а) 2021-01-19T14:27:06+03:00 9 месяцев, 1 неделя назад
46

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

ответил(а) 2021-01-19T14:27:06+03:00 9 месяцев, 1 неделя назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема