Настраиваемый пайплайн для очистки текстовых датасетов от мусора (некорректный язык, бранная речь, HTML-теги и т.д.). Список обработчиков для очистки можно комбинировать и настраивать на свой вкус с помощью конфигурационного файла в YAML формате.
Использовалось на Ubuntu 18.04 с Python 3.7.
Для запуска нужно установить этот пакет, чтобы получить cli-команду, с помощью которой можно творить чудеса:
tdc -c путь_к_вашему_конфигу.yml -i input_file.txt -o output_file.txt
Запустить обработку файлов можно внутри Docker контейнера.
Предоставляются следующие volumes:
/tdc/input/
- директория, все файлы которой (нерекурсивно) будут обработаны/tdc/output/
- директория, в которую будут сложены результаты обработки/tdc/config.yml
- конфигурационный файл tdc; в образе уже присутствует конфигурация по умолчанию
Примеры использования
# Скачиваем Docker образ из registry
docker pull textdatasetcleaner/tdc:latest
# Обработать все файлы из директории input
docker run --rm \
-v $(pwd)/input/:/tdc/input/ \
-v $(pwd)/output/:/tdc/output/ \
textdatasetcleaner/tdc
# Обработать все файлы из директории input с собственной конфигурацией
docker run --rm \
-v $(pwd)/input/:/tdc/input/ \
-v $(pwd)/output/:/tdc/output/ \
-v $(pwd)/custom-config.yml:/tdc/config.yml \
textdatasetcleaner/tdc
# Обработать один файл file.txt в директории input
docker run --rm \
-v $(pwd)/input/:/tdc/input/ \
-v $(pwd)/output/:/tdc/output/ \
textdatasetcleaner/tdc \
tdc -c /tdc/config.yml -i /tdc/input/file.txt -o /tdc/output/file.txt
В данном инструменте предусмотрено 3 стадии обработки:
- PRE_PROCESSING - запуск предварительной обработки, например: удаление дубликатов. В ней могут запускаться только "файловые" обработчики.
- PROCESSING - запуск основной обработки. В ней могут запускаться только "построчные" обработчики.
- POST_PROCESSING - запуск постобработки, например: перемешивание строк (полезно, если ваша сеть может запомнить порядок классов на выборке в момент обучения). В ней могут запускаться только "файловые" обработчики.
Все обработчики (processors) делятся на 2 типа:
- Файловые – обрабатывают весь файл целиком.
- Построчные – обрабатывают каждую строку в файле последовательно.
У любого из них могут быть обязательные и опциональные параметры, которые задаются в конфигурационном файле.
Построчный обработчик для добавления текста в конец каждой строки.
Параметр | Обязательный? | Тип данных | Значение по-умолчанию | Описание |
---|---|---|---|---|
text | Да | str |
- | Текст для добавления в конец строки. |
Построчный обработчик для добавления текста в начало каждой строки.
Параметр | Обязательный? | Тип данных | Значение по-умолчанию | Описание |
---|---|---|---|---|
text | Да | str |
- | Текст для добавления в начало строки. |
Построчный обработчик для очистки HTML-тегов. По умолчанию включается только если в строке есть оба символа: <
и >
.
Параметр | Обязательный? | Тип данных | Значение по-умолчанию | Описание |
---|---|---|---|---|
or_condition | Нет | bool |
False |
True - обрабатывать есть ли есть хотя бы один из символов: < и > . False - когда обязательно есть оба. |
Построчный обработчик для очистки различных utf-8 и непечатных символов и замены их на ASCII-эквиваленты.
Обрабатывает следующие виды символов:
- исправляет двойные кавычки
- исправляет одинарные кавычки
- исправляет тире
- исправляет пробелы
- исправляет восклицательный знак
- исправляет вопросительный знак
- исправляет дублирующиеся тире
- исправляет пробелы перед точкой
- удаляет непечатные символы
Построчный обработчик для определения языка текста через библиотеку fastText, с использованием их предобученной или собственной модели. Если строка имеет язык отличный от заданого, то она пропускается (выкидывается) и не будет участвовать в других обработчиках.
Параметр | Обязательный? | Тип данных | Значение по-умолчанию | Описание |
---|---|---|---|---|
language_code | Да | str |
- | Ожидаемый код языка (ru , en и т.д.). Список поддерживаемых языков |
threshold | Нет | float |
0.9 |
Пороговое значение, ниже которого считается что язык определён некорректно. |
model_path | Нет | str |
`` | Путь на диске к модели (если не указано, то скачается официальная). |
model_url | Нет | str |
`` | URL кастомной модели (если указано, то скачается за место официальной). |
delimiter | Нет | str |
`` | Разделитель в тексте. Если у вас TSV и нужно определить язык только выбранного столбца. |
delimited_position | Нет | int |
-1 |
Позиция столбца после разделения строки с помощью .split . По дефолту - последний. |
Построчный обработчик для замены или удаления строк, которые имеют один из символов валюты.
Параметр | Обязательный? | Тип данных | Значение по-умолчанию | Описание |
---|---|---|---|---|
mode | Нет | str |
remove_line |
Что делать со строкой: remove_line - удалить (выбросить), replace - заменить найденные совпадения. |
replace_with | Нет | str |
[пробел] |
На что заменять, если выбран режим replace . |
Построчный обработчик для замены или удаления строк, содержащих email-адрес.
Параметр | Обязательный? | Тип данных | Значение по-умолчанию | Описание |
---|---|---|---|---|
mode | Нет | str |
remove_line |
Что делать со строкой: remove_line - удалить (выбросить), replace - заменить найденные совпадения. |
replace_with | Нет | str |
[пробел] |
На что заменять, если выбран режим replace . |
Построчный обработчик для замены или удаления строк, содержащих emoji.
Параметр | Обязательный? | Тип данных | Значение по-умолчанию | Описание |
---|---|---|---|---|
mode | Нет | str |
remove_line |
Что делать со строкой: remove_line - удалить (выбросить), replace - заменить найденные совпадения. |
replace_with | Нет | str |
[пробел] |
На что заменять, если выбран режим replace . |
Построчный обработчик для замены или удаления строк, содержащих #хэштеги
.
Параметр | Обязательный? | Тип данных | Значение по-умолчанию | Описание |
---|---|---|---|---|
mode | Нет | str |
remove_line |
Что делать со строкой: remove_line - удалить (выбросить), replace - заменить найденные совпадения. |
replace_with | Нет | str |
[пробел] |
На что заменять, если выбран режим replace . |
Построчный обработчик для замены или удаления строк, содержащих числа вне контекста слов.
Параметр | Обязательный? | Тип данных | Значение по-умолчанию | Описание |
---|---|---|---|---|
mode | Нет | str |
remove_line |
Что делать со строкой: remove_line - удалить (выбросить), replace - заменить найденные совпадения. |
replace_with | Нет | str |
[пробел] |
На что заменять, если выбран режим replace . |
Построчный обработчик для замены или удаления строк, содержащих телефонные номера.
Параметр | Обязательный? | Тип данных | Значение по-умолчанию | Описание |
---|---|---|---|---|
mode | Нет | str |
remove_line |
Что делать со строкой: remove_line - удалить (выбросить), replace - заменить найденные совпадения. |
replace_with | Нет | str |
[пробел] |
На что заменять, если выбран режим replace . |
Построчный обработчик для замены или удаления строк, содержащих стоп-слова (список языков и слов см. ниже).
Параметр | Обязательный? | Тип данных | Значение по-умолчанию | Описание |
---|---|---|---|---|
language_code | Да | str |
- | Ожидаемый код языка (ru , en и т.д.). Список поддерживаемых языков. |
mode | Нет | str |
remove_line |
Что делать со строкой: remove_line - удалить (выбросить), replace - заменить найденные совпадения. |
replace_with | Нет | str |
[пробел] |
На что заменять, если выбран режим replace . |
Построчный обработчик для замены или удаления строк, содержащих URL-адреса.
Параметр | Обязательный? | Тип данных | Значение по-умолчанию | Описание |
---|---|---|---|---|
mode | Нет | str |
remove_line |
Что делать со строкой: remove_line - удалить (выбросить), replace - заменить найденные совпадения. |
replace_with | Нет | str |
[пробел] |
На что заменять, если выбран режим replace . |
Построчный обработчик для замены или удаления строк, содержащих @юзернеймы
.
Параметр | Обязательный? | Тип данных | Значение по-умолчанию | Описание |
---|---|---|---|---|
mode | Нет | str |
remove_line |
Что делать со строкой: remove_line - удалить (выбросить), replace - заменить найденные совпадения. |
replace_with | Нет | str |
[пробел] |
На что заменять, если выбран режим replace . |
Построчный обработчик для смены регистра.
Параметр | Обязательный? | Тип данных | Значение по-умолчанию | Описание |
---|---|---|---|---|
mode | Да | str |
- | Варианты: title - делает первую букву во всех словах заглавной; lower - понижает регистр; upper - повышает регистр. |
Построчный обработчик для удаления стартовых и конечных пробельных символов.
Построчный обработчик для исправления слов в тексте, которые были разделены дефисом для переноса слов по слогам в конце строки. Объединяет кусочки слов воедино, убирая дефис и пробелы.
Построчный обработчик для исправления одинарных и двойных кавычек, а также апострофов до их ASCII-эквивалентов.
Построчный обработчик для удаления повторяющихся пунктуационных символов.
Обрабатывает следующий список символов: !"#$%&\'()*+,-/:;<=>?@[\\]^_``{|}~
, а также исправляет многоточие в строках
(превращает ..
в ...
и если есть 4 подряд повторяющихся точки, то заменяет их в многоточие).
Построчный обработчик для исправления юникодных символов в тексте в их канонический вид.
Параметр | Обязательный? | Тип данных | Значение по-умолчанию | Описание |
---|---|---|---|---|
form | Да | str |
NFKC |
Формы преобразования: NFC , NFKC , NFD , NFKD . Подробнее о формах. |
Построчный обработчик для исправления:
смежных пробелов нулевой ширины на пустую строку;
перевода каретки в Windows-стиле (\r\n
) и перевода каретки с вертикальной табуляцией (\n\v
) на простой перевод каретки \n
;
пробельных символов без переноса каретки на одинарный пробел;
и удаления стартовых/конечных пробелов в строке.
Построчный обработчик для транслитерации юникодных символов в ASCII-эквиваленты.
Построчный обработчик для удаления строк с матерной речью на английском языке.
Параметр | Обязательный? | Тип данных | Значение по-умолчанию | Описание |
---|---|---|---|---|
threshold | Нет | float |
0.9 |
Пороговое значение, выше которого считается что в строке есть бранная речь. |
Файловый обработчик для перемешивания строк. Используется системная реалзация GNU shuf
.
Файловый обработчик для удаления повторов в строках. Используются системные реализации BSD sort
и uniq
.
К существующим скриптам препроцессинга хочется допилить:
- Сделать документацию на rtfd.
- Перевести всё на английский язык.
- Поддержка других входных/выходных форматов файлов (jsonl/стрим из hdfs).
- Провести бенчмарки для того чтоб понимать сколько вообще оно работает (можно сделать отдельный бенч-тул и запускать в GHA).
- Проверку и исправление орфографии через standalone-версию LanguageTool
- Исправление знаков пунктуации в строках
- Сделать анализ тональности и удалять негативные строки
- Попробовать прикрутить классификацию тематики текста
- Удаление знаков препинания
- Понижение регистра (если вдруг кому-то это нужно)
- Сделать удаление нечётких дубликатов через шинглы (лучше через какое-то готовое решение)
- Удаление всех строк, которые содержат стоп-слова из заданного словаря
- Проверка метрик читаемости текста (через pattern.metrics или ruTS)
- Оценка натуральности/логичности текста через BERT (режим №2)
- Использование готовых API для проверки орфографии через Google/Bing
- Прикрутить использование RAMDisk для ускорения обработки
- Загрузка процессоров из других директорий (чтобы не форкать реп, если нужно прикрутить свой)
- Удаление emoji
- Добавить смену версии пакета в момент релиза из github (когда проставляется git tag - брать эту версию и заменять в setup.py или
src/__version__.py
)
Список людей, которые делают этот мир и данный инструмент – лучше :)
Большое спасибо за вклад в развитие TextDatasetCleaner!