February 9, 2021

Фильтрация слов потока по исключениям из файлов

Это  необходимый этап перед подачей текста для модели машинного обучения.  Сейчас я расскажу, как это можно сделать и поделюсь готовым кодом на  Python.

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

Для этого нам потребуется прочитать файлы и вернуть поток слов (это мы реализовали ранее),  а также написать функцию, принимающую решение о фильтрации каждого  слова в зависимости от наличия совпадения с содержимым файла исключений.  Последний для удобства будет скомпонован из набора слов, каждое в  отдельной строке, следующего вида:

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

Итак,  наша функция-фильтр в качестве входных параметров получит список  анализируемых слов, кортеж из имени файла-исключений и флага фильтрации  по целому слову (1) или начальным значениям (0), а также кодировку  файла-исключений. Вот как будет выглядеть код на Python данной функции:

Сначала функция считывает кортеж filedeletename  в две переменные - флаг и имя файла, а затем формирует список  исключений, считав содержимое соответствующего файла. После этого  осуществляется этап фильтрации, который в режиме полного соответствия  сводится лишь к проверки наличия слова в списке исключений, а при  фильтрации по начальным символам - применению для каждого слова функции find, осуществляющей поиск подстроки (возвращаемое значение 0 означает совпадение с первого символа).

Теперь можно рассмотреть, как будет выглядеть ее работа. Считаем набор слов (предназначение используемых функций объяснялось ранее):

Теперь отфильтруем слова и выведем то, что было удалено (посредством разницы множеств слов):

А теперь попробуем режим фильтрации по начальным позициям, добавим в словарь delete.txt значение - "заяв":

Как видим удалилось не только слово "однако", но и "заявили" и "заявляют".

Вот таким образом можно реализовать фильтрацию слов, а какими инструментами пользуетесь вы для этого? Делитесь в комментариях.