Pipeline for cleaning (preprocessing/normalizing) text datasets
Project description
Text Dataset Cleaner
Настраиваемый пайплайн для очистки текстовых датасетов от мусора (некорректный язык, бранная речь, HTML-теги и т.д.). Список обработчиков для очистки можно комбинировать и настраивать на свой вкус с помощью конфигурационного файла в YAML формате.
Запуск
Использовалось на Ubuntu 18.04 с Python 3.7.
Для запуска нужно установить этот пакет, чтобы получить cli-команду, с помощью которой можно творить чудеса:
tdc -c путь_к_вашему_конфигу.yml -i input_file.txt -o output_file.txt
Docker
Запустить обработку файлов можно внутри 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 типа:
- Файловые – обрабатывают весь файл целиком.
- Построчные – обрабатывают каждую строку в файле последовательно.
У любого из них могут быть обязательные и опциональные параметры, которые задаются в конфигурационном файле.
add_postfix
Построчный обработчик для добавления текста в конец каждой строки.
Параметр | Обязательный? | Тип данных | Значение по-умолчанию | Описание |
---|---|---|---|---|
text | Да | str |
- | Текст для добавления в конец строки. |
add_prefix
Построчный обработчик для добавления текста в начало каждой строки.
Параметр | Обязательный? | Тип данных | Значение по-умолчанию | Описание |
---|---|---|---|---|
text | Да | str |
- | Текст для добавления в начало строки. |
clean_html
Построчный обработчик для очистки HTML-тегов. По умолчанию включается только если в строке есть оба символа: <
и >
.
Параметр | Обязательный? | Тип данных | Значение по-умолчанию | Описание |
---|---|---|---|---|
or_condition | Нет | bool |
False |
True - обрабатывать есть ли есть хотя бы один из символов: < и > . False - когда обязательно есть оба. |
clean_symbols
Построчный обработчик для очистки различных utf-8 и непечатных символов и замены их на ASCII-эквиваленты.
Обрабатывает следующие виды символов:
- исправляет двойные кавычки
- исправляет одинарные кавычки
- исправляет тире
- исправляет пробелы
- исправляет восклицательный знак
- исправляет вопросительный знак
- исправляет дублирующиеся тире
- исправляет пробелы перед точкой
- удаляет непечатные символы
detect_language
Построчный обработчик для определения языка текста через библиотеку 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 . По дефолту - последний. |
filter_currency_symbols
Построчный обработчик для замены или удаления строк, которые имеют один из символов валюты.
Параметр | Обязательный? | Тип данных | Значение по-умолчанию | Описание |
---|---|---|---|---|
mode | Нет | str |
remove_line |
Что делать со строкой: remove_line - удалить (выбросить), replace - заменить найденные совпадения. |
replace_with | Нет | str |
[пробел] |
На что заменять, если выбран режим replace . |
filter_email
Построчный обработчик для замены или удаления строк, содержащих email-адрес.
Параметр | Обязательный? | Тип данных | Значение по-умолчанию | Описание |
---|---|---|---|---|
mode | Нет | str |
remove_line |
Что делать со строкой: remove_line - удалить (выбросить), replace - заменить найденные совпадения. |
replace_with | Нет | str |
[пробел] |
На что заменять, если выбран режим replace . |
filter_emoji
Построчный обработчик для замены или удаления строк, содержащих emoji.
Параметр | Обязательный? | Тип данных | Значение по-умолчанию | Описание |
---|---|---|---|---|
mode | Нет | str |
remove_line |
Что делать со строкой: remove_line - удалить (выбросить), replace - заменить найденные совпадения. |
replace_with | Нет | str |
[пробел] |
На что заменять, если выбран режим replace . |
filter_hashtags
Построчный обработчик для замены или удаления строк, содержащих #хэштеги
.
Параметр | Обязательный? | Тип данных | Значение по-умолчанию | Описание |
---|---|---|---|---|
mode | Нет | str |
remove_line |
Что делать со строкой: remove_line - удалить (выбросить), replace - заменить найденные совпадения. |
replace_with | Нет | str |
[пробел] |
На что заменять, если выбран режим replace . |
filter_max_length
Построчный обработчик для удаления строк, которые длиннее заданного порога.
Параметр | Обязательный? | Тип данных | Значение по-умолчанию | Описание |
---|---|---|---|---|
threshold | Да | int |
`` | Пороговое значение, выше которого все строки выбрасываются. |
delimiter | Нет | str |
`` | Разделитель в тексте. Если у вас TSV и нужно определить язык только выбранного столбца. |
delimited_position | Нет | int |
-1 |
Позиция столбца после разделения строки с помощью .split . По дефолту - последний. |
filter_min_length
Построчный обработчик для удаления строк, которые короче заданного порога.
Параметр | Обязательный? | Тип данных | Значение по-умолчанию | Описание |
---|---|---|---|---|
threshold | Да | int |
`` | Пороговое значение, ниже которого все строки выбрасываются. |
delimiter | Нет | str |
`` | Разделитель в тексте. Если у вас TSV и нужно определить язык только выбранного столбца. |
delimited_position | Нет | int |
-1 |
Позиция столбца после разделения строки с помощью .split . По дефолту - последний. |
filter_numbers
Построчный обработчик для замены или удаления строк, содержащих числа вне контекста слов.
Параметр | Обязательный? | Тип данных | Значение по-умолчанию | Описание |
---|---|---|---|---|
mode | Нет | str |
remove_line |
Что делать со строкой: remove_line - удалить (выбросить), replace - заменить найденные совпадения. |
replace_with | Нет | str |
[пробел] |
На что заменять, если выбран режим replace . |
filter_phone_number
Построчный обработчик для замены или удаления строк, содержащих телефонные номера.
Параметр | Обязательный? | Тип данных | Значение по-умолчанию | Описание |
---|---|---|---|---|
mode | Нет | str |
remove_line |
Что делать со строкой: remove_line - удалить (выбросить), replace - заменить найденные совпадения. |
replace_with | Нет | str |
[пробел] |
На что заменять, если выбран режим replace . |
filter_stop_words
Построчный обработчик для замены или удаления строк, содержащих стоп-слова (список языков и слов см. ниже).
Параметр | Обязательный? | Тип данных | Значение по-умолчанию | Описание |
---|---|---|---|---|
language_code | Да | str |
- | Ожидаемый код языка (ru , en и т.д.). Список поддерживаемых языков. |
mode | Нет | str |
remove_line |
Что делать со строкой: remove_line - удалить (выбросить), replace - заменить найденные совпадения. |
replace_with | Нет | str |
[пробел] |
На что заменять, если выбран режим replace . |
filter_url
Построчный обработчик для замены или удаления строк, содержащих URL-адреса.
Параметр | Обязательный? | Тип данных | Значение по-умолчанию | Описание |
---|---|---|---|---|
mode | Нет | str |
remove_line |
Что делать со строкой: remove_line - удалить (выбросить), replace - заменить найденные совпадения. |
replace_with | Нет | str |
[пробел] |
На что заменять, если выбран режим replace . |
filter_user_handle
Построчный обработчик для замены или удаления строк, содержащих @юзернеймы
.
Параметр | Обязательный? | Тип данных | Значение по-умолчанию | Описание |
---|---|---|---|---|
mode | Нет | str |
remove_line |
Что делать со строкой: remove_line - удалить (выбросить), replace - заменить найденные совпадения. |
replace_with | Нет | str |
[пробел] |
На что заменять, если выбран режим replace . |
line_convert_case
Построчный обработчик для смены регистра.
Параметр | Обязательный? | Тип данных | Значение по-умолчанию | Описание |
---|---|---|---|---|
mode | Да | str |
- | Варианты: title - делает первую букву во всех словах заглавной; lower - понижает регистр; upper - повышает регистр. |
line_strip
Построчный обработчик для удаления стартовых и конечных пробельных символов.
normalize_hyphenated_words
Построчный обработчик для исправления слов в тексте, которые были разделены дефисом для переноса слов по слогам в конце строки. Объединяет кусочки слов воедино, убирая дефис и пробелы.
normalize_quotation_marks
Построчный обработчик для исправления одинарных и двойных кавычек, а также апострофов до их ASCII-эквивалентов.
normalize_repeating_chars
Построчный обработчик для удаления повторяющихся пунктуационных символов.
Обрабатывает следующий список символов: !"#$%&\'()*+,-/:;<=>?@[\\]^_``{|}~
, а также исправляет многоточие в строках
(превращает ..
в ...
и если есть 4 подряд повторяющихся точки, то заменяет их в многоточие).
normalize_unicode
Построчный обработчик для исправления юникодных символов в тексте в их канонический вид.
Параметр | Обязательный? | Тип данных | Значение по-умолчанию | Описание |
---|---|---|---|---|
form | Да | str |
NFKC |
Формы преобразования: NFC , NFKC , NFD , NFKD . Подробнее о формах. |
normalize_whitespace
Построчный обработчик для исправления:
смежных пробелов нулевой ширины на пустую строку;
перевода каретки в Windows-стиле (\r\n
) и перевода каретки с вертикальной табуляцией (\n\v
) на простой перевод каретки \n
;
пробельных символов без переноса каретки на одинарный пробел;
и удаления стартовых/конечных пробелов в строке.
remove_accents
Построчный обработчик для транслитерации юникодных символов в ASCII-эквиваленты.
remove_profanity
Построчный обработчик для удаления строк с матерной речью на английском языке.
Параметр | Обязательный? | Тип данных | Значение по-умолчанию | Описание |
---|---|---|---|---|
threshold | Нет | float |
0.9 |
Пороговое значение, выше которого считается что в строке есть бранная речь. |
shuffle
Файловый обработчик для перемешивания строк. Используется системная реалзация GNU shuf
.
unique
Файловый обработчик для удаления повторов в строках. Используются системные реализации BSD sort
и uniq
.
TODO
К существующим скриптам препроцессинга хочется допилить:
- Сделать документацию на rtfd.
- Перевести всё на английский язык.
- Поддержка других входных/выходных форматов файлов (jsonl/стрим из hdfs).
- Провести бенчмарки для того чтоб понимать сколько вообще оно работает (можно сделать отдельный бенч-тул и запускать в GHA).
- Проверку и исправление орфографии через standalone-версию LanguageTool
- Исправление знаков пунктуации в строках
- Сделать анализ тональности и удалять негативные строки
- Попробовать прикрутить классификацию тематики текста
- Удаление знаков препинания
- Понижение регистра (если вдруг кому-то это нужно)
- Сделать удаление нечётких дубликатов через шинглы (лучше через какое-то готовое решение)
- Удаление всех строк, которые содержат стоп-слова из заданного словаря
- Проверка метрик читаемости текста (через pattern.metrics или ruTS)
- Оценка натуральности/логичности текста через BERT (режим №2)
- Использование готовых API для проверки орфографии через Google/Bing
- Прикрутить использование RAMDisk для ускорения обработки
- Загрузка процессоров из других директорий (чтобы не форкать реп, если нужно прикрутить свой)
- Удаление emoji
- Добавить смену версии пакета в момент релиза из github (когда проставляется git tag - брать эту версию и заменять в setup.py или
src/__version__.py
)
Contributors
Список людей, которые делают этот мир и данный инструмент – лучше :)
Большое спасибо за вклад в развитие TextDatasetCleaner!
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file textdatasetcleaner-0.0.6.tar.gz
.
File metadata
- Download URL: textdatasetcleaner-0.0.6.tar.gz
- Upload date:
- Size: 24.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.3.0 pkginfo/1.7.0 requests/2.25.1 setuptools/49.2.1 requests-toolbelt/0.9.1 tqdm/4.56.0 CPython/3.9.1
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | df548728e1304af0a983a40d2df9a841181093829c237677710c8803c0bfa8e0 |
|
MD5 | 8b373c844192287370e20832e1ee7a57 |
|
BLAKE2b-256 | e931e70ac2d18f12995e16ebd5ab8013b8b9d798c2cbc6f312e10acb08b266e4 |
File details
Details for the file textdatasetcleaner-0.0.6-py3-none-any.whl
.
File metadata
- Download URL: textdatasetcleaner-0.0.6-py3-none-any.whl
- Upload date:
- Size: 31.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.3.0 pkginfo/1.7.0 requests/2.25.1 setuptools/49.2.1 requests-toolbelt/0.9.1 tqdm/4.56.0 CPython/3.9.1
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 4e8af8791e44d152bc68e8792371bedfb0bc4c5bc524e2431228ffd1d0524ab0 |
|
MD5 | 75e60261bb4624dbb8a610b4857a9b43 |
|
BLAKE2b-256 | 7f747d9b98c0103896f9772aae12db09ef5068a04c23d01fcda138c28369bac4 |