Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 15 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
2 changes: 1 addition & 1 deletion data_masking.py
Original file line number Diff line number Diff line change
Expand Up @@ -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__,
Expand Down
6 changes: 3 additions & 3 deletions docs/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -161,7 +161,7 @@ Unmask правильно відновить обидва входження

**Additional modifiers:**
```
"Солдату у відставці" → "Рекруту у відставці" (давальний зберігається!)
"Солдату у відставці" → "Рядовому у відставці" (давальний зберігається!)
"Сержанту в запасі" → "Старшому солдату в запасі" (давальний зберігається!)
"Капітану на пенсії" → "Майору на пенсії" (давальний зберігається!)
```
Expand Down Expand Up @@ -420,8 +420,8 @@ ID-паспорт 123947568, видано наказом №59/87/4249/Р від

## 📚 Supported Ranks

### Army (32 ranks)
**Enlisted:** рекрут, рядовий, солдат, старший солдат
### Army (31 ranks)
**Enlisted:** рядовий, солдат, старший солдат

**Sergeants:** молодший сержант, сержант, старший сержант, головний сержант, штаб-сержант, майстер-сержант, старший майстер-сержант, головний майстер-сержант

Expand Down
6 changes: 3 additions & 3 deletions docs/README_UK.md
Original file line number Diff line number Diff line change
Expand Up @@ -161,7 +161,7 @@ Unmask правильно відновить обидва входження

**Додаткові слова:**
```
"Солдату у відставці" → "Рекруту у відставці" (давальний зберігається!)
"Солдату у відставці" → "Рядовому у відставці" (давальний зберігається!)
"Сержанту в запасі" → "Старшому солдату в запасі" (давальний зберігається!)
"Капітану на пенсії" → "Майору на пенсії" (давальний зберігається!)
```
Expand Down Expand Up @@ -420,8 +420,8 @@ ID-паспорт 123947568, видано наказом №59/87/4249/Р від

## 📚 Підтримувані звання

### Армія (32 звання)
**Рядові:** рекрут, рядовий, солдат, старший солдат
### Армія (31 звання)
**Рядові:** рядовий, солдат, старший солдат

**Сержанти:** молодший сержант, сержант, старший сержант, головний сержант, штаб-сержант, майстер-сержант, старший майстер-сержант, головний майстер-сержант

Expand Down
4 changes: 2 additions & 2 deletions masking/constants.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@
# ============================================================================
# МЕТАДАНІ
# ============================================================================
__version__ = "2.6.9"
__version__ = "2.6.10"
__author__ = "Vladyslav V. Prodan"
__contact__ = "github.com/click0"
__phone__ = "+38(099)6053340"
Expand Down Expand Up @@ -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"
Expand Down
2 changes: 1 addition & 1 deletion modules/tools.py
Original file line number Diff line number Diff line change
Expand Up @@ -110,7 +110,7 @@
# Rank category patterns (simplified for direct-mode usage)
RANK_PATTERNS = {
"army": re.compile(
r"\b(рекрут|рядовий|солдат|старший солдат|ефрейтор|"
r"\b(рядовий|солдат|старший солдат|ефрейтор|"
r"молодший сержант|сержант|старший сержант|головний сержант|"
r"штабс-сержант|майстер-сержант|старший майстер-сержант|"
r"головний майстер-сержант|прапорщик|старший прапорщик|"
Expand Down
10 changes: 1 addition & 9 deletions rank_data.py
Original file line number Diff line number Diff line change
Expand Up @@ -55,13 +55,6 @@
# ========================================================================
# Найнижчі військові звання в ієрархії ЗСУ

'рекрут': {
'nominative': 'рекрут', # "рекрут прибув"
'genitive': 'рекрута', # "наказ рекрута"
'dative': 'рекруту', # "рекруту наказано"
'instrumental': 'рекрутом', # "з рекрутом"
},

'рядовий': {
'nominative': 'рядовий', # "рядовий виконав"
'genitive': 'рядового', # "рапорт рядового"
Expand Down Expand Up @@ -548,7 +541,7 @@

# --- СУХОПУТНІ ВІЙСЬКА ---
ARMY_RANKS = [
"рекрут", "рядовий", "солдат", "старший солдат",
"рядовий", "солдат", "старший солдат",
"молодший сержант", "сержант", "старший сержант", "головний сержант",
"штаб-сержант", "мастер-сержант", "штабс-сержант", "майстер-сержант",
"старший майстер-сержант", "головний майстер-сержант",
Expand Down Expand Up @@ -599,7 +592,6 @@

# Приклади значень після автогенерації (закоментовано):
# [
# 'рекрут', 'рекрута', 'рекруту', 'рекрутом',
# 'рядовий', 'рядового', 'рядовому', 'рядовим',
# 'солдат', 'солдата', 'солдату', 'солдатом',
# 'старший солдат', 'старшого солдата', 'старшому солдату', 'старшим солдатом',
Expand Down
2 changes: 1 addition & 1 deletion unmasking/cli.py
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@
# ============================================================================
# МЕТАДАНІ
# ============================================================================
__version__ = "2.6.9"
__version__ = "2.6.10"


def main():
Expand Down
Loading