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.
- mawo_slovnet-1.0.5/LICENSE +30 -0
- mawo_slovnet-1.0.5/PKG-INFO +387 -0
- mawo_slovnet-1.0.5/README.md +348 -0
- mawo_slovnet-1.0.5/mawo_slovnet/__init__.py +526 -0
- mawo_slovnet-1.0.5/mawo_slovnet/model_downloader.py +344 -0
- mawo_slovnet-1.0.5/mawo_slovnet/slovnet_morph_news_v1.tar.neural.gz +0 -0
- mawo_slovnet-1.0.5/mawo_slovnet/slovnet_ner_news_v1.tar.neural.gz +0 -0
- mawo_slovnet-1.0.5/mawo_slovnet/slovnet_syntax_news_v1.tar.neural.gz +0 -0
- mawo_slovnet-1.0.5/mawo_slovnet.egg-info/PKG-INFO +387 -0
- mawo_slovnet-1.0.5/mawo_slovnet.egg-info/SOURCES.txt +18 -0
- mawo_slovnet-1.0.5/mawo_slovnet.egg-info/dependency_links.txt +1 -0
- mawo_slovnet-1.0.5/mawo_slovnet.egg-info/requires.txt +10 -0
- mawo_slovnet-1.0.5/mawo_slovnet.egg-info/top_level.txt +1 -0
- mawo_slovnet-1.0.5/pyproject.toml +88 -0
- mawo_slovnet-1.0.5/setup.cfg +4 -0
- mawo_slovnet-1.0.5/tests/test_api.py +123 -0
- mawo_slovnet-1.0.5/tests/test_api_mawo.py +153 -0
- mawo_slovnet-1.0.5/tests/test_bio.py +117 -0
- mawo_slovnet-1.0.5/tests/test_integration.py +347 -0
- mawo_slovnet-1.0.5/tests/test_shape.py +51 -0
|
@@ -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
|
+
[](https://badge.fury.io/py/mawo-slovnet)
|
|
43
|
+
[](https://www.python.org/downloads/)
|
|
44
|
+
[](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)
|