This hosts code for the future sakha language corpus
Пометкой ДЕВ
отмечаю приватные вещи, которые потом надо удалить
This was developed with python 3.7.1
, then 3.9.10
.
Most code should be compatible with the former, except for spacy
- Use venv (create it and switch to it as described here)
Windows
cmd
:Windowspython -m venv venv venv\Scripts\activate.bat
PowerShell
:Linux:python -m venv venv venv\Scripts\Activate.ps1
python -m venv venv source venv/Scripts/activate
- Use pip to install the dependencies.
This is needed only for the pipeline (
requirements_pipeline.txt
), which usesnltk.tokenizer.Punkt
for sentences andspacy
for russian analysis and general tokenization.pip install -r requirements_pipeline.txt
Pipeline (ДЕВ: половина из этого ещё не работает):
- Файлы (названия не отражают сути, поменяю)
data_models.py
— API для итерации и индексирования данных (пока только edersaas за 05.12.2021), в будущем все данные таким или похожим образомtidy_string.py
— разные группы преобразований с целью нормализации.
Их надо дополнять и уметь параметризовывать (наверное что-то совсем базовое нужно будет всегда?)profile_characters.py
— посмотреть, что неловимое общими правилами отсутствует в небольшом алфавитеpipeline.py
— общий пайплайн обработки текста. Пока мало кода, даже не успел попробовать, что придумал (spacy
для токенизации)train_sentence_tok.py
— тренировка токенизатора предложений (первая, без препроцессинга. Её результат - файлsakha_edersaas_0.pickle
, см. ниже)
nltk.tokenizer.Punkt
for sentence parsingspacy
for russian analysis and general tokenization. (пока не до конца)foma
for rule-based sakha words parsing (NB: not yet in the pipeline)/foma/rules2foma.py
converts csv files to foma source files (.lexc
and.foma
)
ДЕВ (наверное потом надо убрать же ?!) парсинг сайта словаря sakhatyla.ru:
parse.py
,lexemes.py
Основная папка, в ней пока что
- гугл-таблица с морфемами, правилами и тестами
- в
/texts
архив по новостному сайтуedersaas.7z
(edersaas.ru)
(их, конечно, надо будет переделывать, там то ли из лишнего тэга берётся текст, то ли наоборот не берётся.- может понадобиться базовая нормализация текста перед сохранением)
- модель токенизатора предложений
sakha_edersaas_0.pickle
(созданная по тексту без преобразований => не такая хорошая)
(NB: поначалу ошибся с ней и сохранил тренировочный класс, это не совсем модель. После разогуречивания надо ещё.get_params()
, код может уже не отражать этого, простите... хотя вpipeline.py
вроде отражено) - файлы фомы, если вдруг будет желание запустить
- общий список слов на сайте sakhatyla.ru (ru/sah/eng)
- страницы сайта sakhatyla.ru (
sakhatyla.7z
) - якутские слова с сайта, проанализированные (ещё надо улучшать)
sakhatyla.csv
-
обсудить большой вопрос:
может быть можно научиться понимать, когда текст полностью русский, а когда смешанный и размечать в последних и русское и якутское?
Это в основном про нелитературные источники, типа соцсетей, форумов, которых я не так много видел, но мультиязычность здесь была бы супер. -
обсудить содержание и порядок применения символьных юникодовских преобразований (нормализацию)
-
тексты сохранять до всяких преобразований? или с частичными крайне общими типа удаления разновидных пробелов,
всевозможные_кавычки -> "
? -
может эмодзи можно оставить? 🥺
было бы круто их иметь в исходном тексте. Может помочь кому-то в будущем для какого-то продвинутого НЛП. Сходу не пойму, но не мешает ли оставление выравниванию разметки и исходных форм?
ещё есть же очень сложные эмодзи типа 🤦♂️ Man Facepalming, которые из кучи скалярных code points состоят.
Как их вообще может токенизировать вместе udpipe?..
Представляю разве что эвристики, что брать всю группу символов от нормального словарного до технического типа\ufeof
. Но простые текстовые эмодзи и без него бывают.
-
-
закончить наконец правиловый парсер...
- (NB: нужно проверить) кажется, можно иметь даже выравнивание морфема-значение
- дописать собственно морфологию и морфонологию
- (NB: на обсуждение) сделать какие-то тесты
вариант: залить на какой-нибудьpythonanywhere.com
и попросить людей из экспы попроверять там как размечается. Разрешать вводить, скажем, предложение.- установить фому туда
- фронт и бэк для сбора фидбэка / указаний на ошибки
- автоматический залив фидбэка в гугл-щитс
-
токенизация предложений после тренировки не такая плохая, но надо улучшать
- добавить код, который бы считал частоту паттерна типа
'\w+.(\w.)+(\s|[,:;]'
и добавлял бы в конце тренировочные контексты для парсера (вроде так можно суметь, но непонятно, как это делать когда много. Добавлять найденные частые "аббревиатуры" в один и тот же контекст?)
- добавить код, который бы считал частоту паттерна типа
-
обсудить токенизацию
-
что-то типа
spacy
?
там последовательно от штук разделённых пробелами отщепляются возможные префиксы и суффиксы (знаки препинания), также слово если в специальном специальном словаре, разворачивается как указано NB: всё вручную, необучаемо -
ещё, насколько либеральное правило для ссылок?
видел кучу, кучу 2 всяких, на одно часто ссылаются (плюс там в теме исправления).
-
-
ещё раз обсудить как надо хранить файлы..
- сейчас сохранены
.json
со всякими метаданными.
При этом можно итерироваться поtrain_paragraphs.py.
EdersaasJSON
/Dataset
и получать либо просто куски текстовreturn_meta = False
или куски текстов + некоторые метаданные
- сейчас сохранены
-
добить парсинг статей с sakhatyla.ru..
неплох, но надо сделать лучше, чтобы был хороший словарь с частеречными данными- слова в русском переводе (для целей определить и исходную часть речи)
лучше парсить не пайморфи..
лучше парсить целое предложение перевода udpipe'ом, он справляется и с разделителем типа|
и в целом круче. Можно брать часть речи синтаксической вершины перевода
- слова в русском переводе (для целей определить и исходную часть речи)
лучше парсить не пайморфи..
-
добавлять ресурсы, скачивать с них текст...
-
...
N/A
N/A