?

Log in

No account? Create an account

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

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

Entries by category: история

Странная разница в скорости pickle.load в Python 2 и 3
kelijah
В ходе экспериментов с оптимизацией загрузки словаря в проекте ruword2tags столкнулся с неожиданным эффектом.
Контекст такой:
Read more...Collapse )
5) Неожиданный эффект заключается в том, что во 2й версии питона pickle.load работает примерно 60 секунд, в 3й - 6 секунд.
Tags:

Рекурсивный обход графа в тезаурусе одним 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 )