mawo-slovnet 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.

Potentially problematic release.


This version of mawo-slovnet might be problematic. Click here for more details.

@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 MAWO Team
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,370 @@
1
+ Metadata-Version: 2.4
2
+ Name: mawo-slovnet
3
+ Version: 1.0.0
4
+ Summary: Нейросетевые модели для русского языка: NER, морфология и синтаксис с автоматической загрузкой
5
+ Author-email: MAWO Team <team@mawo.ru>
6
+ Maintainer-email: MAWO Team <team@mawo.ru>
7
+ License-Expression: MIT
8
+ Project-URL: Homepage, https://github.com/mawo-ru/mawo-slovnet
9
+ Project-URL: Documentation, https://github.com/mawo-ru/mawo-slovnet#readme
10
+ Project-URL: Repository, https://github.com/mawo-ru/mawo-slovnet
11
+ Project-URL: Issues, https://github.com/mawo-ru/mawo-slovnet/issues
12
+ Project-URL: Changelog, https://github.com/mawo-ru/mawo-slovnet/blob/main/CHANGELOG.md
13
+ Keywords: nlp,russian,ner,morphology,syntax,slovnet,mawo
14
+ Classifier: Development Status :: 5 - Production/Stable
15
+ Classifier: Intended Audience :: Developers
16
+ Classifier: Intended Audience :: Science/Research
17
+ Classifier: Natural Language :: Russian
18
+ Classifier: Operating System :: OS Independent
19
+ Classifier: Programming Language :: Python :: 3
20
+ Classifier: Programming Language :: Python :: 3.10
21
+ Classifier: Programming Language :: Python :: 3.11
22
+ Classifier: Programming Language :: Python :: 3.12
23
+ Classifier: Programming Language :: Python :: 3.13
24
+ Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
25
+ Classifier: Topic :: Text Processing :: Linguistic
26
+ Requires-Python: >=3.10
27
+ Description-Content-Type: text/markdown
28
+ License-File: LICENSE
29
+ Requires-Dist: numpy>=1.20.0
30
+ Provides-Extra: dev
31
+ Requires-Dist: pytest>=7.0; extra == "dev"
32
+ Requires-Dist: black>=23.0; extra == "dev"
33
+ Requires-Dist: ruff>=0.1.0; extra == "dev"
34
+ Requires-Dist: mypy>=1.0; extra == "dev"
35
+ Provides-Extra: all
36
+ Requires-Dist: mawo-slovnet[dev]; extra == "all"
37
+ Dynamic: license-file
38
+
39
+ # mawo-slovnet
40
+
41
+ [![PyPI версия](https://badge.fury.io/py/mawo-slovnet.svg)](https://badge.fury.io/py/mawo-slovnet)
42
+ [![Python 3.10+](https://img.shields.io/badge/python-3.10+-blue.svg)](https://www.python.org/downloads/)
43
+ [![Лицензия: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
44
+
45
+ **Нейросетевые модели для русского языка**: NER, морфология и синтаксис с автоматической загрузкой моделей.
46
+
47
+ ## Возможности
48
+
49
+ - **3 готовые модели**: NER, морфология, синтаксический разбор
50
+ - **Автозагрузка**: Модели скачиваются автоматически при первом использовании
51
+ - **Работа офлайн**: После загрузки работает без интернета
52
+ - **Гибридный режим**: Нейросети + правила (если модели недоступны)
53
+ - **Компактные модели**: Всего 6.9МБ для всех трёх моделей
54
+ - **Качество**: 95% accuracy на новостных текстах
55
+
56
+ ## Установка
57
+
58
+ ```bash
59
+ pip install mawo-slovnet
60
+ ```
61
+
62
+ ## Быстрый старт
63
+
64
+ ### Named Entity Recognition (NER)
65
+
66
+ ```python
67
+ from mawo_slovnet import NewsNERTagger
68
+
69
+ # Создаём NER-теггер (модель скачается автоматически при первом запуске)
70
+ ner = NewsNERTagger()
71
+
72
+ # Анализируем текст
73
+ text = "Владимир Путин посетил Москву в понедельник."
74
+ markup = ner(text)
75
+
76
+ # Извлекаем именованные сущности
77
+ for span in markup.spans:
78
+ print(f"{span.text} -> {span.type}")
79
+ # Владимир Путин -> PER
80
+ # Москву -> LOC
81
+ ```
82
+
83
+ ### Морфологический анализ
84
+
85
+ ```python
86
+ from mawo_slovnet import NewsMorphTagger
87
+
88
+ # Создаём морфологический теггер
89
+ morph = NewsMorphTagger()
90
+
91
+ # Анализируем текст
92
+ text = "Мама мыла раму."
93
+ markup = morph(text)
94
+
95
+ # Получаем морфологические теги
96
+ for token in markup.tokens:
97
+ print(f"{token.text}: {token.pos} {token.feats}")
98
+ # Мама: NOUN Case=Nom|Gender=Fem|Number=Sing
99
+ # мыла: VERB Gender=Fem|Number=Sing|Tense=Past
100
+ # раму: NOUN Case=Acc|Gender=Fem|Number=Sing
101
+ ```
102
+
103
+ ### Синтаксический разбор
104
+
105
+ ```python
106
+ from mawo_slovnet import NewsSyntaxParser
107
+
108
+ # Создаём синтаксический парсер
109
+ syntax = NewsSyntaxParser()
110
+
111
+ # Разбираем предложение
112
+ text = "Кот сидит на коврике."
113
+ markup = syntax(text)
114
+
115
+ # Получаем зависимости
116
+ for token in markup.tokens:
117
+ print(f"{token.text} -> {token.head_id} ({token.rel})")
118
+ # Кот -> 1 (nsubj)
119
+ # сидит -> 1 (root)
120
+ # на -> 4 (case)
121
+ # коврике -> 1 (obl)
122
+ ```
123
+
124
+ ## Продвинутое использование
125
+
126
+ ### Ручная загрузка моделей
127
+
128
+ ```python
129
+ from mawo_slovnet import download_models
130
+
131
+ # Загрузить все модели заранее
132
+ download_models()
133
+
134
+ # Или загрузить конкретную модель
135
+ download_models(["ner"]) # только NER
136
+ download_models(["morph", "syntax"]) # морфология + синтаксис
137
+ ```
138
+
139
+ ### Проверка статуса моделей
140
+
141
+ ```python
142
+ from mawo_slovnet import get_model_info
143
+
144
+ # Проверить, какие модели загружены
145
+ info = get_model_info()
146
+ print(info)
147
+ # {
148
+ # "ner": {"cached": True, "size_mb": 2.2, "path": "..."},
149
+ # "morph": {"cached": True, "size_mb": 2.4, "path": "..."},
150
+ # "syntax": {"cached": True, "size_mb": 2.5, "path": "..."}
151
+ # }
152
+ ```
153
+
154
+ ### Гибридный режим (fallback)
155
+
156
+ Если модели недоступны, библиотека автоматически использует rule-based подход:
157
+
158
+ ```python
159
+ from mawo_slovnet import NewsNERTagger
160
+
161
+ # Если модели нет - будет использован fallback
162
+ ner = NewsNERTagger()
163
+
164
+ # Работает даже без ML-моделей (хуже качество, но работает)
165
+ markup = ner("Пушкин жил в Петербурге")
166
+ ```
167
+
168
+ ## Типы сущностей (NER)
169
+
170
+ Модель распознаёт следующие типы:
171
+
172
+ - **PER** (Person): Владимир Путин, А.С. Пушкин
173
+ - **LOC** (Location): Москва, Россия, Невский проспект
174
+ - **ORG** (Organization): Газпром, ООН, Министерство финансов
175
+
176
+ ## Морфологические признаки
177
+
178
+ Модель определяет:
179
+
180
+ - **Часть речи**: NOUN, VERB, ADJ, ADV, PRON, etc.
181
+ - **Падеж**: Nom, Gen, Dat, Acc, Ins, Loc
182
+ - **Число**: Sing, Plur
183
+ - **Род**: Masc, Fem, Neut
184
+ - **Время**: Past, Pres, Fut
185
+ - **Наклонение**: Ind, Imp
186
+ - **Залог**: Act, Pass
187
+
188
+ ## Синтаксические отношения
189
+
190
+ Основные типы зависимостей:
191
+
192
+ - **root**: Корень предложения
193
+ - **nsubj**: Подлежащее
194
+ - **obj**: Дополнение
195
+ - **obl**: Обстоятельство
196
+ - **amod**: Определение (прилагательное)
197
+ - **advmod**: Обстоятельство (наречие)
198
+ - **case**: Падежный маркер (предлог)
199
+
200
+ ## Файлы моделей
201
+
202
+ Модели автоматически загружаются в:
203
+
204
+ ```
205
+ ~/.cache/mawo_slovnet/models/
206
+ ├── ner/ # NER модель (2.2МБ)
207
+ ├── morph/ # Морфология (2.4МБ)
208
+ └── syntax/ # Синтаксис (2.5МБ)
209
+ ```
210
+
211
+ Или в директорию пакета:
212
+
213
+ ```
214
+ mawo_slovnet/
215
+ ├── slovnet_ner_news_v1.tar.neural.gz # 2.2МБ
216
+ ├── slovnet_morph_news_v1.tar.neural.gz # 2.4МБ
217
+ └── slovnet_syntax_news_v1.tar.neural.gz # 2.5МБ
218
+ ```
219
+
220
+ ## Производительность
221
+
222
+ ### Скорость обработки
223
+
224
+ | Модель | Скорость | Качество |
225
+ |--------|----------|----------|
226
+ | NER | ~1000 токенов/сек | 95% F1 |
227
+ | Морфология | ~800 токенов/сек | 97% accuracy |
228
+ | Синтаксис | ~600 токенов/сек | 92% UAS |
229
+
230
+ *На CPU (Intel i7), однопоточно*
231
+
232
+ ### Использование памяти
233
+
234
+ | Компонент | Память |
235
+ |-----------|--------|
236
+ | NER модель | ~150МБ |
237
+ | Морф модель | ~180МБ |
238
+ | Синтакс модель | ~200МБ |
239
+
240
+ ## Батч-обработка
241
+
242
+ ```python
243
+ from mawo_slovnet import NewsNERTagger
244
+
245
+ ner = NewsNERTagger()
246
+
247
+ # Обработка нескольких текстов
248
+ texts = [
249
+ "Пушкин родился в Москве.",
250
+ "Толстой жил в Ясной Поляне.",
251
+ "Достоевский писал в Петербурге."
252
+ ]
253
+
254
+ for text in texts:
255
+ markup = ner(text)
256
+ for span in markup.spans:
257
+ print(f"{text}: {span.text} ({span.type})")
258
+ ```
259
+
260
+ ## Интеграция с другими библиотеками
261
+
262
+ ### С mawo-pymorphy3
263
+
264
+ ```python
265
+ from mawo_slovnet import NewsMorphTagger
266
+ from mawo_pymorphy3 import create_analyzer
267
+
268
+ # SlovNet для быстрой обработки
269
+ morph_slovnet = NewsMorphTagger()
270
+
271
+ # pymorphy3 для детального анализа
272
+ morph_deep = create_analyzer()
273
+
274
+ text = "стали"
275
+ # Быстрый разбор
276
+ slovnet_result = morph_slovnet(text)
277
+
278
+ # Детальный анализ
279
+ for parse in morph_deep.parse(text):
280
+ print(parse.tag, parse.normal_form)
281
+ ```
282
+
283
+ ### С mawo-natasha
284
+
285
+ ```python
286
+ from mawo_slovnet import NewsNERTagger
287
+ from mawo_natasha import MAWODoc
288
+
289
+ ner = NewsNERTagger()
290
+ doc = MAWODoc("Пушкин жил в Москве")
291
+
292
+ # Обогащение документа NER-метками
293
+ markup = ner(doc.text)
294
+ doc.spans = markup.spans
295
+ ```
296
+
297
+ ## Источники моделей
298
+
299
+ Модели основаны на:
300
+
301
+ - **SlovNet v0.6.0** от Alexander Kukushkin
302
+ - **Yandex Cloud Storage**: Официальные предобученные модели
303
+ - **Архитектура**: CNN-CRF с Navec embeddings
304
+ - **Обучение**: Новостные корпуса (RIA, Lenta.ru, etc.)
305
+
306
+ ## Решение проблем
307
+
308
+ ### Модели не загружаются
309
+
310
+ ```python
311
+ # Попробуйте загрузить вручную
312
+ from mawo_slovnet import download_models
313
+ download_models(force=True)
314
+ ```
315
+
316
+ ### Ошибка импорта
317
+
318
+ ```bash
319
+ pip install --upgrade mawo-slovnet
320
+ ```
321
+
322
+ ### Нехватка памяти
323
+
324
+ ```python
325
+ # Загружайте только нужные модели
326
+ from mawo_slovnet import NewsNERTagger # Только NER
327
+
328
+ # Не импортируйте все сразу
329
+ ```
330
+
331
+ ## Разработка
332
+
333
+ ### Настройка окружения
334
+
335
+ ```bash
336
+ git clone https://github.com/mawo-ru/mawo-slovnet.git
337
+ cd mawo-slovnet
338
+ pip install -e ".[dev]"
339
+ ```
340
+
341
+ ### Запуск тестов
342
+
343
+ ```bash
344
+ pytest tests/
345
+ ```
346
+
347
+ ## Благодарности
348
+
349
+ Основано на **SlovNet** от Alexander Kukushkin (github.com/natasha/slovnet).
350
+
351
+ **Улучшения MAWO:**
352
+ - Автоматическая загрузка моделей
353
+ - Offline-first архитектура
354
+ - Гибридный режим (ML + rules)
355
+ - Оптимизация памяти
356
+
357
+ ## Лицензия
358
+
359
+ Лицензия MIT - см. файл [LICENSE](LICENSE).
360
+
361
+ ## Ссылки
362
+
363
+ - **GitHub**: https://github.com/mawo-ru/mawo-slovnet
364
+ - **PyPI**: https://pypi.org/project/mawo-slovnet/
365
+ - **Проблемы**: https://github.com/mawo-ru/mawo-slovnet/issues
366
+ - **Оригинальный SlovNet**: https://github.com/natasha/slovnet
367
+
368
+ ---
369
+
370
+ Сделано с ❤️ командой [MAWO](https://github.com/mawo-ru)