Сделал библиотеку для предобработки текстов, формирования term-text матрицы

Вероятно, доделал основу библиотеки для предобработки текстов, нужную мне периодически. Надоело каждый раз писать одно и то же — решил сделать библиотеку. Функционал ее очень простой — на вход ей подаются тексты — например, их можно импортировать из 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 на джава больше года назад)  — надо заполнить этот пробел.

Баг в инверсии матриц

В библиотеке для машинного обучения, которую сейчас пишу, кажется, косяк в расчете инверсии для матрицы. Очень странно. Может быть, буду искать баг, а может и забью. Может быть, как-нибудь потом поразбираюсь дальше… Может быть, какие-то особенности инверсии, которые я не знаю. Хотя странно очень — раньше не наблюдались проблемы… Как бы то ни было — начинаю разбирать F#. Для работы с матрицами, пожалуй, буду использовать не свою библиотеку (просто для верности и из нежелания искать баг в инверсии, если дело вообще в ней). В общем-то, свою цель библиотека частично выполнила — я разобрал основы работы с матрицами и написал несколько методов регрессии… По большому счету — на этом можно и остановиться в разработке этой библиотеки. Хотя… хз…

Множественная линейная регрессия на C#

Поскольку на прошлой неделе сделал реализацию работу с матрицами на c# — самое время ими воспользоваться. Собственно, пока что сделал только множественную линейную регрессию. Класс для работы с ней находится ВОТ ТУТ.

Для начала создаем объект множественной линейной регрессии: Читать далее Множественная линейная регрессия на C#

C#. Матрицы: Умножение на скаляр. Инвертирование, транспонирование, детерминант. Сложение, вычитание и умножение

Для реализации множественной линейной регрессии потребовалось поработать с матрицами — а именно, научиться их перемножать, транспонировать и инвертировать. Поскольку ничего такого раньше делать не умел, решил самостоятельно реализовать это в библиотеке машинного обучения, которую сейчас пишу (такой вот способ изучения машинного обучения с нуля придумал для себя).

Библиотека находится на github ВОТ ТУТ. Пока что всё в ней написано на c#. Может быть, еще добавится что-то функциональное — но никак не могу выбрать между F# и всем остальным… По уму-то — нужен F#, так как всё же это у меня .NET. Но вот F#, кажется, сейчас уже никому не нужен, поэтому не знаю, какой язык осваивать.

Итак, создаем матрицу. Конструктор принимает двухмерный массив double — собственно, саму матрицу:

double[,] a = new double[3, 3];
            sqvArr[0, 0] = -1;
            sqvArr[0, 1] = -2;
            sqvArr[0, 2] = 2;
            sqvArr[1, 0] = 2;
            sqvArr[1, 1] = 1;
            sqvArr[1, 2] = 1;
            sqvArr[2, 0] = 3;
            sqvArr[2, 1] = 4;
            sqvArr[2, 2] = 5;

            Matrix matrixA = new Matrix(a);

Читать далее C#. Матрицы: Умножение на скаляр. Инвертирование, транспонирование, детерминант. Сложение, вычитание и умножение