在Spacy中直接使用最新的StanfordNLP研究模型
spacy-stanfordnlp的Python项目详细描述
Spacy+Stanfordnlp
这个包包装StanfordNLP 图书馆,所以你可以用斯坦福的模型作为spaCy 管道。斯坦福模型在2017年和2018年的Conll中达到了最高的精确度 共享任务,包括标记化、词性标记、形态学 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
确保同时安装 pre-trained StanfordNLP models。建议在python 3.6.8+或python3.7.2+上运行stanfordnlp。
用法和示例
可以用加载的stanfordnlp初始化StanfordNLPLanguage
类
管道并返回间隔^{
importstanfordnlpfromspacy_stanfordnlpimportStanfordNLPLanguagesnlp=stanfordnlp.Pipeline(lang="en")nlp=StanfordNLPLanguage(snlp)doc=nlp("Barack Obama was born in Hawaii. He was elected president in 2008.")fortokenindoc:print(token.text,token.lemma_,token.pos_,token.dep_)
如果给定语言的语言数据在SPAcy中可用,则
语言类将用作nlp
对象的基-例如,
English()
。这允许使用SPACY的词汇属性,如^ {< CD19> }或
like_num
。nlp
对象与任何其他SPAcy遵循相同的API Language
类-这样您就可以不愉快地可视化对象,添加自定义
组件到管道,使用基于规则的匹配器
你平时做的任何事。
# Access spaCy's lexical attributesprint([token.is_stopfortokenindoc])print([token.like_numfortokenindoc])# Visualize dependenciesfromspacyimportdisplacydisplacy.serve(doc)# or displacy.render if you're in a Jupyter notebook# Efficient processing with nlp.pipefordocinnlp.pipe(["Lots of texts","Even more texts","..."]):print(doc.text)# Combine with your own custom pipeline componentsdefcustom_component(doc):# Do something to the doc herereturndocnlp.add_pipe(custom_component)# Serialize it to a numpy arraynp_array=doc.to_array(['ORTH','LEMMA','POS'])< H3>实验:管道组件的混合匹配< EH3>
默认情况下,nlp
对象的管道将为空,因为所有属性
计算一次并在自定义中设置
^{nlp
对象,可以将自己的组件添加到管道中。
例如,spacy的一个预训练模型中的实体识别器:
importspacyimportspacy_stanfordnlpimportstanfordnlpsnlp=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 pipelinespacy_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_)forentindoc.ents])# [('Barack Obama', 'PERSON'), ('Hawaii', 'GPE'), ('2008', 'DATE')]
你也可以添加和训练 your own custom text classification component。
高级:序列化和入口点
由StanfordNLPLanguage
创建的spacynlp
对象将其语言公开为
stanfordnlp_xx
。
fromspacy.utilimportget_lang_classlang_cls=get_lang_class("stanfordnlp_en")
正常情况下,上述操作会失败,因为spacy不包含语言类
stanfordnlp_en
。但是因为这个包公开了一个spacy_languages
条目
指向其^{StanfordNLPLanguage
的空格
知道如何初始化它。
这意味着保存到磁盘和从磁盘加载可以工作:
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)
注意,默认情况下不会保存任何模型数据。斯坦福德国家公园 模型非常大,所以现在,这个包希望您加载它们 另外。