apache openNLP обнаружение существительного chuker/POS

Я экспериментирую с apache Open NLP для одного из моих проектов, мое требование состоит в том, чтобы обнаруживать существительные из содержимого электронной почты и сверяться с нашей базой данных клиентов (эта БД состоит из отдельных имен, названий организаций и т. д., а моя поисковая система - база Solr).

Для обычных английских существительных модель, обученная по умолчанию, работает правильно (в большинстве случаев), но одно из сложных требований заключается в том, что у нас есть бизнес-организация с такими сокращениями, как OK, LET и т. д., и поэтому в нескольких сценариях мне нужно учитывать OK, LET и т. д. как существительное.

В качестве примера 1) "отправка некоторых товаров в LET, пожалуйста, ожидайте задержки в оплате" 2) "пойдем на вечеринку"

В № 1 я хочу рассматривать LET как существительное, а в случае № 2 LET не является существительным.

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

Любая помощь высоко ценится.


person Rushik    schedule 23.04.2012    source источник
comment
Почему бы просто не отфильтровать плохие после обработки?   -  person dfb    schedule 23.04.2012
comment
данные моих клиентов индексируются в Solr, а содержимое входящей электронной почты ищется по индексам в виде свободного текстового поиска, данные клиентов меняются ежедневно .... Я не уверен, что полностью понял ваше предложение .... но я хочу создать какое-то правило Например, после сканирования учитывайте только совпадения с существительными (игнорируйте совпадения с именами, не являющимися существительными)   -  person Rushik    schedule 23.04.2012
comment
Однако в вашем примере LET по-прежнему является существительным. Вы хотите, чтобы это считалось не существительным, потому что оно пишется с большой буквы?   -  person dfb    schedule 23.04.2012
comment
Это определенно не буква, в моем 1-м примере отправка некоторых предметов в LET означает LET как организацию, и поэтому его существительное здесь (если бы это могли быть и маленькие буквы, значение было бы таким же), а во втором случае давайте пойдем для вечеринка, где пусть не существительное...   -  person Rushik    schedule 23.04.2012


Ответы (1)


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

С точки зрения реализации поиска в словаре:

  • Пока рассматриваемые сущности являются отдельными токенами (или состоят только из предопределенного небольшого максимального количества M токенов каждый), реализация словаря как HashSet<String>, токенизация текста и выполнение поиска в хэше для каждого токена (и группы до M токенов) должно работать очень хорошо

  • Если вы имеете дело с очень длинными сущностями или если токенизация представляет собой проблему, разумно использовать дерево поиска или реализацию словаря с конечным автоматом.

Наконец, как всегда в случае с НЛП, вам нужно будет просмотреть значительную выборку результатов, чтобы определить любые дальнейшие проблемы. В зависимости от уровня неоднозначности в вашем списке сущностей вам может потребоваться дополнительно уточнить метод обнаружения, добавив либо эвристический, либо статистический / основанный на машинном обучении механизм принятия решений поверх поиска по словарю с учетом регистра.

person jogojapan    schedule 23.04.2012
comment
Спасибо, но я думаю, что моя главная проблема не в верхнем/нижнем регистре, проблема заключается в том, чтобы рассмотреть значение let в различном контексте (и аналогично тому, что у меня есть много других терминов)..... Я до сих пор не уверен, как подходит словарная база поможет здесь, но позвольте мне прочитать более подробную информацию о словаре и вернуться .... Еще раз спасибо. - person Rushik; 23.04.2012
comment
@Rushik Я понимаю, что вы хотели бы использовать сложный подход, который понимает (что бы это ни значило) контекст и на его основе решает, является ли let глаголом или именем собственным. Но это не только очень сложно, но и требует большой оценки и уточнения. Самый простой способ добиться точности — использовать тот факт, что акроним большую часть времени пишется прописными буквами, а глагол — нет. - person jogojapan; 23.04.2012
comment
Да, я думаю, вы правы, я только что попробовал стандартную версию NLP, и, как вы упомянули, она может рассматривать LET как существительное и let как глагол ... но я не получаю таких же результатов с apache POS, может быть, я Я создам словарь, как вы предложили, для достижения того же... Спасибо. - person Rushik; 23.04.2012