From b87ada3c969bd21b1188c935ad673c1f4671b7f6 Mon Sep 17 00:00:00 2001 From: mvalentsev Date: Mon, 13 Apr 2026 10:26:22 +0500 Subject: [PATCH 1/4] feat: add Russian language support to i18n module Add ru.json with full Russian translations for CLI strings, palace terminology, AAAK compression instruction, and regex patterns for topic/action extraction with Cyrillic character classes. No code changes needed -- the i18n module auto-discovers language files via *.json glob in the i18n directory. --- mempalace/i18n/ru.json | 44 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 mempalace/i18n/ru.json diff --git a/mempalace/i18n/ru.json b/mempalace/i18n/ru.json new file mode 100644 index 0000000..e0df469 --- /dev/null +++ b/mempalace/i18n/ru.json @@ -0,0 +1,44 @@ +{ + "lang": "ru", + "label": "Русский", + "terms": { + "palace": "дворец", + "wing": "крыло", + "hall": "зал", + "closet": "шкаф", + "drawer": "ящик", + "mine": "раскопка", + "search": "поиск", + "status": "статус", + "init": "создание", + "repair": "починка", + "migrate": "миграция", + "entity": "сущность", + "topic": "тема" + }, + "cli": { + "mine_start": "Раскопка {path}...", + "mine_complete": "Готово. Шкафов: {closets}, ящиков: {drawers}.", + "mine_skip": "Уже обработано. Используйте --force для повторной раскопки.", + "search_no_results": "Нет результатов по запросу: {query}", + "search_results": "Найдено результатов: {count}", + "status_palace": "Дворец: {path}", + "status_wings": "Крыльев: {count}", + "status_closets": "Шкафов: {count}", + "status_drawers": "Ящиков: {count}", + "init_complete": "Дворец создан в {path}", + "init_exists": "Дворец уже существует в {path}", + "repair_complete": "Починка завершена. Исправлено проблем: {fixed}.", + "migrate_complete": "Миграция завершена.", + "no_palace": "Дворец не найден. Выполните: mempalace init <директория>" + }, + "aaak": { + "instruction": "Сжать до индексного формата. Дефисы между словами, вертикальные черты между понятиями. Убрать предлоги и служебные слова. Имена и числа сохранять точно." + }, + "regex": { + "topic_pattern": "[А-ЯЁ][а-яё]{2,}|[A-Z][a-z]{2,}|[A-Za-z][A-Za-z0-9_]{2,}", + "stop_words": "это этот эта эти тот та те тех некоторые много каждый другой только такой очень будет может должен надо хорошо также даже потом сейчас уже ещё обратно сделано делать брать давать знать думать хотеть нужно если когда просто правда ладно вообще конечно например значит кстати наверное видимо похоже получается собственно кажется", + "quote_pattern": "\"([^\"]{20,200})\"", + "action_pattern": "(?:построил|исправил|написал|добавил|запустил|протестировал|проверил|создал|удалил|обновил|настроил|развернул|перенёс|собрал)\\s+[\\wа-яёА-ЯЁ\\s]{3,30}" + } +} From d6bd7de5f6f1ad5a93a2dbb7aeb76df90f206c9b Mon Sep 17 00:00:00 2001 From: mvalentsev Date: Wed, 15 Apr 2026 18:16:25 +0500 Subject: [PATCH 2/4] feat(i18n): add entity detection section to Russian locale MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cyrillic candidate/multi-word patterns, person-verb patterns (сказал, спросил, ответил, etc.), pronoun patterns, dialogue markers, direct address, and Russian stopwords. Follows the i18n entity framework from #911. --- mempalace/i18n/ru.json | 83 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 83 insertions(+) diff --git a/mempalace/i18n/ru.json b/mempalace/i18n/ru.json index e0df469..f9232c7 100644 --- a/mempalace/i18n/ru.json +++ b/mempalace/i18n/ru.json @@ -40,5 +40,88 @@ "stop_words": "это этот эта эти тот та те тех некоторые много каждый другой только такой очень будет может должен надо хорошо также даже потом сейчас уже ещё обратно сделано делать брать давать знать думать хотеть нужно если когда просто правда ладно вообще конечно например значит кстати наверное видимо похоже получается собственно кажется", "quote_pattern": "\"([^\"]{20,200})\"", "action_pattern": "(?:построил|исправил|написал|добавил|запустил|протестировал|проверил|создал|удалил|обновил|настроил|развернул|перенёс|собрал)\\s+[\\wа-яёА-ЯЁ\\s]{3,30}" + }, + "entity": { + "candidate_pattern": "[А-ЯЁ][а-яё]{1,19}", + "multi_word_pattern": "[А-ЯЁ][а-яё]+(?:\\s+[А-ЯЁ][а-яё]+)+", + "person_verb_patterns": [ + "\\b{name}\\s+сказал[аи]?\\b", + "\\b{name}\\s+спросил[аи]?\\b", + "\\b{name}\\s+ответил[аи]?\\b", + "\\b{name}\\s+рассказал[аи]?\\b", + "\\b{name}\\s+засмеял(ся|ась|ись)\\b", + "\\b{name}\\s+улыбнул(ся|ась|ись)\\b", + "\\b{name}\\s+заплакал[аи]?\\b", + "\\b{name}\\s+почувствовал[аи]?\\b", + "\\b{name}\\s+думает\\b", + "\\b{name}\\s+хочет\\b", + "\\b{name}\\s+любит\\b", + "\\b{name}\\s+ненавидит\\b", + "\\b{name}\\s+знает\\b", + "\\b{name}\\s+решил[аи]?\\b", + "\\b{name}\\s+написал[аи]?\\b" + ], + "pronoun_patterns": [ + "\\bона\\b", + "\\bеё\\b", + "\\bей\\b", + "\\bон\\b", + "\\bего\\b", + "\\bему\\b", + "\\bони\\b", + "\\bих\\b", + "\\bим\\b" + ], + "dialogue_patterns": [ + "^>\\s*{name}[:\\s]", + "^{name}:\\s", + "^\\[{name}\\]", + "\"{name}\\s+сказал" + ], + "direct_address_pattern": "\\bпривет\\s+{name}\\b|\\bспасибо\\s+{name}\\b|\\bздравствуй(те)?\\s+{name}\\b|\\bуважаемый\\s+{name}\\b|\\bуважаемая\\s+{name}\\b|\\bдорогой\\s+{name}\\b|\\bдорогая\\s+{name}\\b", + "project_verb_patterns": [ + "\\bсобираю\\s+{name}\\b", + "\\bсобрал\\s+{name}\\b", + "\\bзапускаю\\s+{name}\\b", + "\\bзапустил\\s+{name}\\b", + "\\bразвернул\\s+{name}\\b", + "\\bустановил\\s+{name}\\b", + "\\bсистема\\s+{name}\\b", + "\\bпроект\\s+{name}\\b", + "\\bimport\\s+{name}\\b", + "\\bpip\\s+install\\s+{name}\\b" + ], + "stopwords": [ + "привет", + "здравствуйте", + "спасибо", + "пожалуйста", + "да", + "нет", + "может", + "наверное", + "здесь", + "там", + "тут", + "сейчас", + "сегодня", + "вчера", + "завтра", + "всегда", + "никогда", + "ещё", + "тоже", + "очень", + "мало", + "хорошо", + "плохо", + "так", + "потом", + "перед", + "после", + "между", + "около", + "вместе" + ] } } From 3e49522a429d6e59413c280110bbc31077557067 Mon Sep 17 00:00:00 2001 From: mvalentsev Date: Wed, 15 Apr 2026 20:17:16 +0500 Subject: [PATCH 3/4] fix(i18n): apply review feedback on ru.json (#760) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - mine_skip: "повторной раскопки" -> "повторной обработки" - quote_pattern: add Russian guillemet quotes «» Co-Authored-By: almirus --- mempalace/i18n/ru.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mempalace/i18n/ru.json b/mempalace/i18n/ru.json index f9232c7..20ab94d 100644 --- a/mempalace/i18n/ru.json +++ b/mempalace/i18n/ru.json @@ -19,7 +19,7 @@ "cli": { "mine_start": "Раскопка {path}...", "mine_complete": "Готово. Шкафов: {closets}, ящиков: {drawers}.", - "mine_skip": "Уже обработано. Используйте --force для повторной раскопки.", + "mine_skip": "Уже обработано. Используйте --force для повторной обработки.", "search_no_results": "Нет результатов по запросу: {query}", "search_results": "Найдено результатов: {count}", "status_palace": "Дворец: {path}", @@ -38,7 +38,7 @@ "regex": { "topic_pattern": "[А-ЯЁ][а-яё]{2,}|[A-Z][a-z]{2,}|[A-Za-z][A-Za-z0-9_]{2,}", "stop_words": "это этот эта эти тот та те тех некоторые много каждый другой только такой очень будет может должен надо хорошо также даже потом сейчас уже ещё обратно сделано делать брать давать знать думать хотеть нужно если когда просто правда ладно вообще конечно например значит кстати наверное видимо похоже получается собственно кажется", - "quote_pattern": "\"([^\"]{20,200})\"", + "quote_pattern": "«\\s*([^»]{10,200})\\s*»|\"([^\"]{10,200})\"", "action_pattern": "(?:построил|исправил|написал|добавил|запустил|протестировал|проверил|создал|удалил|обновил|настроил|развернул|перенёс|собрал)\\s+[\\wа-яёА-ЯЁ\\s]{3,30}" }, "entity": { From 4b998de77a69a5a102c4c48bdaec872d68493679 Mon Sep 17 00:00:00 2001 From: mvalentsev Date: Wed, 15 Apr 2026 21:14:51 +0500 Subject: [PATCH 4/4] feat(i18n): expand Russian entity stopwords with prepositions and conjunctions Adds 34 prepositions and conjunctions to reduce false positives in entity detection when these words appear sentence-initial. Co-Authored-By: almirus --- mempalace/i18n/ru.json | 36 +++++++++++++++++++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) diff --git a/mempalace/i18n/ru.json b/mempalace/i18n/ru.json index 20ab94d..401431d 100644 --- a/mempalace/i18n/ru.json +++ b/mempalace/i18n/ru.json @@ -121,7 +121,41 @@ "после", "между", "около", - "вместе" + "вместе", + "без", + "для", + "над", + "под", + "при", + "про", + "через", + "против", + "вместо", + "кроме", + "среди", + "вокруг", + "вдоль", + "ради", + "напротив", + "благодаря", + "согласно", + "навстречу", + "или", + "либо", + "но", + "однако", + "зато", + "хотя", + "если", + "когда", + "пока", + "чтобы", + "потому", + "поэтому", + "причём", + "притом", + "будто", + "словно" ] } }