安装使用stanford corenlp以及并行加速的全教程
发布时间
阅读量:
阅读量
安装并开始使用stanford corenlp
方法一
有两种方式可供选择:一种途径是通过直接调用现成的Python wrapper访问核心功能;另一种途径则是利用Stanford NLP平台提供的Python接口来获取CoreNLP客户端工具,并下载其相关的模型参数以完成部署。获取所需的软件包及其相关的模型参数后即可通过该客户端启动核心NLP服务。
import corenlp
#tokenize pos lemma 可以选择其他的 这里就不多写了
client = corenlp.CoreNLPClient(annotators="tokenize pos lemma".split())
ann = client.annotate(sent)
python
缺点
不能并行,会出现以下错误
Cannot assign requested address
python
因为只适用于简单的测试,当数据很多,需要并行时,建议使用以下方法
方法二
直接安装(先看完后面,先别安装,这是一个排坑过程!!!! )
pip install stanfordcorenlp
python
该GitHub项目托管在Lyten等人的GitHub存储位置中。
访问以下下载页面:https://stanfordnlp.github.io/CoreNLP/index.html#download

下载之后解压缩。

下载相应语言模型并放在上面解压缩的包里。
from stanfordcorenlp import StanfordCoreNLP
nlp = StanfordCoreNLP(r'./stanford-corenlp-full-2018-10-05',lang='en')
sentence = 'Are there any parking meters on the sidewalk near the street?'
print ('Tokenize:', nlp.word_tokenize(sentence))
print ('Part of Speech:', nlp.pos_tag(sentence))
print ('Named Entities:', nlp.ner(sentence))
print ('Constituency Parsing:', nlp.parse(sentence))
print ('Dependency Parsing:', nlp.dependency_parse(sentence))
nlp.close() # Do not forget to close! The backend server will consume a lot memery.
python

但是这样会遇到错误
json.decoder.JSONDecodeError:Expecting value:line 1 column 1 (char 0)
python
其实是由于stanfordcorenlp和刚刚下载的安装包之间存在不兼容性,因此建议您使用较早版本3.9.2来避免报错。可访问以下地址获取历史所有安装包:https://stanfordnlp.github.io/CoreNLP/history.html

其余操作同上
最后就可以了
并行处理
想要处理的数据太多
nlp = StanfordCoreNLP(r'/stanford-corenlp-full-2018-10-05',lang='en')
#进度条
pbar = tqdm(total=100)
update = lambda *args: pbar.update()
def fun(a):
return a
pool_size = multiprocessing.cpu_count()-1
print(pool_size)
p = multiprocessing.Pool(pool_size)
for i in range(100):
#可以多个参数
p.apply_async(fun, (a,), callback=update)
p.close()
p.join()
python

此外,在我的需求中希望不同进程能够对同一份数据进行处理,并将各个语法分析的结果存储到一个字典中。
nlp = StanfordCoreNLP(r'/stanford-corenlp-full-2018-10-05',lang='en')
#进度条
pbar = tqdm(total=100)
update = lambda *args: pbar.update()
def fun(a, share_data_dict, share_lock):
# 获取锁
share_lock.acquire()
# share_var.append(process_name)
share_var[img_id] = source_dict
# 释放锁
share_lock.release()
return a
pool_size = multiprocessing.cpu_count()-1
print(pool_size)
p = multiprocessing.Pool(pool_size)
share_data_dict = multiprocessing.Manager().dict()
share_lock = multiprocessing.Manager().Lock()
for i in range(100):
#可以多个参数
p.apply_async(fun, (a, share_data_dict, share_lock), callback=update)
p.close()
p.join()
python

另外两个遇到的错误
pool not running
python
joblib.externals.loky.process_executor._RemoteTraceback:PermissionError:[WinError 5]
python
全部评论 (0)
还没有任何评论哟~
