自然语言工具包使用和对比

FOOLNLTK

安装方法

pip install foolnltk

安装完成之后可以直接使用,是这几个里面最方便的。

安装和使用教程参考:
https://www.cnblogs.com/huiyichanmian/p/10844285.html

stanford codenlp

安装比较麻烦,但是顺着下面操作也没什么问题:
0.需要java环境,并且jdk要求64位,版本1.8以上。
1.先pip

pip install stanfordcorenlp

2.再下载模型
stanford-corenlp-full-2018-10-05
下载链接:https://pan.baidu.com/s/1BWXs3gqLU6bAxSoE0K3_-g

3.然后下载中文模型stanford-chinese-corenlp-2018-10-05-models.jar
因为stanford-corenlp-full-2018-10-05默认为英文,下载完之后放在stanford-corenlp-full-2018-10-05目录里面。注意:上面给的链接已经放进去了,这一步可以不用做。

最后,使用

 ==============================================================
##################stanford codenlp############################################
 sfn_list = []
 sfn_count1 = 0
 sfn_count2 = 0
 from stanfordcorenlp import StanfordCoreNLP
 nlp = StanfordCoreNLP(r'C:\Users\Administrator\Desktop\python工程\nlt\stanford-corenlp-full-2018-10-05',lang='zh')
 sfn_result = nlp.ner(data_150)
 for line in sfn_result:
 	a = line[0]
 	sfn_list.append(a)
 	b = line[1]
 	if b!='O':
 		sfn_count1 += 1
 		list2.append(a)
 	else:
 		sfn_count2 += 1
 nlp.close	
 ================================================================

stanford codenlp使用参考网址:

LTP

哈工大的LTP使用在python3.7下好像还没法使用,如果是3.7可以构建虚拟环境来使用。
构建虚拟环境参考:
https://blog.csdn.net/anshidashen/article/details/101150218

pyltp-0.2.1-cp36-cp36m-win_amd64下载:https://pan.baidu.com/s/1v4_pIBg5ZWfeUHwldUiHCg

LTP模型下载:
https://pan.baidu.com/s/1jfFTWWKvQO631mtvJHUzEw

安装和使用LTP可以参考如下网站,很详细
https://www.cnblogs.com/huiyichanmian/p/10844285.html
实体命名使用例子:

import os
from pyltp import NamedEntityRecognizer#实体命名
from pyltp import Segmentor #分词
from pyltp import Postagger#词性标注

#加载模型
LTP_DATA_DIR = r'C:\Users\Administrator\Desktop\ltp_data_v3.4.0'   # LTP模型目录路径
ner_model_path = os.path.join(LTP_DATA_DIR, 'ner.model')  # 实体命名模型路径 模型名称为'ner.model'
cws_model_path = os.path.join(LTP_DATA_DIR, 'cws.model')  # 分词模型路径, 模型名称为'cws.model'
pos_model_path = os.path.join(LTP_DATA_DIR, 'pos.model')  # 词性标注模型路径, 模型名称为'pos.model'

#分词 和 词性标注
segmentor = Segmentor()  # 初始化实例
postagger = Postagger()   # 初始化实例
recognizer = NamedEntityRecognizer()   # 初始化实例

segmentor.load(cws_model_path)  # 加载模型
postagger.load(pos_model_path)  # 加载模型
recognizer.load(ner_model_path)  # 加载模型

words = segmentor.segment(data_150)  # 分词
postags = postagger.postag(words)   # 词性标注
''' 
命名实体识别,需要传入已经分词的words,和他们对应的词性标注 两个list,例如:
#words = ['元芳', '你', '怎么', '看']   # 分词模块的返回值
#postags = ['nh', 'r', 'r', 'v']   # 词性标注的返回值
'''
netags = recognizer.recognize(words, postags)  
 
print(netags)
print(list(netags))
 
#不释放模型 CPU达到了85%使用
recognizer.release()  # 释放模型
postagger.release()  # 释放模型
segmentor.release()  # 释放模型

NLTK

NLTK无法对中文进行操作,我测试花了很多时间,勿踩坑。

spacy

spacy还没有中文模型,坐等。想要分析中文文本的朋友就不用尝试了。

总结

在这几个自然语言工具包中,stanford codenlp更倾向于把实体切分的更加细化,(例如:(‘中国’, ‘MISC’), (‘大学’, ‘MISC’), (‘学术’, ‘MISC’), (‘演讲’, ‘MISC’) )同时也识别出更多实体。
foolnltk抽取出实体的数量居中,同时粒度相对于人工标注的差不多。(我自己看完感觉的)
Ltp是哈工大开发的一个自然语言处理工具包,抽取的实体相对较少,粒度和foolnltk差不多。 但是发现它抽出来的实体更加精确。(因为56个实体中就有46个与人为标注的一致)
很难给这三个自然语言处理工具包分个高低,不过可以根据在实际应用时选择恰当的工具包:
1.当要求粒度小或者尽可能获得实体时采用stanford codenlp;
2.当需要确定正确的实体时候采用Ltp
3.这两者折中时候使用foolnltks

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值