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

spacy-stanfordnlp的Python项目详细描述


Spacy+Stanfordnlp

这个包包装StanfordNLP 图书馆,所以你可以用斯坦福的模型作为spaCy 管道。斯坦福模型在2017年和2018年的Conll中达到了最高的精确度 共享任务,包括标记化、词性标记、形态学 58种语言中的分析、引理化和标记依赖分析。

PyPiGitHubCode style: black

使用这个包装器,您将能够使用以下注释,由 您的预培训stanfordnlp模型:

  • 统计标记化(反映在Doc及其标记中)
  • 金属化(token.lemmatoken.lemma_
  • 词性标注(token.tagtoken.tag_token.postoken.pos_
  • 依赖分析(token.deptoken.dep_token.head
  • 句子分段(doc.sents

__安装

pip install spacy-stanfordnlp

确保同时安装 pre-trained StanfordNLP models。建议在python 3.6.8+或python3.7.2+上运行stanfordnlp。

用法和示例

可以用加载的stanfordnlp初始化StanfordNLPLanguage类 管道并返回间隔^{} object, 即,可以用来处理文本和创建 ^{} object

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_numnlp对象与任何其他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)

注意,默认情况下不会保存任何模型数据。斯坦福德国家公园 模型非常大,所以现在,这个包希望您加载它们 另外。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java我能在这个程序中更好地使用内存吗?   为什么我的Java while循环迭代了一半   java IntelliJ IDEA不在构建时复制资源   socket仅在Java TCP服务器输出上检查客户端断开连接   java游戏物理摩擦   java片段onClick调用方法   symja数学分析器中无法识别java Abs[x]   java在使用泛型时创建二进制搜索树类的实例?   java在外键约束表上的添加和删除   语法java表达式的含义,如果有条件   java创建内联对象并作为参数传递   是否有相当于Redis排序集(zset)的Java数据结构   java找不到适合的方法(无参数)   音频文件操作给定字节帧的音量Java   Eclipse4不以JavaWebStart启动   java如何使用org在JSON对象中获取嵌套的键元素。json?   java与Jackson的反序列化:“org.codehaus.Jackson.map.JsonMappingException:无法反序列化[projectname]的实例。”   字符串的Java正则表达式   spring集成上的java检测缺火指令