直接在spaCy中使用最新的StanfordNLP研究模型
项目描述
spaCy + StanfordNLP
此软件包封装了StanfordNLP库,因此您可以将Stanford的模型作为spaCy管道使用。Stanford模型在CoNLL 2017和2018共享任务中取得了最佳准确率,该任务涉及58种语言的标记化、词性标注、形态分析、词干提取和有标签的依存句法分析。
使用此封装器,您将能够使用以下由您的预训练stanfordnlp
模型计算出的注释
- 统计标记化(反映在
Doc
及其标记上) - 词干提取(
token.lemma
和token.lemma_
) - 词性标注(
token.tag
、token.tag_
、token.pos
、token.pos_
) - 依存句法分析(
token.dep
、token.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_stop
或 like_num
。nlp
对象遵循与其他 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
中公开了一个指向 StanfordNLPLanguage
的 spacy_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 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 99d770be8203463f8d506cd5a1a7c6826d55446257abc868771ab12dcfb2c4bd |
|
MD5 | 70c65c99edd3327a3ed6c69011fb0862 |
|
BLAKE2b-256 | 90abeb0f658fc9974c70e104b4d81b5b287b468700160824b91795bc25be70fe |
spacy_stanfordnlp-0.1.3-py3-none-any.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 4335f7df96dc13a4df871fa7a344d6501f3ff1e78511f34b93a4226725f02db7 |
|
MD5 | 7dbda82f8228a98353b41639e6cb715d |
|
BLAKE2b-256 | ccb914959d1df871432446089a46f1bee4f35f23e02355f47ed530b5c9c5b52f |