Фильтрация слов потока по исключениям из файлов
Это необходимый этап перед подачей текста для модели машинного обучения. Сейчас я расскажу, как это можно сделать и поделюсь готовым кодом на Python.
Пусть мы имеем много текстовых файлов малого размера и один файл со словами-исключениями. Наша задача - обеспечить фильтрацию потока по совпадениям с содержимым второго файла:
Для этого нам потребуется прочитать файлы и вернуть поток слов (это мы реализовали ранее), а также написать функцию, принимающую решение о фильтрации каждого слова в зависимости от наличия совпадения с содержимым файла исключений. Последний для удобства будет скомпонован из набора слов, каждое в отдельной строке, следующего вида:
Также предусмотрим возможность компоновки файла-исключений не только из целых слов, но и их начальных символов, для возможности фильтрации по частичным совпадениям (это может пригодиться, если слова будут иметь разные окончания). Например, вот специфический список, который я создал для фильтрации различных словоформ на пресс-конференции В. Путина в 2019 году:
Итак, наша функция-фильтр в качестве входных параметров получит список анализируемых слов, кортеж из имени файла-исключений и флага фильтрации по целому слову (1) или начальным значениям (0), а также кодировку файла-исключений. Вот как будет выглядеть код на Python данной функции:
Сначала функция считывает кортеж filedeletename в две переменные - флаг и имя файла, а затем формирует список исключений, считав содержимое соответствующего файла. После этого осуществляется этап фильтрации, который в режиме полного соответствия сводится лишь к проверки наличия слова в списке исключений, а при фильтрации по начальным символам - применению для каждого слова функции find, осуществляющей поиск подстроки (возвращаемое значение 0 означает совпадение с первого символа).
Теперь можно рассмотреть, как будет выглядеть ее работа. Считаем набор слов (предназначение используемых функций объяснялось ранее):
Теперь отфильтруем слова и выведем то, что было удалено (посредством разницы множеств слов):
А теперь попробуем режим фильтрации по начальным позициям, добавим в словарь delete.txt значение - "заяв":
Как видим удалилось не только слово "однако", но и "заявили" и "заявляют".
Вот таким образом можно реализовать фильтрацию слов, а какими инструментами пользуетесь вы для этого? Делитесь в комментариях.