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