diff --git a/CHANGELOG.md b/CHANGELOG.md index f90babb..a475b21 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,21 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). +## [2.6.10] - 2026-07 + +### Removed +- Rank **«рекрут»** removed from all rank lists: `RANK_DECLENSIONS`, + `ARMY_RANKS` (rank_data.py), army regex in `RANK_PATTERNS` + (masking/constants.py) and its copy in `modules/tools.py`, plus README + rank tables and examples. The rank is no longer recognized in text and + is never produced as a mask. + +### Note +- Removing «рекрут» from the army hierarchy shifts deterministic mask + choices for adjacent low ranks — the same input text may now mask ranks + differently than in ≤2.6.9. Unmasking of old files is unaffected: + it uses the mapping JSON, not the hierarchy. + ## [2.6.9] - 2026-07 ### Fixed diff --git a/data_masking.py b/data_masking.py index 18d2fc4..1ca40dc 100644 --- a/data_masking.py +++ b/data_masking.py @@ -30,7 +30,7 @@ # Re-exports from masking package for backward compatibility # ============================================================================ -__version__ = "2.6.9" +__version__ = "2.6.10" from masking.constants import ( __version__, __author__, __contact__, __phone__, __license__, __year__, diff --git a/docs/README.md b/docs/README.md index 6d52807..30f6905 100644 --- a/docs/README.md +++ b/docs/README.md @@ -161,7 +161,7 @@ Unmask правильно відновить обидва входження **Additional modifiers:** ``` -"Солдату у відставці" → "Рекруту у відставці" (давальний зберігається!) +"Солдату у відставці" → "Рядовому у відставці" (давальний зберігається!) "Сержанту в запасі" → "Старшому солдату в запасі" (давальний зберігається!) "Капітану на пенсії" → "Майору на пенсії" (давальний зберігається!) ``` @@ -420,8 +420,8 @@ ID-паспорт 123947568, видано наказом №59/87/4249/Р від ## 📚 Supported Ranks -### Army (32 ranks) -**Enlisted:** рекрут, рядовий, солдат, старший солдат +### Army (31 ranks) +**Enlisted:** рядовий, солдат, старший солдат **Sergeants:** молодший сержант, сержант, старший сержант, головний сержант, штаб-сержант, майстер-сержант, старший майстер-сержант, головний майстер-сержант diff --git a/docs/README_UK.md b/docs/README_UK.md index 83baa0b..c13a3cd 100644 --- a/docs/README_UK.md +++ b/docs/README_UK.md @@ -161,7 +161,7 @@ Unmask правильно відновить обидва входження **Додаткові слова:** ``` -"Солдату у відставці" → "Рекруту у відставці" (давальний зберігається!) +"Солдату у відставці" → "Рядовому у відставці" (давальний зберігається!) "Сержанту в запасі" → "Старшому солдату в запасі" (давальний зберігається!) "Капітану на пенсії" → "Майору на пенсії" (давальний зберігається!) ``` @@ -420,8 +420,8 @@ ID-паспорт 123947568, видано наказом №59/87/4249/Р від ## 📚 Підтримувані звання -### Армія (32 звання) -**Рядові:** рекрут, рядовий, солдат, старший солдат +### Армія (31 звання) +**Рядові:** рядовий, солдат, старший солдат **Сержанти:** молодший сержант, сержант, старший сержант, головний сержант, штаб-сержант, майстер-сержант, старший майстер-сержант, головний майстер-сержант diff --git a/masking/constants.py b/masking/constants.py index 279c468..ed0b24b 100644 --- a/masking/constants.py +++ b/masking/constants.py @@ -26,7 +26,7 @@ # ============================================================================ # МЕТАДАНІ # ============================================================================ -__version__ = "2.6.9" +__version__ = "2.6.10" __author__ = "Vladyslav V. Prodan" __contact__ = "github.com/click0" __phone__ = "+38(099)6053340" @@ -139,7 +139,7 @@ # Regex паттерни для виявлення звань різних типів служб RANK_PATTERNS = { - "army": r"\b(рекрут|рядовий|солдат|старший солдат|ефрейтор|молодший сержант|сержант|старший сержант|головний сержант|штабс-сержант|майстер-сержант|старший майстер-сержант|головний майстер-сержант|прапорщик|старший прапорщик|молодший лейтенант|лейтенант|старший лейтенант|капітан|майор|підполковник|полковник|бригадний генерал|генерал-майор|генерал-лейтенант|генерал)\b", + "army": r"\b(рядовий|солдат|старший солдат|ефрейтор|молодший сержант|сержант|старший сержант|головний сержант|штабс-сержант|майстер-сержант|старший майстер-сержант|головний майстер-сержант|прапорщик|старший прапорщик|молодший лейтенант|лейтенант|старший лейтенант|капітан|майор|підполковник|полковник|бригадний генерал|генерал-майор|генерал-лейтенант|генерал)\b", "naval": r"\b(матрос|моряк|старший матрос|старший моряк|молодший сержант|сержант|старший сержант|головний сержант|штабс-сержант|майстер-сержант|старший майстер-сержант|головний майстер-сержант|молодший лейтенант|лейтенант|старший лейтенант|капітан-лейтенант|капітан \d+-го рангу|контр-адмірал|віце-адмірал|адмірал)\b", "legal": r"\b(молодший сержант юстиції|сержант юстиції|старший сержант юстиції|головний сержант юстиції|штабс-сержант юстиції|молодший лейтенант юстиції|лейтенант юстиції|старший лейтенант юстиції|капітан юстиції|майор юстиції|підполковник юстиції|полковник юстиції|генерал-майор юстиції|генерал-лейтенант юстиції)\b", "medical": r"\b(молодший сержант медичної служби|сержант медичної служби|старший сержант медичної служби|головний сержант медичної служби|штабс-сержант медичної служби|молодший лейтенант медичної служби|лейтенант медичної служби|старший лейтенант медичної служби|капітан медичної служби|майор медичної служби|підполковник медичної служби|полковник медичної служби|генерал-майор медичної служби|генерал-лейтенант медичної служби)\b" diff --git a/modules/tools.py b/modules/tools.py index 25e81a5..c71bd6e 100644 --- a/modules/tools.py +++ b/modules/tools.py @@ -110,7 +110,7 @@ # Rank category patterns (simplified for direct-mode usage) RANK_PATTERNS = { "army": re.compile( - r"\b(рекрут|рядовий|солдат|старший солдат|ефрейтор|" + r"\b(рядовий|солдат|старший солдат|ефрейтор|" r"молодший сержант|сержант|старший сержант|головний сержант|" r"штабс-сержант|майстер-сержант|старший майстер-сержант|" r"головний майстер-сержант|прапорщик|старший прапорщик|" diff --git a/rank_data.py b/rank_data.py index 238d37c..522d19f 100644 --- a/rank_data.py +++ b/rank_data.py @@ -55,13 +55,6 @@ # ======================================================================== # Найнижчі військові звання в ієрархії ЗСУ - 'рекрут': { - 'nominative': 'рекрут', # "рекрут прибув" - 'genitive': 'рекрута', # "наказ рекрута" - 'dative': 'рекруту', # "рекруту наказано" - 'instrumental': 'рекрутом', # "з рекрутом" - }, - 'рядовий': { 'nominative': 'рядовий', # "рядовий виконав" 'genitive': 'рядового', # "рапорт рядового" @@ -548,7 +541,7 @@ # --- СУХОПУТНІ ВІЙСЬКА --- ARMY_RANKS = [ - "рекрут", "рядовий", "солдат", "старший солдат", + "рядовий", "солдат", "старший солдат", "молодший сержант", "сержант", "старший сержант", "головний сержант", "штаб-сержант", "мастер-сержант", "штабс-сержант", "майстер-сержант", "старший майстер-сержант", "головний майстер-сержант", @@ -599,7 +592,6 @@ # Приклади значень після автогенерації (закоментовано): # [ -# 'рекрут', 'рекрута', 'рекруту', 'рекрутом', # 'рядовий', 'рядового', 'рядовому', 'рядовим', # 'солдат', 'солдата', 'солдату', 'солдатом', # 'старший солдат', 'старшого солдата', 'старшому солдату', 'старшим солдатом', diff --git a/unmasking/cli.py b/unmasking/cli.py index ddb7caa..5af9955 100644 --- a/unmasking/cli.py +++ b/unmasking/cli.py @@ -58,7 +58,7 @@ # ============================================================================ # МЕТАДАНІ # ============================================================================ -__version__ = "2.6.9" +__version__ = "2.6.10" def main():