Advertisement

安装使用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
    
    
![](https://ad.itadn.com/c/weblog/blog-img/images/2025-08-19/vxgp73AGDJwij9ztTmybYq8HVhZX.png)

但是这样会遇到错误

复制代码
    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
    
    
![](https://ad.itadn.com/c/weblog/blog-img/images/2025-08-19/8MTiwNdnp47flIxC61K2eb0aAUQo.png)

此外,在我的需求中希望不同进程能够对同一份数据进行处理,并将各个语法分析的结果存储到一个字典中。

复制代码
    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
    
    
![](https://ad.itadn.com/c/weblog/blog-img/images/2025-08-19/Emp2Bu3GzqrZklRQLd4ofHXMc5yT.png)

另外两个遇到的错误

复制代码
    pool not running
    
    
    python
复制代码
    joblib.externals.loky.process_executor._RemoteTraceback:PermissionError:[WinError 5]
    
    
    python

全部评论 (0)

还没有任何评论哟~