一.几种分词方式参考文档:
1.百度api:https://cloud.baidu.com/doc/NLP/NLP-API/12.5C.E7.AE.80.E4.BB.8B.html
这里需要说明一点:调用api的时候需要拿到acess_token(而acess_token的获得需要通过申请的api key 和 secret key发送http请求获得);我这里是通过官网介绍的方式之一bash来获取acess_token:
#!/bin/bash
curl -i -k 'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=iAMeqDyTdC4gkHwFzjVle***&client_secret=0LSMArEnd1rmNTb3RF7U22sOGK4sU***'
(上述代码最后三位我脱敏了)
2.pyltp:https://pyltp.readthedocs.io/zh_CN/develop/api.html
3.jieba:https://github.com/fxsjy/jieba
二.放入代码
# -*- coding: UTF-8 -*-
import re
import os
import jieba
from pyltp import Segmentor
import requests
import json
sentence='2016年2月14日,徐荣霞与常代峰向东台市人民法院诉讼离婚,后经东台法院判决双方离婚,婚生子常凯随常代峰生活,徐荣霞自2016年2月起每月给付抚养费300元至婚生子独立生活时止,该款分别于每年的6月30日前和12月30日前给付。因徐荣霞未按判决履行,常凯向东台法院申请强制执行。'
# 采用哈工大pyltp python包
abs_path = "/Users/hqh/nlp/3.4.0/ltp_data_v3.4.0"
cws_path = os.path.join(abs_path, 'cws.model')
seg = Segmentor() # 生成对象
seg.load(cws_path) # 加载分词语料库
pyltp_list=list(seg.segment(sentence))
print(",".join(pyltp_list))
# 采用jieba分词
jieba_list=list(jieba.cut(sentence,cut_all=False)) # 采用精确模式进行匹配
print(",".join(jieba_list))
# 百度开放api
url='https://aip.baidubce.com/rpc/2.0/nlp/v1/lexer?access_token=这里填入获取到的acess_token的具体值'
headers={"Content-Type":"application/.json"}
data={
"text":sentence
}
data=json.dumps(data).encode('GBK')
request_res=requests.request('post',url,headers=headers,data=data)
content=request_res.text
content=json.loads(content)
bd_list=[]
for ele in content['items']:
bd_list.append(ele['item'])
print(",".join(bd_list))
三.分词结果与分析
1.pyltp:
2016年,2月,14日,,,徐荣霞,与,常,代峰,向,东台市,人民法院,诉讼,离婚,,,后,经,东台,法院,判决,双方,离婚,,,婚生子常凯,随,常,代峰,生活,,,徐荣霞,自,2016年,2月,起,每月,给,付,抚养费,300,元,至,婚生子,独立,生活,时,止,,,该款,分别,于,每年,的,6月,30日,前,和,12月,30日,前,给,付,。,因,徐荣霞,未,按,判决,履行,,,常凯,向,东台,法院,申请,强制,执行,。
2.jieba:
2016,年,2,月,14,日,,,徐荣霞,与,常代峰,向,东台市,人民法院,诉讼,离婚,,,后经,东台,法院,判决,双方,离婚,,,婚生子,常凯,随常,代峰,生活,,,徐荣霞,自,2016,年,2,月,起,每月,给付,抚养费,300,元至,婚生子,独立,生活,时止,,,该款,分别,于,每年,的,6,月,30,日前,和,12,月,30,日前,给付,。,因,徐荣霞,未,按,判决,履行,,,常凯,向东,台,法院,申请,强制执行,。
3.百度api:
2016年2月14日,,,徐荣霞,与,常代峰,向,东台市人民法院,诉讼离婚,,,后,经,东台法院,判决,双方,离婚,,,婚生子,常凯,随,常代峰,生活,,,徐荣霞,自,2016年2月起,每月,给付,抚养费,300元,至,婚生子,独立生活,时,止,,,该,款,分别,于,每年,的,6月30日前,和,12月30日前,给付,。,因,徐荣霞,未,按,判决,履行,,,常凯,向,东台法院,申请,强制,执行,。
4.比较:
a.去重后的分词长度比较:
类别 | 去重后词语列表长度 |
pyltp | 76 |
jieba | 76 |
百度api | 60 |
百度api的分词结果更加简洁;实际上简洁的原则,在分词中经常出现,传统的基于字典的分词如双向匹配,会遵循分词个数少的原则;
b.时间、地点、人名、金额的区分度
类别 | 时间 | 地点 | 人名 | 金额 |
pyltp | 一般 | 不予置评 | 一般(常代峰未识别出) | 一般 |
jieba | 差(拆分过细) | 不予置评 | 好 | 一般 |
百度api | 好 | 不予置评 | 好 | 好(没有与元拆分,可以很好体现金额) |