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!
Release files for textdatasetcleaner 0.0.6
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| textdatasetcleaner-0.0.6.tar.gz | 24.1 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| textdatasetcleaner-0.0.6-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 56.0 kB
Release files / textdatasetcleaner-0.0.6.tar.gz
| Download URL | textdatasetcleaner-0.0.6.tar.gz |
|---|---|
| Size | 24.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
df548728e1304af0a983a40d2df9a841181093829c237677710c8803c0bfa8e0
|
|
BLAKE2b-256 checksum How to use checksums |
e931e70ac2d18f12995e16ebd5ab8013b8b9d798c2cbc6f312e10acb08b266e4
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is 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
|
Release files / textdatasetcleaner-0.0.6-py3-none-any.whl
| Download URL | textdatasetcleaner-0.0.6-py3-none-any.whl |
|---|---|
| Size | 31.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
4e8af8791e44d152bc68e8792371bedfb0bc4c5bc524e2431228ffd1d0524ab0
|
|
BLAKE2b-256 checksum How to use checksums |
7f747d9b98c0103896f9772aae12db09ef5068a04c23d01fcda138c28369bac4
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is 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
|