Исправить разделение предложений CoreNLP на европейские даты

Stanford CoreNLP не работает со многими общепринятыми европейскими форматами даты (см. Обозначение даты и времени в Европе (Википедия) ).

Все мы знаем, что синтаксический анализ даты - это беспорядок, в частности, сумасшедший формат мм-дд-гггг, который используется в США < / а>. Тем не менее, CoreNLP не может обрабатывать даже основные европейские форматы даты, потому что он слишком агрессивно разбивает данные по точкам.

Тем не менее, информация о дате часто представлена, например в виде:

Die Terroranschläge 11 сентября 2001 г., einem Dienstag, waren vier koordinierte Flugzeugentführungen mit anschließenden Selbstmordattentaten ... (Википедия)

Что бы я ни пытался, CoreNLP разбивает это на:

1. Die Terroranschläge am 11.
2. September 2001, einem Dienstag, waren vier [...]

что делает CoreNLP в значительной степени непригодным для немецкого НЛП. Точка просто отмечает это как порядковые числа, то есть это немецкое написание «11 сентября 2001 года». Вы также часто будете видеть обозначение «11. 9. 2001» на немецком языке, CoreNLP считает, что 9. - это еще одно предложение, а также «11 сентября 2001».

Есть ли какой-нибудь крючок (например, переопределение какого-либо метода), который позволил бы мне определить шаблоны для повторного соединения неправильно разделенных предложений с собственными правилами? Например, [123]?\d\. 1?\d\. будет типичным для свиданий, а месяцев не так много ...


person Erich Schubert    schedule 01.03.2017    source источник
comment
Привет, я буду работать над его перезапуском!   -  person StanfordNLPHelp    schedule 02.03.2017
comment
Вы можете просто удалить точки из входной строки с помощью такого шаблона. Но это взлом.   -  person Has QUIT--Anony-Mousse    schedule 02.03.2017
comment
Я экспериментирую с такой вещью - пока заменяю их пробелами, чтобы смещения символов оставались неизменными. Но было бы лучше, если бы это поддерживалось CoreNLP из коробки.   -  person Erich Schubert    schedule 02.03.2017
comment
Я постараюсь исправить это в какой-то момент, но это потребует некоторых изменений в разделителе предложений, основанном на правилах.   -  person StanfordNLPHelp    schedule 04.03.2017


Ответы (2)


Хотя это не решение, связанное с CoreNLP, в некоторой степени бесстыдной самоподключения позвольте мне рекламировать мой собственный (основанный на Python) разделитель предложений и токенизатор слов, segtok; GitHub. Прочитав эту жалобу, я понял, что мой собственный сегментатор также не поддерживает эту функцию, поэтому я добавил его только сейчас и отправил обновление в PyPI и GitHub.

Мне нравится думать, что в целом он дает довольно хорошие результаты, и у него есть некоторые «экспертные знания» по вопросам, специфическим для Европы (я свободно говорю на испанском, английском и немецком языках и немного разбираюсь в других европейских языках), так что вы можете захотеть посмотреть.

person fnl    schedule 02.03.2017

Я опубликовал обходной путь в отчете об ошибке:

https://github.com/stanfordnlp/CoreNLP/issues/380

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

person Erich Schubert    schedule 10.03.2017
comment
Хотя это может быть быстрее, чем регулярное выражение (которое также может быть реализовано как линейная реализация сканирования [как DFA, например, RE2] и, следовательно, будет не медленнее, чем это решение), теперь вы будете объединение всех предложений, заканчивающихся цифрами. Возможно, это (цифры перед окончанием предложения) менее часто встречается в вашем конкретном корпусе, но в целом это вряд ли будет хорошим решением. - person fnl; 11.07.2017
comment
Да, теперь иначе могли быть ложные срабатывания. Но я вижу их много, и обычно ошибки с плохими разделениями для меня более серьезны. У меня было много ошибок со значениями по умолчанию CoreNLP, вплоть до того момента, когда я был действительно недоволен его производительностью и рассматривал альтернативы. На данный момент этого снова достаточно (с еще парой подобных хаков). Разделитель предложений CoreNLP определенно нуждается в дополнительной работе и непосредственной оценке. - person Erich Schubert; 12.07.2017