其他分享
首页 > 其他分享> > 20210521 pkuseg分词

20210521 pkuseg分词

作者:互联网

1-1 加载安装包
import pkuseg

1-2 默认初始化模型
seg = pkuseg.pkuseg()
seg_list = seg.cut("郁惜时是创新办主任也是云计算方面的专家")
print(", ".join(seg_list))
-->
郁惜, 时, 是, 创新办, 主任, 也, 是, 云计算, 方面, 的, 专家
# pkuseg 出现的时间比较晚,直观效果上好于 jieba
1-3 不同领域模型初始化
# 下载时,报错无法链接,怎么办?
# 可以到报错提供的下载网址,直接把网址放到浏览器上,回车会自动下载
# https://github.com/lancopku/pkuseg-python/releases/download/v0.0.16/web.zip
# 下载完成后,把下载的内容放到 报错提供的路径下;并且解压,文件夹名保持一致
seg = pkuseg.pkuseg(model_name="web")
seg = pkuseg.pkuseg(model_name="medicine")
# 也可以把 web.zip 解压到指定的文件夹
seg = pkuseg.pkuseg(model_name=r"D:/workplace/medicine")
seg_list = seg.cut(("阿莫西林,又名安莫西林或安默西林,是一种最常用的半合成青霉素类广谱β-内酰胺类抗生素"))
print(", ".join(seg_list))
-->
阿莫西林, ,, 又, 名, 安莫西林, 或, 安默西林, ,, 是, 一, 种, 最, 常用, 的, 半合成, 青霉素类, 广谱β-内酰胺类, 抗生素
# pkuseg 支持自定义训练模型,可以自己寻找一批语料,用于训练
1-4 使用自定义字典
seg = pkuseg.pkuseg()   # 初始化分词器,这里是初始化的默认分词器
seg_list = seg.cut("解决解放大道路面积水")
print(", ".join(seg_list))
# -->
# 解决, 解放, 大道, 路面, 积水

# 现在想让 解放大道 作为一个词出现
user_dict = [line.strip().split(" ")[0] for line in
             open("./userdict.txt",'r',encoding='utf-8').readlines() if
             len(line.strip().split(" ")[0])!=0]
# txt 文件里面 注意用 Tab 间隔
print(user_dict)
# -->
# ['创新办', '云计算', '凯特琳', '台中', '解放大道', '郁惜时']
seg = pkuseg.pkuseg(user_dict=user_dict)
seg_list = seg.cut("解决解放大道路面积水")
print(", ".join(seg_list))
# -->
# 解决, 解放大道, 路面, 积水
# 所以,pkuseg 分词一般就 2 步,第一步 定义初始化分词器,第二步 cut 分词
1-5 进行词性标注
# 如果 posttag 为 True 就可以进行词性标注
seg = pkuseg.pkuseg(postag=True)
seg_list = seg.cut("郁惜时是创新办主任也是云计算方面的专家")
print(seg_list)
-->
[('郁惜', 'v'), ('时', 'n'), ('是', 'v'), ('创新办', 'j'), ('主任', 'n'), ('也', 'd'), ('是', 'v'), ('云计算', 'vn'), ('方面', 'n'), ('的', 'u'), ('专家', 'n')]
# 现在 每个分完的词后面会跟一个词性
1-5-1 如果 posttag 是 False
seg = pkuseg.pkuseg(postag=False)
seg_list = seg.cut("郁惜时是创新办主任也是云计算方面的专家")
print(seg_list)
-->
['郁惜', '时', '是', '创新办', '主任', '也', '是', '云计算', '方面', '的', '专家']
# 分词结果就是一个 列表
2-1
# pkuseg 的效果其实比较慢,原因是因为模型大,参数多;分词速度不如 jieba 快
# 为了解决这个问题,pkuseg 支持文档分词
# pkuseg.test(readFile, outputFile, model_name = "default", user_dict = "default", postag = False, nthread = 10)
# > readFile 输入文件洛径.
# > outputFile 输出文件路径
# > model_name 模型路径。同pkuseg.pkuseg
# > user_dict设置用户词典。同pkuseg.pkuseg
# > postag 设是否开启词性分析功能.同pkuseg.pkuseg
# > nthread 测试时开的进程数

# 设置多进程运行就可以提升速度了
if __name__ == "__main__":  # 这一句是为了全局变量考虑的,因为需要开启 进程,进程间有限制,pkuseg.test 是在 main 的模式下使用的
    pkuseg.test("./pkuseg_data/input.txt","./pkuseg_data/output.txt",nthread=5)
# 初始化 5 个进程的时间可能比较慢,但是整体时间并不慢
with open("./pkuseg_data/output.txt","r",encoding="utf-8") as f:
    for i in f.readlines():
        print(i.strip())
部分代码解释说明:
# 2-1-1 关于 __name__ 的说明:
# 参考链接:https://blog.51cto.com/u_15149862/2800977

标签:cut,name,pkuseg,20210521,list,seg,print,分词
来源: https://blog.51cto.com/u_15149862/2800990