跳转到主要内容

直接在spaCy中使用最新的StanfordNLP研究模型

项目描述

spaCy + StanfordNLP

此软件包封装了StanfordNLP库,因此您可以将Stanford的模型作为spaCy管道使用。Stanford模型在CoNLL 2017和2018共享任务中取得了最佳准确率,该任务涉及58种语言的标记化、词性标注、形态分析、词干提取和有标签的依存句法分析。

PyPi GitHub Code style: black

使用此封装器,您将能够使用以下由您的预训练stanfordnlp模型计算出的注释

  • 统计标记化(反映在Doc及其标记上)
  • 词干提取(token.lemmatoken.lemma_
  • 词性标注(token.tagtoken.tag_token.postoken.pos_
  • 依存句法分析(token.deptoken.dep_token.head
  • 句子分割(doc.sents

安装

pip install spacy-stanfordnlp

请确保还安装了预训练的StanfordNLP模型之一。建议在Python 3.6.8+或Python 3.7.2+上运行StanfordNLP。

使用说明和示例

StanfordNLPLanguage 类可以用加载的 StanfordNLP 管道进行初始化,并返回一个 spaCy Language 对象,即您可以使用它来处理文本并创建 Doc 对象nlp 对象。

import stanfordnlp
from spacy_stanfordnlp import StanfordNLPLanguage

snlp = stanfordnlp.Pipeline(lang="en")
nlp = StanfordNLPLanguage(snlp)

doc = nlp("Barack Obama was born in Hawaii. He was elected president in 2008.")
for token in doc:
    print(token.text, token.lemma_, token.pos_, token.dep_)

如果 spaCy 中有给定语言的语料库数据,则相应的语言类将用作 nlp 对象的基类 – 例如,English()。这使得您可以使用 spaCy 的词汇属性,如 is_stoplike_numnlp 对象遵循与其他 spaCy Language 类相同的 API – 因此,您可以使用 displaCy 可视化 Doc 对象,向管道添加自定义组件,使用基于规则的匹配器,以及执行您通常在 spaCy 中执行的大部分其他操作。

# Access spaCy's lexical attributes
print([token.is_stop for token in doc])
print([token.like_num for token in doc])

# Visualize dependencies
from spacy import displacy
displacy.serve(doc)  # or displacy.render if you're in a Jupyter notebook

# Efficient processing with nlp.pipe
for doc in nlp.pipe(["Lots of texts", "Even more texts", "..."]):
    print(doc.text)

# Combine with your own custom pipeline components
def custom_component(doc):
    # Do something to the doc here
    return doc

nlp.add_pipe(custom_component)

# Serialize it to a numpy array
np_array = doc.to_array(['ORTH', 'LEMMA', 'POS'])

实验性:混合和匹配管道组件

默认情况下,nlp 对象的管道将为空,因为所有属性都一次计算并设置在自定义的 Tokenizer 中。但由于它是一个常规的 nlp 对象,您可以向管道添加自己的组件。

例如,来自 spaCy 预训练模型之一的实体识别器

import spacy
import spacy_stanfordnlp
import stanfordnlp

snlp = stanfordnlp.Pipeline(lang="en", models_dir="./models")
nlp = StanfordNLPLanguage(snlp)

# Load spaCy's pre-trained en_core_web_sm model, get the entity recognizer and
# add it to the StanfordNLP model's pipeline
spacy_model = spacy.load("en_core_web_sm")
ner = spacy_model.get_pipe("ner")
nlp.add_pipe(ner)

doc = nlp("Barack Obama was born in Hawaii. He was elected president in 2008.")
print([(ent.text, ent.label_) for ent in doc.ents])
# [('Barack Obama', 'PERSON'), ('Hawaii', 'GPE'), ('2008', 'DATE')]

您还可以添加并训练 您自己的自定义文本分类组件

高级:序列化和入口点

StanfordNLPLanguage 创建的 spaCy nlp 对象将其语言暴露为 stanfordnlp_xx

from spacy.util import get_lang_class
lang_cls = get_lang_class("stanfordnlp_en")

通常,上述操作会失败,因为 spaCy 不包括语言类 stanfordnlp_en。但由于此软件包在 setup.py 中公开了一个指向 StanfordNLPLanguagespacy_languages 入口点,spaCy 知道如何初始化它。

这意味着保存到磁盘和从磁盘加载都有效

snlp = stanfordnlp.Pipeline(lang="en")
nlp = StanfordNLPLanguage(snlp)
nlp.to_disk("./stanfordnlp-spacy-model")

spacy.load 上提供的附加参数会自动传递给语言类和管道组件。因此,当加载保存的模型时,您可以传递 snlp 参数

snlp = stanfordnlp.Pipeline(lang="en")
nlp = spacy.load("./stanfordnlp-spacy-model", snlp=snlp)

请注意,此操作默认不会保存任何模型数据。StanfordNLP 模型非常大,因此目前此软件包期望您单独加载它们。

项目详情


下载文件

下载适合您平台文件的文件。如果您不确定选择哪个,请了解有关 安装软件包 的更多信息。

源分布

spacy-stanfordnlp-0.1.3.tar.gz (7.2 kB 查看哈希值)

上传时间

构建分布

spacy_stanfordnlp-0.1.3-py3-none-any.whl (8.4 kB 查看哈希值)

上传时间 Python 3

支持者