StandfordNLP

简介

Stanford NLP是包含了53种语言预训练模型的自然语言处理工具包. 英文自然是支持的, 但目前仅支持繁体中文, 不支持简体中文, 所以应用还是有限的.

基于PyTorch, 支持多种语言的完整文本分析管道, 包含:

  • 分词tokenize

  • 词性标注pos

  • 词形归并lemma

  • 依存关系解析depparse

代码地址: Github

使用说明: StanfordNLP

使用方法

安装与模型下载

包直接使用pip进行安装:

pip install stanfordnlp

在使用之前, 需要下载对应语言已经训练好的模型. 可以在程序中通过download函数指定目录进行下载.

import stanfordnlp
stanfordnlp.download("en", "path/to/put_in/model")

如果下载不动可以直接从说明文档提供的地址进行下载:

(虽然可能还是下载很慢, 但用IDM至少可以断点续传:d)

加载模型

创建一个Pipeline管道对象, 加载所有模型, 使用的方法为:

关键的参数有:

  • processors: 这里指定整个管道包含哪些过程, 根据实际中的需求指定. 默认值为"tokenize,mwt,pos,lemma,depparse", 是一个字符串, 过程之间用逗号隔开. 上面5个过程即这个包提供的所有过程, 分别代表:

    • tokenize: 分词

    • mwt: 词合并, 意思是多个单词合在一起, 作为一个整体表意.

    • pos: 词性标注

    • lemma: 词元表示, 即词形归并. 将时态, 单复数等变形还原回词元的形式. 并不会直接代替, 而是通过结果中属性的方式进行保存.

    • depparse: 依存关系解析

  • lang: 语言. 指定处理的语言, 注意要提前下载好对应语言的模型.

  • models_dir: 模型所处的目录位置.

  • use_gpu: 是否使用GPU.

创建一个pipeline之后, 就可以使用它的__call__方法得到结果了.

结果提取

上面得到的doc就是包含所有结果的一个对象. StanfordNLP的结果是分为若干的级别的, 每个级别都有自己独特的属性, 以及连接子级结果的属性. 从高到低有:

  • Document: 调用pipeline__call__方法得到的结果就是Document. 我们提供的字符串被认为是一篇文章, 因此最高级别的结果就是文章所对应的级别.

  • Sentence: 每篇文章是有若干个句子组成的. 调用Documentsentences属性即可得到所有句子对象组成的列表.

    拿出其中一个句子. 对于句子对象, 有以下的属性:

    • words: 获取这个句子中所有单词对象的结果:

      可以看到, 是Word对象的列表, 按顺序给出了每个单词的索引, 词元, 词性等等信息. 囊括的信息范围是在初始化Pipeline对象时指定的.

    • tokens: 获取句子中的Token对象. 在StanfordNLP中, tokenword是不同的概念, 虽然在形式上, 以及对应关系上看来往往是完全相同的, 但Token对象和Word对象有着不同的属性和方法, 而且如果pipeline中选择了mwt, 会对单词合并成词组, 就可能造成两个列表中元素数量的不同.

      可以看到Token作为Word的上一级, 是可能包含多个单词的, 在Token.words属性中体现.

    • dependencies: 句子中每个单词的依赖关系, 也是以列表的形式体现的.

  • Token: 句子的下一级就是token了, 这是分词的结果, 一般来说一个token对应一个word, 但由于mwt合并的关系, 也可能包含多个word. 使用Sentence.tokens属性获取句子的token列表.

    对于某个token, 有以下的属性和方法可以使用.

    • words: 这个token包含的word列表, 通常是只有一个元素的列表.

      可以看到是元素是Word对象.

    • index: token对应的索引

      注意返回的是一个字符串格式的数字.

    • text: token对应的字符串

  • Word: 最底级的对象, 代表一个单词.

    • pos, xpos: 两个属性是等价的. treebank-specific part-of-speech

    • upos: universal part-of-speech. 与上面的属性都是表示单词的词性, 属于两套标准体系.

    • dependency_relation: 依赖关系

    • governor: 依赖于第几个word, index是从1开始的

    • lemma: 词元

    • parent_token: 单词所属的token, 返回的是一个Token对象

    • text: word对应的字符串

最后更新于

这有帮助吗?