An open API service indexing awesome lists of open source software.

https://github.com/silvermannn/cdplayer


https://github.com/silvermannn/cdplayer

c capi conceptual-dependency cpp edmonds-algorithm fuzzy-logic haskell haskell-ffi hidden-markov-model nlp rule-based-system viterbi-algorithm

Last synced: 5 months ago
JSON representation

Awesome Lists containing this project

README

          

# CDPlayer

Обработка текста с использованием идей концептуальных зависимостей Р. Шенка

# Основные идеи и компоненты:

- Токенайзер - пока самый простой, разбиваем входное предложение по пробельным символам
- Словарь слов [OpenCorpora Dict](https://opencorpora.org)
- Таггер: HMM, тренированная на файлах CoNLLU, корпуса [отсюда](https://github.com/natasha/corus) -- C++
- Построение дерева зависимостей
- статистика из CoNLLU файлов (3D matrix *dependency head* -> *to* -> *dependency relation*)
- построение ориентированного графа из всех возможных зависимостей с весами из статистики
- нахождение минимального остовного дерева из искуственного корня, ([алгоритм двух китайцев](https://codeforces.com/blog/entry/20079), [Chu Liu Edmonds](https://en.wikipedia.org/wiki/Edmonds%27_algorithm) -- C++
- Дерево зависимостей (или построенное на его основе другое синтаксическое дерево) как запрос к базе данных концептуальных зависимостей -- Haskell

# TODO:

- Добавить в словарь основную форму слова, которая будет нужна для построения правил. Возможно это есть в xml варианте словаря [OpenCorpora Dict](https://opencorpora.org) и на [WikiData](https://www.wikidata.org)
- Добавить загрузку корпусов с [OpenCorpora Dict](https://opencorpora.org).
- Идея одновременного проставления тегов частей речи и построения дерев зависимостей:
- каждому слову сопоставляется список всех возможных тегов
- есть набор правил вида (направление поска, что является родителем, что является потомком, вес правила), которые, начиная с дерева с одним элементом "root", строят (несколько) деревьев зависимостей с одновременным тегорованием
- сами правила, в теории, можно написать вручную, но можно использовать эволюционный алгоритм для их нахождения