Я думаю об использовании Lucene StandardTokenizer для токенизации слова в контексте, отличном от IR.
Я понимаю, что этот токенизатор удаляет знаки пунктуации. Кто-нибудь знает (или, может быть, имеет опыт), делая вывод символов пунктуации в виде отдельных токенов?
Пример текущего поведения:
Welcome, Dr. Chasuble! => Welcome Dr. Chasuble
Пример желаемого поведения:
Welcome, Dr. Chasuble! => Welcome , Dr. Chasuble !
Вместо этого вы можете использовать инструмент токенизации из сообщества NLP. Обычно такие вопросы хорошо заботятся.
Некоторые готовые инструменты - это stanford corenlp (они также имеют отдельные компоненты для токенизации). Трубопровод UIUC также должен обрабатывать его изящно. http://cogcomp.cs.illinois.edu/page/software/
Как правило, для пользовательской токенизации как IR, так и не IR-контента рекомендуется использовать ICU (ICU4J - это версия Java). Это было бы хорошим началом: http://userguide.icu-project.org/boundaryanalysis
Сложная часть - это сохранение периода как части "доктора". Вам нужно будет использовать словарь на основе итератора; или, необязательно, реализовать свою собственную эвристику либо в коде, либо путем создания своего собственного итератора, который в ICU может быть создан как файл с несколькими определениями типа regexp.
\b