Devamitta / inflection

generate all inflections from scratch (has been integrated into the DPD exporter)
https://github.com/digitalpalidictionary/dpd-db/
0 stars 1 forks source link

руссификация #4

Closed Devamitta closed 8 months ago

Devamitta commented 1 year ago

image

возможно ли производить такую же замену в html inflections? но для этого думаю нужно менять код https://github.com/Devamitta/inflection-generator-dps думаю что для этого нужно будет производить замену в xls https://github.com/Devamitta/inflection-generator-dps/blob/main/declensions%20%26%20conjugations.xlsx и так как этот файл время от времени меняется оригинальным автором DPD дост Бодхираса, то замену нужно делать тоже на лету. Также в строке: ābādhika is a masc declension like buddha, слова a masc берутся из dps_df["Pattern"] думаю чтобы не переделывать весь процесс можно производить замену лишь в окончательном файле

imput этого кода тот же что у exporter

bergentroll commented 1 year ago

Запрос в работе, есть продвижение.

Подскажите пожалуйста, правильно ли я понял:

Devamitta commented 1 year ago

Верно переводить нужно в файлах output/html tables/*.html только нужно учитывать что нужно иметь 2 варианта, оригинальный англ для SBS словаря и переведенный русский для DPS переводы аббревиатур берем из листа abbreviations в шапке переводим все кроме Pattern например "a masc" или "ī adj" их оставляем вот пример как может выглядеть html:

2023-01-05_10-27

bergentroll commented 1 year ago

Переводит: изображение

Сделаю несколько правок, прежде чем сливать. :pray:

Бхантэ @Devamitta, функции *_suttas и директория output/html suttas относятся к словарю SBS?

Devamitta commented 1 year ago

На данный момент оба словаря берут таблицы склонений из output/html suttas

какие именно функции *_suttas вы имеете в виду?

bergentroll commented 1 year ago

Кажется, пока разобрался, спасибо. Вопрос был про test_if_inflections_exist_suttas.

bergentroll commented 1 year ago

В функции modules.read_and_clean_sutta_text() читаются файлы из директории dpd-br/pure-machine-readable-corpus/cscd/. Что это за ресурс? Где его найти?

bergentroll commented 1 year ago

В функции modules.read_and_clean_sutta_text() читаются файлы из директории dpd-br/pure-machine-readable-corpus/cscd/.

По видимости, это образ с tipitaka.org.

Devamitta commented 1 year ago

Добавил вас в тот РЕПО.

Но эта часть кода не влияет на создания HTML склонений.

Этот код делает лист слов из выбранной сутты, отсутствующих в DPS. Чтобы можно было добавить их.

Эту часть кода не нужно русифицировать.

bergentroll commented 1 year ago

Спасибо, бхантэ. Увидел. Прогоню, чтобы удостовериться, что всё работает.

Devamitta commented 1 year ago

Скачал обновления сделал все что написано в readme удалил все файлы в output, потому как программа не генерировала новые пока старые есть, все сгенерировалось с переводом, но теперь оба словаря SBS и DPS имеют одинаковые таблицы склонений - русские а русские нужны только в DPS , SBS - английские оригинальные

Devamitta commented 1 year ago

И программа не может сгенерировать все. Пишет ошибку. после слова vassānotu: File "/home/deva/Documents/dps/inflection/inflection generator.py", line 11, in <module> generate_inflections(args) File "/home/deva/Documents/dps/inflection/inflection_generator/cli.py", line 40, in generate_inflections table_generator.generate_html() File "/home/deva/Documents/dps/inflection/inflection_generator/modules.py", line 525, in generate_html self._create_html_table(row) File "/home/deva/Documents/dps/inflection/inflection_generator/modules.py", line 506, in _create_html_table heading = self._make_heading(pos, example, headword_clean, pattern) File "/home/deva/Documents/dps/inflection/inflection_generator/modules.py", line 431, in _make_heading f" {derivative_type} как <b>{example}</b>") UnboundLocalError: local variable 'derivative_type' referenced before assignment Mon Jan 9 05:23:53 PM +08 2023 Здесь log кода dictALL.sh

Devamitta commented 1 year ago

у глаголов заменяет с ошибкой

image

reflexive должен заменяться на возвр. в соответствии с таблицей

bergentroll commented 1 year ago

Отсутствие

Жаль, что появились ошибки. В конце недели я собираюсь в поездку и не смогу заниматься кодом до начала февраля. Давайте попробуем исправить, бхантэ.

К сожалению, я не смог полностью «прогнать» inflection_generator --kind SBS. В ходе выполнения требуются некие файлы *-class.csv. Сейчас увидел, что для них есть какие-то скрипты в utils.

Если бы я получил текущую версию dps.ods и необходимый class-файл, это могло бы помочь в отладке.

Путаница с переводом

Как вижу, и для SBS, и для DPS, таблицы берутся из output/html tables/. Поскольку таблицы теперь должны существовать в двух вариантах, предлагаю, соответственно, сохранять их в output/html_tables_dps и output/html_tables_sbs (или _ru/_en). В exporter читать из соответствующих директорий согласно kind.

reflexive должен заменяться на возвр. в соответствии с таблицей

Если правильно понял проблему, заменяется часть слова (окончание 'x' + 've'). Это можно проработать, но займёт время. Предлагаю пока завести issue.

Нужно ли читать сокращения assets/abbreviations.csv (их там много), или мы можем завести небольшой дополнительный список слов (таких, как reflexive), которые будут переводиться в заголовке таблиц?

Ошибка после слова vassānotu

local variable 'derivative_type' referenced before assignment

Это значит, что pos для слова не нашёлся ни в списке declensions, ни в списке conjugations класса InflectionTableGenerator. В таком случае вижу такие варианты:

Об utils

Здесь log кода dictALL.sh

Не стоит сохранять журналы вместе с кодом — они остаются в репозитории навсегда. Когда вы хотите поделиться каким-то текстом, можно использовать, например, GitHub Gist.

В шелл-скрипты (такие, как dictALL.sh) можно добавлять set -e первой командой. Тогда скрипт будет завершаться сразу, как только какая-то команда завершится ошибкой. Это позволяет сразу увидеть ошибку.


:pray: :pray: :pray:

Devamitta commented 1 year ago

может быть будет полезным описать процесс создания словаря как он происходит у меня:

сохраняю свежую копию dps.ods с google sheets

запускаю скрипт anki.sh

и код dictALL.sh

Devamitta commented 1 year ago

или мы можем завести небольшой дополнительный список слов (таких, как reflexive), которые будут переводиться в заголовке таблиц?

Согласен, что для простоты можно создать отдельную таблицу замен. Займусь этим

Devamitta commented 1 year ago

создал отдельную таблицу для замены HTML склонений. https://github.com/Devamitta/inflection-generator-dps/blob/main/rusification.csv

Devamitta commented 1 year ago

нашел ошибку. исправил. в столбце pattern было неверно. сейчас работает. теперь для всех слов создает русскую версию таблицы склонений.

Devamitta commented 1 year ago

также сейчас перестали работать функции: test if inflection exists in sutta.py ошибка:

Traceback (most recent call last): File "/home/deva/Documents/dps/inflection/test if inflection exists in sutta.py", line 35, in main() File "/home/deva/Documents/dps/inflection/test if inflection exists in sutta.py", line 29, in main modules.make_comparison_table() File "/home/deva/Documents/dps/inflection/inflection_generator/modules.py", line 1078, in make_comparison_table eg3_test = sutta_words_df[0].isin(no_eg3_list) NameError: name 'no_eg3_list' is not defined. Did you mean: 'no_eg1_list'?

и

test for most common words.py ошибка:

Traceback (most recent call last): File "/home/deva/Documents/dps/inflection/test for most common words.py", line 42, in main() File "/home/deva/Documents/dps/inflection/test for most common words.py", line 37, in main modules.html_find_and_replace() File "/home/deva/Documents/dps/inflection/inflection_generator/modules.py", line 1165, in html_find_and_replace sutta_text += f'

no eg3: {" ".joint(no_eg3)}' AttributeError: 'str' object has no attribute 'joint'. Did you mean: 'join'?

bergentroll commented 1 year ago

Сломанные функции

test if inflection exists in sutta.py NameError: name 'no_eg3_list' is not defined. Did you mean: 'no_eg1_list'?

Дело в том, что no_eg3_list наполняется только в функции make_list_of_all_inflections_potential(), но она не вызывается в test if inflection exists in sutta.py. В файле есть закомментированный вызов make_list_of_all_inflections_no_eg3(data), но в modules.py такой функции нет.

Самым простым решением будет no_eg3_list: List[str] к виду no_eg3_list: List[str] = [], но это будет пустой список, не уверен, что это корректно.

test for most common words.py AttributeError: 'str' object has no attribute 'joint'. Did you mean: 'join'?

Сегодня исправлю.

Рассчитываю так же проработать перевод аббревиатур и разводку таблиц по директориям. :heart::pray:

Devamitta commented 1 year ago

Дело в том, что no_eg3_list наполняется только в функции make_list_of_all_inflections_potential(), но она не вызывается в test if inflection exists in sutta.py. В файле есть закомментированный вызов make_list_of_all_inflections_no_eg3(data), но в modules.py такой функции нет.

мне кажется я вносил изменения в код уже после того, как вы ответвились на работу по русификации. Посмотрю лог

Devamitta commented 1 year ago

test if inflection exists in sutta.py NameError: name 'no_eg3_list' is not defined. Did you mean: 'no_eg1_list'?

исправил добавлением def make_list_of_all_inflections_no_eg3 из архива, действительно по какой то причине этот commit не перешел в вашу версию. теперь у обоих функций одинаковая ошибка

Traceback (most recent call last): File "/home/deva/Documents/dps/inflection/test if inflection exists in sutta.py", line 35, in main() File "/home/deva/Documents/dps/inflection/test if inflection exists in sutta.py", line 30, in main modules.html_find_and_replace() File "/home/deva/Documents/dps/inflection/inflection_generator/modules.py", line 1199, in html_find_and_replace sutta_text += f'

no eg3: {" ".joint(no_eg3)}' AttributeError: 'str' object has no attribute 'joint'. Did you mean: 'join'?

Devamitta commented 1 year ago

Скачал все обновления, запускаю той же командой, но код не создает склонения в папку html_tables_sbs

log кода

мне кажется обе функции должны работать вместе, а сейчас они или-или

    if self._kind is Kind.DPS:
        tables_dir = settings.HTML_TABLES_DPS_DIR
    elif self._kind is Kind.SBS:
        tables_dir = settings.HTML_TABLES_SBS_DIR

пока временно запускаю новый и старый вместе, поэтому в exporter временно поменял путь

коды 'test' работают отлично, благодарю.

Devamitta commented 1 year ago

@bergentroll

Можете посмотреть все же что не работает в TABLES_SBS_DIR и почему папка html_tables_sbs пуста?

bergentroll commented 1 year ago

Я добрался посмотреть проблему, но забыл, как запускал у себя код.

Запуск inflection-generator --kind DPS с таблицами exporter/examples/spreadsheets/ приводит к ошибке KeyError: 'pali_1' (как я понимаю, в таблицах отсутствует необходимое поле).

@Devamitta :pray::pray::pray:

bergentroll commented 1 year ago

мне кажется обе функции должны работать вместе, а сейчас они или-или

Насколько помню, с флагом --kind DPS должны собираться только файлы для русско-палийского словаря, с флагом --kind SBS только для словаря к служебнику, и эти файлы не зависят друг от друга. Но если зависят, то может быть дело в этом. При изменениях я старался, чтобы разные процессы не зависели друг от друга.

Для выполнения inflection-generator --kind DPS необходимы файлы *-class.csv, не могу их найти.

Devamitta commented 1 year ago

Запуск inflection-generator --kind DPS с таблицами exporter/examples/spreadsheets/ приводит к ошибке KeyError: 'pali_1' (как я понимаю, в таблицах отсутствует необходимое поле).

обновил файлы исходников

Devamitta commented 1 year ago

Для выполнения inflection-generator --kind DPS необходимы файлы *-class.csv, не могу их найти.

думаю для теста будет достаточно этих файлов: https://github.com/Devamitta/word-frequency/tree/main/csv-for-examples

bergentroll commented 1 year ago

Тогда как inflection-generator --kind DPS читает spreadsheets/dps-full.csv, inflection-generator --kind SBS читает word-frequency/csv-for-examples/1-class.csv (или прочие *-class.csv в зависимости от аргумента командной строки --class-file-name). Это поведение мной не менялось.

В последнем коммите https://github.com/Devamitta/word-frequency/ файл 1-class.csv содержит 80 строк без учёта заголовка. При выполнении команды inflection-generator --kind SBS с предварительно установленной переменной среды export DPS_DIR=ПУТЬ_К_ДИРЕКТОРИИ (где ПУТЬ_К_ДИРЕКТОРИИ указывает на директорию, содержащую репозиторий word-frequency) в директории output/html_tables_sbs/ создаётся 80 файлов по числу вхождений в 1-class.csv.

В ходе изучения вопроса внесено несколько правок, не меняющих логику работы. Открыт запрос на слияние #8.

:pray: :pray: :pray:

Devamitta commented 1 year ago

Благодарю

ожидаемое поведение: для словаря DPS - создание таблиц склонений на русском для словаря SBS - создание таблиц склонений на английском

исходный файл для обоих словарей dps-full.csv

я поменял путь в cli.py в строке 30: csv_file = settings.DPS_DIR/"spreadsheets"/"dps-full.csv"

ввожу команды в директории репозитория: python3 -m venv env source env/bin/activate pip3 install -e . export DPS_DIR='../' inflection-generator --kind DPS inflection-generator --kind SBS

но наполняется только папка html_tables_dps а папка html_tables_sbs так и остается пустой.