reg-normalizer 1.0.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,4 @@
1
+ include README.md
2
+ include LICENSE
3
+ include requirements.txt
4
+ recursive-include reg_normalizer/data *.yaml
@@ -0,0 +1,162 @@
1
+ Metadata-Version: 2.4
2
+ Name: reg-normalizer
3
+ Version: 1.0.0
4
+ Summary: Tool for normalizing and standardizing Russian region names
5
+ Author-email: Your Name <your.email@example.com>
6
+ License: CC BY-NC-SA 4.0
7
+ Project-URL: Homepage, https://github.com/tochno-st/reg_normalizer
8
+ Project-URL: Documentation, https://github.com/tochno-st/reg_normalizer#readme
9
+ Project-URL: Repository, https://github.com/tochno-st/reg_normalizer
10
+ Project-URL: Bug Tracker, https://github.com/tochno-st/reg_normalizer/issues
11
+ Keywords: regions,normalization,russian,fuzzy-matching,data-cleaning
12
+ Classifier: Development Status :: 4 - Beta
13
+ Classifier: Intended Audience :: Developers
14
+ Classifier: Intended Audience :: Science/Research
15
+ Classifier: License :: Free for non-commercial use
16
+ Classifier: Programming Language :: Python :: 3
17
+ Classifier: Programming Language :: Python :: 3.8
18
+ Classifier: Programming Language :: Python :: 3.9
19
+ Classifier: Programming Language :: Python :: 3.10
20
+ Classifier: Programming Language :: Python :: 3.11
21
+ Classifier: Programming Language :: Python :: 3.12
22
+ Classifier: Operating System :: OS Independent
23
+ Classifier: Topic :: Software Development :: Libraries :: Python Modules
24
+ Classifier: Topic :: Text Processing :: Linguistic
25
+ Classifier: Natural Language :: Russian
26
+ Requires-Python: >=3.8
27
+ Description-Content-Type: text/markdown
28
+ Requires-Dist: pyyaml>=6.0
29
+ Requires-Dist: fuzzywuzzy>=0.18.0
30
+ Requires-Dist: python-levenshtein>=0.20.0
31
+ Requires-Dist: pandas>=1.5.0
32
+ Requires-Dist: nltk>=3.8.0
33
+ Provides-Extra: dev
34
+ Requires-Dist: ipykernel; extra == "dev"
35
+ Requires-Dist: pytest>=7.0; extra == "dev"
36
+ Requires-Dist: pytest-cov; extra == "dev"
37
+
38
+ [![License: CC BY-NC-SA 4.0](https://img.shields.io/badge/License-CC_BY—NC—SA_4.0-lightgrey.svg)](https://creativecommons.org/licenses/by-nc-sa/4.0/)
39
+
40
+
41
+ # Region Normalizer
42
+
43
+ **Region Normalizer** — инструмент для нормализации и стандартизации наименований российских регионов. Он помогает распознавать регион даже в случаях, когда в названии встречаются опечатки, латинские буквы или другие особенности написания. Инструмент сопоставляет различные формы написания с [эталонным справочником](https://github.com/tochno-st/reg_normalizer/blob/main/data/interim/regions_etalon_v2.0.yaml) и позволяет извлекать дополнительные атрибуты, такие как коды ОКАТО, ISO, английские названия и многое другое.
44
+
45
+ Разные наименования одного и того же региона — частая проблема в реальных данных, например, на портале ЕМИСС встречается до 275 различных вариантов написания регионов. Особенно многообразны варианты у Тюменской и Архангельской областей — по 8 и 7 вариантов соответственно. В состав этих регионов входят автономные округа (ХМАО, ЯНАО, НАО), и часть ведомств отмечает, что данные приведены без автономных округов, но сокращения и формулировки используются самые разные.
46
+
47
+ ## Возможности
48
+ - Поиск и нормализация региона по произвольному названию (с учетом опечаток, сокращений, аббревиатур, смешения латиницы и кириллицы)
49
+ - Пакетная обработка больших таблиц с названиями регионов
50
+ - Гибкая настройка весов алгоритмов сопоставления
51
+ - Добавление дополнительных полей из эталонного справочника (ОКАТО, ISO, английское название и др.)
52
+
53
+ ## Установка
54
+
55
+ 1. Клонируйте репозиторий:
56
+
57
+ ```bash
58
+ git clone https://github.com/tochno-st/reg_normalizer.git
59
+ cd reg_normalizer
60
+ ```
61
+
62
+ 2. Установите зависимости:
63
+
64
+ ```bash
65
+ pip install -r requirements.txt
66
+ ```
67
+
68
+ ## Быстрый старт
69
+
70
+ ### 1. Импорт и инициализация
71
+
72
+ ```python
73
+ import sys
74
+ sys.path.append('src')
75
+ from regions_validator import RegionMatcher
76
+ matcher = RegionMatcher()
77
+ ```
78
+
79
+ ### 2. Нормализация одного региона
80
+
81
+ ```python
82
+ region_name = "московск область"
83
+ match, score = matcher.find_best_match(region_name)
84
+ print(f"Input: {region_name}")
85
+ print(f"Match: {match}")
86
+ print(f"Score: {score:.2f}")
87
+ ```
88
+
89
+ ### 3. Использование с DataFrame
90
+
91
+ ```python
92
+ import pandas as pd
93
+ sample_data = pd.DataFrame({
94
+ 'region_name': [
95
+ 'московск Обл',
96
+ 'свердловск',
97
+ 'петербург',
98
+ 'Mосковская област',
99
+ 'татарстан респ.',
100
+ 'Свердлов обл',
101
+ 'aлтайский к',
102
+ 'Республика Алтай',
103
+ 'ХМао',
104
+ 'Юж федеральный округ',
105
+ 'спб',
106
+ 'рт',
107
+ 'город москва столица российской федерации город федерального значения',
108
+ 'тюменская область (кроме ханты мансийского автономного округа югры и ямало ненецкого автономного округа)'
109
+ ]
110
+ })
111
+
112
+ result_df = matcher.match_dataframe(
113
+ sample_data,
114
+ 'region_name',
115
+ weights={'levenshtein': 0.4, 'token_set': 0.6},
116
+ approach_weights={'original': 0.3, 'stemmed': 0.7},
117
+ threshold=70
118
+ )
119
+ ```
120
+
121
+ ### 4. Добавление дополнительных полей
122
+
123
+ ```python
124
+ # Добавить английские названия
125
+ result_df = matcher.attach_field(result_df, 'region_name', 'name_eng')
126
+ # Добавить коды ОКАТО
127
+ result_df = matcher.attach_field(result_df, 'region_name', 'okato')
128
+ # Добавить коды ISO
129
+ result_df = matcher.attach_field(result_df, 'region_name', 'iso_code')
130
+ print(result_df.head())
131
+ ```
132
+
133
+ ## Кастомизация
134
+
135
+ - **weights** — веса для алгоритмов сравнения ('levenshtein', 'token_set')
136
+ - **approach_weights** — веса для подходов ('original', 'stemmed')
137
+ - **threshold** — пороговое значение для принятия совпадения
138
+
139
+ Пример:
140
+ ```python
141
+ custom_weights = {'levenshtein': 0.3, 'token_set': 0.7}
142
+ custom_approach_weights = {'original': 0.2, 'stemmed': 0.8}
143
+ match, score = matcher.find_best_match(
144
+ "свердловск",
145
+ weights=custom_weights,
146
+ approach_weights=custom_approach_weights,
147
+ threshold=60
148
+ )
149
+ ```
150
+
151
+ ## Структура эталонного справочника
152
+
153
+ Файл [`data/interim/regions_etalon_v2.0.yaml`](https://github.com/tochno-st/reg_normalizer/blob/main/data/interim/regions_etalon_v2.0.yaml) содержит ключи:
154
+ - `name_rus` — официальное название региона
155
+ - `name_eng` — английское название
156
+ - `okato` — код ОКАТО
157
+ - `iso_code` — код ISO
158
+
159
+ ## Лицензия
160
+
161
+ <a rel="license" href="https://creativecommons.org/licenses/by-nc-sa/4.0/"><img alt="Creative Commons License" style="border-width:0" src="https://i.creativecommons.org/l/by-nc-sa/4.0/88x31.png" /></a><br />
162
+ Creative Commons License Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA 4.0).
@@ -0,0 +1,125 @@
1
+ [![License: CC BY-NC-SA 4.0](https://img.shields.io/badge/License-CC_BY—NC—SA_4.0-lightgrey.svg)](https://creativecommons.org/licenses/by-nc-sa/4.0/)
2
+
3
+
4
+ # Region Normalizer
5
+
6
+ **Region Normalizer** — инструмент для нормализации и стандартизации наименований российских регионов. Он помогает распознавать регион даже в случаях, когда в названии встречаются опечатки, латинские буквы или другие особенности написания. Инструмент сопоставляет различные формы написания с [эталонным справочником](https://github.com/tochno-st/reg_normalizer/blob/main/data/interim/regions_etalon_v2.0.yaml) и позволяет извлекать дополнительные атрибуты, такие как коды ОКАТО, ISO, английские названия и многое другое.
7
+
8
+ Разные наименования одного и того же региона — частая проблема в реальных данных, например, на портале ЕМИСС встречается до 275 различных вариантов написания регионов. Особенно многообразны варианты у Тюменской и Архангельской областей — по 8 и 7 вариантов соответственно. В состав этих регионов входят автономные округа (ХМАО, ЯНАО, НАО), и часть ведомств отмечает, что данные приведены без автономных округов, но сокращения и формулировки используются самые разные.
9
+
10
+ ## Возможности
11
+ - Поиск и нормализация региона по произвольному названию (с учетом опечаток, сокращений, аббревиатур, смешения латиницы и кириллицы)
12
+ - Пакетная обработка больших таблиц с названиями регионов
13
+ - Гибкая настройка весов алгоритмов сопоставления
14
+ - Добавление дополнительных полей из эталонного справочника (ОКАТО, ISO, английское название и др.)
15
+
16
+ ## Установка
17
+
18
+ 1. Клонируйте репозиторий:
19
+
20
+ ```bash
21
+ git clone https://github.com/tochno-st/reg_normalizer.git
22
+ cd reg_normalizer
23
+ ```
24
+
25
+ 2. Установите зависимости:
26
+
27
+ ```bash
28
+ pip install -r requirements.txt
29
+ ```
30
+
31
+ ## Быстрый старт
32
+
33
+ ### 1. Импорт и инициализация
34
+
35
+ ```python
36
+ import sys
37
+ sys.path.append('src')
38
+ from regions_validator import RegionMatcher
39
+ matcher = RegionMatcher()
40
+ ```
41
+
42
+ ### 2. Нормализация одного региона
43
+
44
+ ```python
45
+ region_name = "московск область"
46
+ match, score = matcher.find_best_match(region_name)
47
+ print(f"Input: {region_name}")
48
+ print(f"Match: {match}")
49
+ print(f"Score: {score:.2f}")
50
+ ```
51
+
52
+ ### 3. Использование с DataFrame
53
+
54
+ ```python
55
+ import pandas as pd
56
+ sample_data = pd.DataFrame({
57
+ 'region_name': [
58
+ 'московск Обл',
59
+ 'свердловск',
60
+ 'петербург',
61
+ 'Mосковская област',
62
+ 'татарстан респ.',
63
+ 'Свердлов обл',
64
+ 'aлтайский к',
65
+ 'Республика Алтай',
66
+ 'ХМао',
67
+ 'Юж федеральный округ',
68
+ 'спб',
69
+ 'рт',
70
+ 'город москва столица российской федерации город федерального значения',
71
+ 'тюменская область (кроме ханты мансийского автономного округа югры и ямало ненецкого автономного округа)'
72
+ ]
73
+ })
74
+
75
+ result_df = matcher.match_dataframe(
76
+ sample_data,
77
+ 'region_name',
78
+ weights={'levenshtein': 0.4, 'token_set': 0.6},
79
+ approach_weights={'original': 0.3, 'stemmed': 0.7},
80
+ threshold=70
81
+ )
82
+ ```
83
+
84
+ ### 4. Добавление дополнительных полей
85
+
86
+ ```python
87
+ # Добавить английские названия
88
+ result_df = matcher.attach_field(result_df, 'region_name', 'name_eng')
89
+ # Добавить коды ОКАТО
90
+ result_df = matcher.attach_field(result_df, 'region_name', 'okato')
91
+ # Добавить коды ISO
92
+ result_df = matcher.attach_field(result_df, 'region_name', 'iso_code')
93
+ print(result_df.head())
94
+ ```
95
+
96
+ ## Кастомизация
97
+
98
+ - **weights** — веса для алгоритмов сравнения ('levenshtein', 'token_set')
99
+ - **approach_weights** — веса для подходов ('original', 'stemmed')
100
+ - **threshold** — пороговое значение для принятия совпадения
101
+
102
+ Пример:
103
+ ```python
104
+ custom_weights = {'levenshtein': 0.3, 'token_set': 0.7}
105
+ custom_approach_weights = {'original': 0.2, 'stemmed': 0.8}
106
+ match, score = matcher.find_best_match(
107
+ "свердловск",
108
+ weights=custom_weights,
109
+ approach_weights=custom_approach_weights,
110
+ threshold=60
111
+ )
112
+ ```
113
+
114
+ ## Структура эталонного справочника
115
+
116
+ Файл [`data/interim/regions_etalon_v2.0.yaml`](https://github.com/tochno-st/reg_normalizer/blob/main/data/interim/regions_etalon_v2.0.yaml) содержит ключи:
117
+ - `name_rus` — официальное название региона
118
+ - `name_eng` — английское название
119
+ - `okato` — код ОКАТО
120
+ - `iso_code` — код ISO
121
+
122
+ ## Лицензия
123
+
124
+ <a rel="license" href="https://creativecommons.org/licenses/by-nc-sa/4.0/"><img alt="Creative Commons License" style="border-width:0" src="https://i.creativecommons.org/l/by-nc-sa/4.0/88x31.png" /></a><br />
125
+ Creative Commons License Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA 4.0).
@@ -0,0 +1,58 @@
1
+ [build-system]
2
+ requires = ["setuptools>=61.0", "wheel"]
3
+ build-backend = "setuptools.build_meta"
4
+
5
+ [project]
6
+ name = "reg-normalizer"
7
+ version = "1.0.0"
8
+ description = "Tool for normalizing and standardizing Russian region names"
9
+ readme = "README.md"
10
+ authors = [
11
+ {name = "Your Name", email = "your.email@example.com"}
12
+ ]
13
+ license = {text = "CC BY-NC-SA 4.0"}
14
+ requires-python = ">=3.8"
15
+ classifiers = [
16
+ "Development Status :: 4 - Beta",
17
+ "Intended Audience :: Developers",
18
+ "Intended Audience :: Science/Research",
19
+ "License :: Free for non-commercial use",
20
+ "Programming Language :: Python :: 3",
21
+ "Programming Language :: Python :: 3.8",
22
+ "Programming Language :: Python :: 3.9",
23
+ "Programming Language :: Python :: 3.10",
24
+ "Programming Language :: Python :: 3.11",
25
+ "Programming Language :: Python :: 3.12",
26
+ "Operating System :: OS Independent",
27
+ "Topic :: Software Development :: Libraries :: Python Modules",
28
+ "Topic :: Text Processing :: Linguistic",
29
+ "Natural Language :: Russian",
30
+ ]
31
+ keywords = ["regions", "normalization", "russian", "fuzzy-matching", "data-cleaning"]
32
+
33
+ dependencies = [
34
+ "pyyaml>=6.0",
35
+ "fuzzywuzzy>=0.18.0",
36
+ "python-levenshtein>=0.20.0",
37
+ "pandas>=1.5.0",
38
+ "nltk>=3.8.0",
39
+ ]
40
+
41
+ [project.urls]
42
+ Homepage = "https://github.com/tochno-st/reg_normalizer"
43
+ Documentation = "https://github.com/tochno-st/reg_normalizer#readme"
44
+ Repository = "https://github.com/tochno-st/reg_normalizer"
45
+ "Bug Tracker" = "https://github.com/tochno-st/reg_normalizer/issues"
46
+
47
+ [project.optional-dependencies]
48
+ dev = [
49
+ "ipykernel",
50
+ "pytest>=7.0",
51
+ "pytest-cov",
52
+ ]
53
+
54
+ [tool.setuptools]
55
+ packages = ["reg_normalizer"]
56
+
57
+ [tool.setuptools.package-data]
58
+ reg_normalizer = ["data/interim/*.yaml"]
@@ -0,0 +1,12 @@
1
+ """
2
+ Region Normalizer - Tool for normalizing and standardizing Russian region names.
3
+
4
+ This package helps recognize regions even with typos, Latin characters, or various spelling variations.
5
+ It matches different forms of region names against an etalon reference and allows extracting additional
6
+ attributes such as OKATO codes, ISO codes, English names, and more.
7
+ """
8
+
9
+ from .regions_validator import RegionMatcher
10
+
11
+ __version__ = "1.0.0"
12
+ __all__ = ["RegionMatcher"]