Токенизаторы, которые поставляются с системами NLP, иногда довольно просты, и даже продвинутые могут обрабатывать некоторые крайние случаи способами, которые вы, возможно, не предпочитаете для конкретного проекта.
Итог: у вас есть несколько вариантов:
Найдите готовое решение, которое будет делать именно то, что вы хотите.
Найдите настройку или конфигурацию, которая позволяет настроить то, что вы делаетехочу.Stanford nltk имеет несколько вариантов, таких как casual, MWETokenizer, nist и punkt, а также некоторые опции, такие как добавление собственных регулярных выражений в некоторые из них (см. https://www.nltk.org/api/nltk.tokenize.html).
Написать код для изменения существующего решения(если это открытый исходный код, вы можете изменить сам код; многие системы также имеют API, который позволяет переопределять определенные части, не вдаваясь слишком глубоко в кишки).
Написать свой токенизатор изцарапина (это значительно сложнее, чем кажется).
Предварительная или последующая обработка данных для устранения конкретных проблем.
Но амперсандвозможно, это не единственный случай, с которым вы столкнетесь. Я предлагаю пройтись по каждому знаку препинания по очереди и потратить минуту на обдумывание того, чего вы хотите добиться, когда он появится. Тогда у вас будет более четкий набор целейпри оценке ваших вариантов. Например:
«&» - также отображается в URL-адресах, и будьте осторожны с «<», если вы анализируете HTML, и «&&», если вы анализируете код.</p>
"/" - вы, вероятно, не хотите токенизировать URL-адреса при каждом слэше (и, конечно, не хотите пытаться анализировать полученные токены, как если бы они были предложением!).Также есть 31.12.2009, 1/2 и многие другие случаи.
"-" - Hypens весьма неоднозначны: -1, 12-4, двойной дефис для дефиса уровня предложения (иоператор декремента в некотором коде), дефис в конце строки (который может или не может хотеть быть закрытым), длинные строки дефисов в качестве разделительных линий.
Кавычки - вьющиеся и прямые, одиночные-квот к апострофу для сокращений или притяжений (или неверно для множественного числа) и т. д.
Юникод вводит такие случаи, как различные типы пробелов, кавычек и тире.Многие редакторы любят «автоматически корректировать» символы Unicode, подобные этим, и даже дроби: 1/2 может закончиться как один символ (хотите, чтобы токенизатор разбил это на 3 токена?).
Довольно легко (и имхо, чрезвычайно полезное упражнение) написать небольшой набор тестовых случаев и опробовать их.Некоторые из существующих токенизаторов можно опробовать онлайн, например:
Stanford [corenlp: http://corenlp.run/]
Python NLTK: [https://text -processing.com / demo /tokenize /]
Пространство: [http://textanalysisonline.com/spacy-word-tokenize]
MorphAdorner: [http://morphadorner.northwestern.edu/morphadorner/wordtokenizer/example/]
Это лишь небольшой пример - есть много других, инекоторые из них имеют различные варианты.
Если вы хотите действительно быстрое и грязное решение только для этого одного случая, вы можете пост-обработать список токенов, чтобы повторно объединить проблемные случаи, или предварительно-обработайте его, чтобы превратить r '\ w & \ w' в некую магическую строку, которую токенизатор не сломает, а потом поверните обратно.Это в значительной степени хаки, но в некоторых случаях они могут быть в порядке.