FlashText - лучшая альтернатива Regex для задач НЛП

Обработка естественного языка (NLP) - это подраздел искусственного интеллекта, связанный с взаимодействием между компьютером и естественными человеческими языками. НЛП включает обработку текста, анализ текста, применение алгоритмов машинного обучения к тексту и речи и многое другое.

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

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

FlashText:

FlashText - это библиотека Python с открытым исходным кодом, которую можно использовать для замены или извлечения ключевых слов в тексте. В проекте NLP мы сталкиваемся с несколькими задачами обработки текста, независимо от того, требуется ли замена и извлечение слов. Библиотека FlashText позволяет разработчикам эффективно выполнять извлечение и замену ключевых слов.

Установка:

Библиотеку FlashText можно установить с помощью PyPl:

pip install flashtext

Использование:

Библиотека FlashText имеет ограниченное использование, она ограничена извлечением ключевых слов, заменой ключевых слов, получением дополнительной информации об извлеченном ключевом слове, удалением ключевых слов. В приведенном ниже образце записной книжки вы можете найти фрагменты кода, вычисляющие и сравнивающие контрольные цифры между FlashText и RE для извлечения и замены ключевых слов из текста, взятого из Википедии.

Извлечение и замена ключевых слов выполняется с помощью библиотеки RE и FlashText для текстового документа (содержащего около 500 слов), взятого со страницы Википедии машинного обучения.

Вы можете наблюдать за контрольными временными числами между двумя библиотеками, выполняемыми для двух задач: извлечения ключевых слов и замены. Задания выполнялись для небольшого текста объемом около 500 слов. Разница во временных числах очень мала, поэтому производительность неотличима.

График ниже представляет собой временное число для операции замены 1000 ключевых слов для текстового документа, содержащего 10 000 токенов. Можно заметить, что операции FlashText примерно в 28 раз быстрее по сравнению с Regex.

Почему не Regex и почему FlashText?

Число времени очень близко, и производительность двух библиотек неотличима для операций с регулярными выражениями небольших документов. Для документов большого размера производительность библиотеки FlashText явно превосходит, где операции замены 1000 ключевых слов в 28 раз быстрее для библиотеки FlashText по сравнению с Regex.

Согласно документации FlashText:

Regex основан на настраиваемых алгоритмах, таких как алгоритм Aho-Corasick и Trie Dictionary. Библиотека FlashText может выполнять поиск или замену ключевых слов за один проход по документу, а временная сложность не зависит от количества поисковых или заменяемых терминов. Библиотека FlashText предназначена для сопоставления только полных слов, в отличие от Regex, которое также сопоставляет подстроки.

For a document of size N tokens and a dictionary of M keywords,
Time Complexity of FlashText is O(N).
Time Complexity of Regex is O(MxN).

Следовательно, алгоритм FlashText намного быстрее, чем Regex.

Щелкните здесь, чтобы прочитать всю статью об алгоритме FlashText.

Вывод:

Для документов небольшого размера сравнение производительности двух библиотек зависит от множества факторов, таких как кэш. Библиотека FlashText явно превосходит текстовые документы с большим количеством токенов. Временная сложность FlashText равна O (N), тогда как для Regex - O (M * N), поэтому использование Regex рекомендуется для текстовых документов, содержащих более 500 токенов.

Щелкните здесь, чтобы получить репозиторий GitHub для FlashText.

Использованная литература:

[1] Заменить или получить ключевые слова в документах в любом масштабе (9 ноября 2017 г.): https://arxiv.org/abs/1711.00046

[2] Документация FlashText (16 февраля 2018 г.): https://pypi.org/project/flashtext/

Спасибо за чтение