Вероятно, доделал основу библиотеки для предобработки текстов, нужную мне периодически. Надоело каждый раз писать одно и то же — решил сделать библиотеку. Функционал ее очень простой — на вход ей подаются тексты — например, их можно импортировать из txt файлов. В одном файле может быть несколько текстов, разделенных заранее определенной последовательностью символов. Далее задается список операций, которые можно произвести над текстом в любом количестве и любой последовательности. Сейчас доступны следующие операции:
- токенизация (на слова, предложения, абзацы)
- стемминг (для русского языка)
- удаление email
- удаление URL
- хештегов
- удаление JS и HTML
- удаление пунктуации
- удаление коротких слов
- удаление самостоятельных чисел (в строке «по небу летело 5 пингвинов» будет удалено «5»)
- удаление стоп слов (для русского языка)
- формирование n-грамм
Применив операции к текстам, получаем очищенные от ненужного хлама тексты. Каждый текст представлен объектом класса Token (даже исходный нетокенизированный). При этом Token включает в себя список токенов (по умолчанию он null). Допустим, текст был подвергнут токенизации, в результате чего мы получили список слов — эти токены можно (но не обязательно) сделать дочерними токенами объекта текста.
Далее из полученных токенов (хранящих в себе id текста) или токенов + текстов можно сформировать term-text матрицу. Матрицу можно выгрузить в csv (реализацию для других форматов пока не сделал — собственно, думаю, и этого достаточно, и только это мне и нужно было). Подумал, что и импорт, и экспорт тоже стоит добавить в библиотеку.
Библиотека находится на гитхабе ТУТ. Вероятно, многое еще придется подправить и добавить: подправлю и добавлю.
Разрабатывая ее, попробовал немного TDD. Библиотека сделана на C#, .NET Standart. Тесты на XUnit. В солюшене есть небольшое консольное демо приложение.
По плану дальше сделать WPF и/или ASP.NET CORE MVC приложение, где будет использоваться эта библиотека (так как не пробовал ранее писать ничего ни на WPF ни на ASP.NET CORE). Для десктопных приложений использовал только WinForms (ну и Swing и JAVA FX на джава больше года назад) — надо заполнить этот пробел.