natasha/natasha

Solves basic Russian NLP tasks, API for lower level Natasha projects

什么是 Natasha?

Natasha 是一个 Python 库,整合了一套处理俄语文本的工具。它涵盖了完整的 NLP 处理流程:

  • 分词与断句 – 通过 Razdel 库。
  • 词向量 (Word embeddings) – 精简的预训练俄语向量 (Navec)。
  • 词法标注 – 词性和语法特征 (Slovnet)。
  • 词形还原 – 将单词转换为字典形式 (使用 pymorphy2)。
  • 句法分析 – 每个句子的依存句法树 (Slovnet)。
  • 命名实体识别 (NER) – 检测人名、地点和组织 (Slovnet)。
  • 实体归一化与解析 – 将实体提及转换为标准形式并提取名称部分。
  • 基于规则的事实提取 – 通过 Yargy (例如:日期、金额、地址)。

所有模型皆轻量化,可在 CPU 上运行,并专为生产环境打造(体积小、内存占用低、推理速度快)。


如何开始

pip install natasha   # Python 3.7+ or PyPy3

典型的处理流程如下(简化版):

from natasha import (
    Segmenter, MorphVocab, NewsEmbedding,
    NewsMorphTagger, NewsSyntaxParser, NewsNERTagger,
    NamesExtractor, Doc
)

text = "…your Russian text…"

doc = Doc(text)

# 1️⃣ 分割为 token 和句子
segmenter = Segmenter()
doc.segment(segmenter)

# 2️⃣ 词法分析
morph_tagger = NewsMorphTagger(NewsEmbedding())
doc.tag_morph(morph_tagger)

# 3️⃣ 词形还原
morph_vocab = MorphVocab()
for token in doc.tokens:
    token.lemmatize(morph_vocab)

# 4️⃣ 句法树
syntax_parser = NewsSyntaxParser(NewsEmbedding())
doc.parse_syntax(syntax_parser)

# 5️⃣ NER
ner_tagger = NewsNERTagger(NewsEmbedding())
doc.tag_ner(ner_tagger)

# 6️⃣ 归一化与解析实体
for span in doc.spans:
    span.normalize(morph_vocab)
    if span.type == 'PER':
        span.extract_fact(NamesExtractor(morph_vocab))

每个步骤都会丰富 Doc 对象的属性(tokens、sents、spans 等),您可以检查或可视化这些属性(Ipymarkup 提供优秀的 Jupyter 渲染效果)。


何时使用 Natasha

  • 仅限俄语项目 – 专为俄语新闻文本和其他领域设计。
  • 仅限 CPU 环境 – 模型轻量,无需 GPU。
  • 生产环境流程 – 强调速度、低内存占用和稳定的 API。
  • 需要全栈解决方案时 – 若您只需要部分功能,也可以选择个别的子库 (Razdel, Navec, Slovnet, Yargy)。

限制

  • 模型是在新闻数据上训练的;在差异较大的领域中,性能可能会下降。
  • 高级 API 可能会变更;若需长期稳定性,建议直接导入底层库。
  • 仅支持俄语 – 不具备多语言能力。

深入了解

  • 文档与示例 – Jupyter notebook 位于 docs.ipynb。
  • 评估细节 – 各组件的链接章节 (Razdel, Navec, Slovnet)。
  • 社区 – Telegram 聊天室、GitHub issues,以及通过作者实验室提供的商业支持。

总结

Natasha 是一个生产就绪、对 CPU 友好的 Python 工具组,整合了俄语文本的分词、词向量、词法分析、词形还原、句法分析、NER 和基于规则的事实提取。通过 pip install natasha 安装,并按照逐步示例,将原始俄语句子转换为丰富的语言标注结构。

相关

  • 项目
  • 项目
  • 项目
  • 项目