Сохранение знаков препинания при использовании Lucene's StandardTokenizer

1

Я думаю об использовании Lucene StandardTokenizer для токенизации слова в контексте, отличном от IR.

Я понимаю, что этот токенизатор удаляет знаки пунктуации. Кто-нибудь знает (или, может быть, имеет опыт), делая вывод символов пунктуации в виде отдельных токенов?

Пример текущего поведения:

Welcome, Dr. Chasuble! => Welcome Dr. Chasuble

Пример желаемого поведения:

Welcome, Dr. Chasuble! => Welcome , Dr. Chasuble !
  • 2
    Вы можете использовать токенайзер Whitespace, за которым следует токенайзер шаблона, который разделяет границы слов, т.е. регулярное выражение \b
Теги:
nlp
solr
lucene
tokenize

2 ответа

2

Вместо этого вы можете использовать инструмент токенизации из сообщества NLP. Обычно такие вопросы хорошо заботятся.

Некоторые готовые инструменты - это stanford corenlp (они также имеют отдельные компоненты для токенизации). Трубопровод UIUC также должен обрабатывать его изящно. http://cogcomp.cs.illinois.edu/page/software/

2

Как правило, для пользовательской токенизации как IR, так и не IR-контента рекомендуется использовать ICU (ICU4J - это версия Java). Это было бы хорошим началом: http://userguide.icu-project.org/boundaryanalysis

Сложная часть - это сохранение периода как части "доктора". Вам нужно будет использовать словарь на основе итератора; или, необязательно, реализовать свою собственную эвристику либо в коде, либо путем создания своего собственного итератора, который в ICU может быть создан как файл с несколькими определениями типа regexp.

  • 1
    Большое спасибо за ваши советы и предложения. В итоге я использовал грамматику UAF29URLEmailTokenizer JFlex от Apache Lucene, как было предложено в этой теме.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню