Mac os Pycharm 中使用Stanza进行实体识别(自然语言处理nlp)

stanza 是斯坦福开源Python版nlp库,对自然语言处理有好大的提升,具体好在哪里,官网里面都有介绍,这里就不翻译了。下面放上对应的官网和仓库地址。

stanza 官网地址:点击我进入

stanza github 仓库地址:点击我进入

安装步骤

1、Pycharm 中在设置中安装 stanza 是比较慢的,因此不建议这种方法,而且也考不到进度到那里了。

2、直接在pycharm中安装也有尝试,但是很长时间都没看到成功,这里推荐使用将仓库代码克隆下来,在本地进行手动安装,最主要的是速度快。

# 为了方面查找,这里建议直接将仓库克隆到桌面最省事。
cd ~/Destop
git clone https://github.com/stanfordnlp/stanza.git
cd stanza
pip install -e .

pip 安装成功之后下面就是将安装好的内容移动到pycharm使用的Interpreter,也就是下图使用的python路径对应的site-packages中。

 找到上图对应的跟bin同一目录的lib文件,lib->python3.7->site-packages。打开这个文件夹,将之前安装好的 stanza 移过来。如果是克隆在桌面了,就到桌面去找对应的文件夹,会发现刚才克隆的stanza文件夹下多了两个文件:stanza、stanza.egg-info,将这两个文件移动到上面的 site-packages 中,这样就可以在 pycharm 中直接导入使用。以上stanza安装完成。

使用

Pycharm 中使用stanza也比较简单,直接导入使用。

import stanza
# 这一步是去下载对应的英文模型,执行一下看命令行链接出来就可以,命令行有可能不会成功,还是老方法把命令行中的地址,放到浏览器中直接下载。
stanza.download('en') 

执行之后,会出现下面的链接,链接放到浏览器后下载完成解压。

 第二个地址直接点击去下载也行,这里放上地址:英文模型下载

英文模型下载完成后,解压会看到里面有对应的文件。将文件放到下面命令执行后报错的路径下。

nlp = stanza.Pipeline('en')
doc = nlp("Barack Obama was born in Hawaii.  He was elected president in 2008.")

执行上面两句会看到报错,说在xxx路径找不到模型包,把刚才下载的模型放到这个文件夹中,这个文件一般是在用户目录下stanza_resources,比如:/Users/xxxx/stanza_resources,

该目录下有en(代表英文模型),把下载的模型放到这个目录:/Users/xxxx/stanza_resources/en/。

以上步骤完成后,就可以使用。

说下stanza进行实体识别时候好处是,直接将识别的实体封装成了json格式,识别出的实体比如:PERSON、ORG、LOCATION等,词性为“O”的并不会出现在识别结果中,这样方便多了,不需要在进行过滤到不想要的实体。具体效果如下:

import stanza
nlp = stanza.Pipeline('en')
doc = nlp("Barack Obama was born in Hawaii.  John studies at Stanford University in NewYork.")
for sentence in doc.sentences:
    print(sentence.ents)

输出如下:

[{
  "text": "Barack Obama",
  "type": "PERSON",
  "start_char": 0,
  "end_char": 12
}, {
  "text": "Hawaii",
  "type": "GPE",
  "start_char": 25,
  "end_char": 31
}, {
  "text": "John",
  "type": "PERSON",
  "start_char": 34,
  "end_char": 38
}, {
  "text": "Stanford University",
  "type": "ORG",
  "start_char": 50,
  "end_char": 69
}, {
  "text": "NewYork",
  "type": "GPE",
  "start_char": 73,
  "end_char": 80
}]

这里比stanfordcorenlp实体识别区别是:实体会进行组块分析,比如 Barack Obama识别成一个实体(PERSON)。而stanfordcorenlp则会分开识别:Barack(PERSON)、Obama(PEROSN)。

原文地址:https://www.cnblogs.com/hanwen1014/p/12750212.html