Package: textdatasetcleaner
Text Dataset CleanerНастраиваемый пайплайн для очистки текстовых датасетов от мусора (некорректный язык, бранная речь, HTML-теги и т.д.).
Список обработчиков для очистки можно комбинировать и настраивать на свой вкус с помощью конфигурационного файла в YAML формате.ЗапускИспользовалось на Ubuntu 18.04 с Python 3.7.Для запуска нужно установить этот пакет, чтобы получить cli-команду, с помощью которой можно творить чудеса:tdc-cпуть_к_вашему_конфигу.yml-iinput_file.txt-ooutput_file.txtDockerЗапустить обработку файлов можно внутри Docker контейнера.Предоставляются следующие volumes:/tdc/input/- директория, все файлы которой (нерекурсивно) будут обработаны/tdc/output/- директория, в которую будут сложены результаты обработки/tdc/config.yml- конфигурационный файл tdc; в образе уже присутствует конфигурация по умолчаниюПримеры использования# Скачиваем Docker образ из registrydockerpulltextdatasetcleaner/tdc:latest# Обработать все файлы из директории inputdockerrun--rm\-v$(pwd)/input/:/tdc/input/\-v$(pwd)/output/:/tdc/output/\textdatasetcleaner/tdc# Обработать все файлы из директории input с собственной конфигурациейdockerrun--rm\-v$(pwd)/input/:/tdc/input/\-v$(pwd)/output/:/tdc/output/\-v$(pwd)/custom-config.yml:/tdc/config.yml\textdatasetcleaner/tdc# Обработать один файл file.txt в директории inputdockerrun--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НетboolFalseTrue- обрабатывать есть ли есть хотя бы один из символов:<и>.False- когда обязательно есть оба.clean_symbolsПострочный обработчик для очистки различных utf-8 и непечатных символов и замены их на ASCII-эквиваленты.Обрабатывает следующие виды символов:исправляет двойные кавычкиисправляет одинарные кавычкиисправляет тиреисправляет пробелыисправляет восклицательный знакисправляет вопросительный знакисправляет дублирующиеся тиреисправляет пробелы перед точкойудаляет непечатные символыdetect_languageПострочный обработчик для определения языка текста через библиотеку fastText, с использованием их предобученной или собственной модели.
Если строка имеет язык отличный от заданого, то она пропускается (выкидывается) и не будет участвовать в других обработчиках.ПараметрОбязательный?Тип данныхЗначение по-умолчаниюОписаниеlanguage_codeДаstr-Ожидаемый код языка (ru,enи т.д.).Список поддерживаемых языковthresholdНетfloat0.9Пороговое значение,ниже которогосчитается что язык определён некорректно.model_pathНетstr``Путь на диске к модели (если не указано, то скачается официальная).model_urlНетstr``URL кастомной модели (если указано, то скачается за место официальной).delimiterНетstr``Разделитель в тексте. Если у вас TSV и нужно определить язык только выбранного столбца.delimited_positionНетint-1Позиция столбца после разделения строки с помощью.split. По дефолту - последний.filter_currency_symbolsПострочный обработчик для замены или удаления строк, которые имеют один из символов валюты.ПараметрОбязательный?Тип данныхЗначение по-умолчаниюОписаниеmodeНетstrremove_lineЧто делать со строкой:remove_line- удалить (выбросить),replace- заменить найденные совпадения.replace_withНетstr[пробел]На что заменять, если выбран режимreplace.filter_emailПострочный обработчик для замены или удаления строк, содержащих email-адрес.ПараметрОбязательный?Тип данныхЗначение по-умолчаниюОписаниеmodeНетstrremove_lineЧто делать со строкой:remove_line- удалить (выбросить),replace- заменить найденные совпадения.replace_withНетstr[пробел]На что заменять, если выбран режимreplace.filter_emojiПострочный обработчик для замены или удаления строк, содержащих emoji.ПараметрОбязательный?Тип данныхЗначение по-умолчаниюОписаниеmodeНетstrremove_lineЧто делать со строкой:remove_line- удалить (выбросить),replace- заменить найденные совпадения.replace_withНетstr[пробел]На что заменять, если выбран режимreplace.filter_hashtagsПострочный обработчик для замены или удаления строк, содержащих#хэштеги.ПараметрОбязательный?Тип данныхЗначение по-умолчаниюОписаниеmodeНетstrremove_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Нетstrremove_lineЧто делать со строкой:remove_line- удалить (выбросить),replace- заменить найденные совпадения.replace_withНетstr[пробел]На что заменять, если выбран режимreplace.filter_phone_numberПострочный обработчик для замены или удаления строк, содержащих телефонные номера.ПараметрОбязательный?Тип данныхЗначение по-умолчаниюОписаниеmodeНетstrremove_lineЧто делать со строкой:remove_line- удалить (выбросить),replace- заменить найденные совпадения.replace_withНетstr[пробел]На что заменять, если выбран режимreplace.filter_stop_wordsПострочный обработчик для замены или удаления строк, содержащих стоп-слова (список языков и слов см. ниже).ПараметрОбязательный?Тип данныхЗначение по-умолчаниюОписаниеlanguage_codeДаstr-Ожидаемый код языка (ru,enи т.д.).Список поддерживаемых языков.modeНетstrremove_lineЧто делать со строкой:remove_line- удалить (выбросить),replace- заменить найденные совпадения.replace_withНетstr[пробел]На что заменять, если выбран режимreplace.filter_urlПострочный обработчик для замены или удаления строк, содержащих URL-адреса.ПараметрОбязательный?Тип данныхЗначение по-умолчаниюОписаниеmodeНетstrremove_lineЧто делать со строкой:remove_line- удалить (выбросить),replace- заменить найденные совпадения.replace_withНетstr[пробел]На что заменять, если выбран режимreplace.filter_user_handleПострочный обработчик для замены или удаления строк, содержащих@юзернеймы.ПараметрОбязательный?Тип данныхЗначение по-умолчаниюОписаниеmodeНетstrremove_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ДаstrNFKCФормы преобразования:NFC,NFKC,NFD,NFKD.Подробнее о формах.normalize_whitespaceПострочный обработчик для исправления:
смежных пробелов нулевой ширины на пустую строку;
перевода каретки в Windows-стиле (\r\n) и перевода каретки с вертикальной табуляцией (\n\v) на простой перевод каретки\n;
пробельных символов без переноса каретки на одинарный пробел;
и удаления стартовых/конечных пробелов в строке.remove_accentsПострочный обработчик для транслитерации юникодных символов в ASCII-эквиваленты.remove_profanityПострочный обработчик для удаления строк с матерной речью наанглийском языке.ПараметрОбязательный?Тип данныхЗначение по-умолчаниюОписаниеthresholdНетfloat0.9Пороговое значение,выше которогосчитается что в строке есть бранная речь.shuffleФайловый обработчик для перемешивания строк. Используется системная реалзация GNUshuf.uniqueФайловый обработчик для удаления повторов в строках. Используются системные реализации BSDsortи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Список людей, которые делают этот мир и данный инструмент – лучше :)ameyuunoБольшое спасибо за вклад в развитие TextDatasetCleaner!