Предварительная обработка текстовых данных перед применением модели машинного обучения требует некоторых определенных шагов, таких как токенизация, удаление пунктуации, лемматизация, удаление стоп-слов и т. д. Однако работа с текстом в Твиттере может потребовать дополнительных усилий, когда дело доходит до работы с хэштегами. Удаление выражения, начинающегося с хэштега, на этапе предварительной обработки может привести к потере информации, особенно когда вы пытаетесь выполнить анализ тональности. Однако разделение выражения хэштега на отдельные слова может дать нам некоторые полезные результаты.

Еще одно хорошее применение разделения слов — проверка орфографии, которую мы каждый день видим в строке поиска Google.

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

Но что происходит, когда кто-то твитит #worstflightever. Все становится немного сложнее :) Я не являюсь владельцем кода здесь, это чужая работа. Однако я нашел его очень полезным, и красота решения заключается в совместном использовании закона Ципфа и динамического программирования. Я использовал его в одной из своих небольших задач по анализу тональности в Твиттере, и результаты были отличными, даже несмотря на то, что это решение использует небольшой (125 тыс. слов) словарь.

Поэтому я решил использовать его для турецкого текста. Для этого я сначала скачал следующий корпус: SETIMES Параллельный турецко-болгарский газетный текст . Он состоит из статей из турецких газет объемом 3,8 млн слов. И это шаги, которые я выполнил в python:

Остальное — создание словаря стоимости слова, состоящего из затрат, относящихся к обратным вероятностям, которые мы получаем из закона Ципфа, и применение функции infer_spaces(), описанной здесь. И результаты поразительны:

Они тоже не так уж плохи:

То, что происходит во второй части, в основном происходит из-за однородности нашего корпуса с точки зрения жанра, хотя у нас около 4 миллионов слов (что является достаточно большим корпусом для этой задачи). Другие ошибочные сегментации возникают, например, из-за того, что некоторые суффиксы рассматриваются как отдельные слова. Каким-то образом эти суффиксы находятся в корпусе и имеют умеренную частоту, чего мы не должны видеть. Некоторые результаты также забавны :) Первое выражение дает нам ab artma(2 отдельных слова),как и должно быть быть абартмой. Причина вполне очевидна. В нашем корпусе часто встречается аббревиатура ab, что в переводе с турецкого означает Европейский Союз. Учитывая, что контент представляет собой текст новостей, это имеет смысл. Очистка нашего словаря, например, удаление аббревиатур и т. д. может быть хорошим подходом при запуске такой задачи.