?

Log in

No account? Create an account

Компьютерная лингвистика

Новостная лента www.solarix.ru

Entries by tag: SQL словарь

Генерация деепричастных форм из инфинитивов - SQL словарь + Python + xgboost
kelijah
Read more...Collapse )

Исходники утилиты для экспорта словаря в SQL базу
kelijah
В репозиторий выложил исходники и сборочные скрипты для утилиты decompiler.
Делает она такую вещь. Загружает собранный компилятором словарь и генерирует набор SQL-команд для загрузки словаря в реляционную СУБД.
В частности, можно залить словарь в SQLite таким набором действий.
Read more...Collapse )

Датасеты для тренировки моделей
kelijah

Для обучения автоэнкодеров достаточно собрать по большому корпусу текстов слова, отсеять редкие (опечатки), и работать с ними. Можно спорить, является ли автоэнкодер чисто unsupervised моделью, но данные для него получаются без ручного труда.


Остальные модели требуют списков слов с леммами, эталонную классификацию слов по частям речи или эталонные списки грамматических тегов для слов.

Read more...Collapse )


sequence2sequence лемматизатор на 3 миллионах паттернах: текущие результаты
kelijah
Запустил ранее описанную модель русской лемматизации на основе двух рекуррентных нейросетей на 3 миллионах пар словоформа-лемма, взятых из моего SQL словаря русского языка.

Без GPU дело идет, конечно, медленно, но даже первые эпохи обучения показывают неплохие результаты. Под катом - лемматизации слов, которые модель не видела в ходе обучения:
результаты тестовой лемматизации...Collapse )

Есть любопытные примеры с беглыми гласными:

самозванцах                  ==> самозванец

Но так бывает не всегда, что, впрочем, характерно и для детской речи:

костры                       ==> костр

Или то, как сеть придумывает лемму, следуя найденным закономерностям:

брюки                        ==> брюка

Хотя иногда результаты ставят в тупик, например:

НАТО                         ==> Сюха

А в некоторых ошибках при желании увидеть и подтверждение некоторых фонетических закономерностей:

Нестором                     ==> Местор 

В SQL словаре - кумулятивные частоты словарных статей из tree bank
kelijah
Закончил перенос новой статистики в словарную базу. Частоты словарных статей берутся из результатов частеречной разметки парсером.

Теперь SQL запрос типа

select C.name, E.name, E.freq
 from sg_entry E, sg_class C
 where E.name in ( 'знать', 'уж' ) and C.id=E.id_class
 order by E.name, E.freq DESC

выдает полезную информацию:

ГЛАГОЛ               знать                5108
ИНФИНИТИВ            знать                617
ВВОДНОЕ              знать                9
СУЩЕСТВИТЕЛЬНОЕ      знать                8
ЧАСТИЦА              уж                   408
НАРЕЧИЕ              уж                   293
СУЩЕСТВИТЕЛЬНОЕ      уж                   31

PIVOTing в MS SQL для вывода таблицы склонения
kelijah
Так как каждая словоформа хранится в SQL словаре в виде отдельной записи, то по умолчанию получается такая выбора форм существительных:

Запрос для получения форм существительных на КОШ-Collapse )

Результат выполнения запросаCollapse )

А если захотелось странного - вывести все формы каждого существительного в одну строку?
Самое простое - сделать пользовательскую функцию, возвращающую заданную форму заданного слова.
А если создавать функции для получения заданной падежной формы нежелательно?
Тогда можно написать вот такой запросец с использованием забавного ms-specific оператора PIVOT:

Запрос для вывода падежных форм с использованием PIVOT...Collapse )

Результат (первый столбец - словарная форма, далее падежные формы для единственного и множественного числа):

Результаты выполнения запроса с использованием PIVOT...Collapse )

SQL Словарь v.13.16 Oracle, PostgreSQL etc.
kelijah
Обновил на сайте архивы ознакомительных версий SQL словаря с русской словарной базой.

Краткий changelog:

1. Ознакомительные версии SQL словарей расширены в объеме до 20,000 самых частотных статей.

2. Добавлены варианты словарной базы под Oracle и PostgreSQL.

3. Добавлен вариант загрузки русской словарной базы в MS Access через импорт XML формата.

Подробное описание и ссылки на дистрибутивы можно найти на странице описания SQL словаря - здесь.

Словарная база в PostgresSQL
kelijah
После некоторой возни и добавления в утилиту экспорта поддержки особенностей этой СУБД загрузил полную русскую словарную базу.

Загрузка больших таблиц (миллионы записей для таблицы словоформ, десятки миллионов для грамматических признаков словоформ) сделал через команду \copy в psql. Приятный сюрприз - очень, очень приличная скорость загрузки, на первый взгляд лучше MS SQL, Oracle и MySQL.

Русская словарная база под Oracle
kelijah

Очень давно не проверял загрузку словарной базы в эту СУБД.

Так сложилось, что последние два месяца я очень плотно вернулся к работе с этой СУБД. Поэтому решил заодно закрыть должки с совместимостью, накопившиеся за истекшие пару лет. Установил на отладочном сервере 11g Release 11.2.

С удовлетворением заметил, что корпорация осталась верна себе в плане отвратительного качества десктопной части своих продуктов, по крайней мере начиная с версии 8, на которой я начинал десять лет назад. Старое правило стол же актуально (спасибо качественной реализации гуя в джаве): если инсталлер не подает признаков жизни более пяти минут - попереключай окна, наверняка какой-то попап висит за главным окном и ждет реакции. В общем, мрак к версии 11 не расселся.

В словарной базе ошибок оказалось немного, и после пары часов правок экспортера русский словарь загрузился и нормально заработал. Английский кстати тоже загружается нормальненько.


Рекурсивный обход графа в тезаурусе одним SQL запросом
kelijah

Допустим, мы хотим получить список слов (словарных статей), которые связаны с некоторым заданным словом отношениями синонимии или некоторыми морфологическими преобразованиями (например, белый-белеть).

В тезаурусе словарной базы отношения между словами оформляются с помощью бинарных отношений. Каждое такое отношение представляется как запись из трех главных компонентов: тип связи (синоним, антоним и т.д.), ссылка на первое слово и ссылка на второе слово.

Можно ли одним SQL запросом увидеть список связанных слов с учетом рекурсивного характера алгоритма обхода?

Для решения нужно использовать такую полезную вещь, как Common Table Expressions и их разновидность для рекурсивного обхода деревьев - см. http://en.wikipedia.org/wiki/Hierarchical_and_recursive_queries_in_SQL. Само по себе CTE является просто локально определенным и именованным view в рамках конкретного запроса, вводимым с помощью ключевого слова with. Если добавить сюда возможность внутри CTE сослаться в FROM на это же самое CTE, то получается полноценное решение задачи без каких-либо процедурных костылей.

Вот запрос, работающий в FireBird версии 2.5 (насчет более ранних версий нужно проверять, но скорее всего в 2.1 этот фокус тоже работает):

Рекурсивный SQL запрос и его результат...Collapse )