【python】结巴分词、PKUSeg分词之间的区别问题及词性标注

【python】结巴分词与PKUSeg分词之间的区别

前言

         测试文本:现代汉语字典

一、测试文本内容样式

在这里插入图片描述

二、 分词

2.1 jieba分词

2.1.1 源码
"""
 author:jjk
 datetime:2019/3/13
 coding:utf-8
 project name:Pycharm_workstation
 Program function:
 
"""
# 编码:utf-8
# 精确模式,试图将句子最精确地切开,适合文本分析

import jieba # 导入结巴分词库
import sys

# jieba.cut 方法接受三个输入参数: 需要分词的字符串;
# cut_all 参数用来控制是否采用全模式
# HMM 参数用来控制是否使用 HMM 模型

# 文件位置
# file = 'ceshi.txt'

#if __name__ == '__main__':
param = sys.argv # 获取控制台参数
if len(param) == 2:
    with open(sys.argv[1], 'r', encoding='utf-8') as fp:
        for line in fp.readlines():  # 全部加载
            word = jieba.cut(line, cut_all=False)  # 精确模式
            print('/ '.join(word))  # 打印输出
            # print(word)
else:
    print('参数输入不合规范')
    sys.exit()

2.1.2 结果

在这里插入图片描述

2.2 PKUSeg分词

2.2.1 源码
"""
 author:jjk
 datetime:2019/3/18
 coding:utf-8
 project name:Pycharm_workstation
 Program function:
 
"""

# !usr/bin/env python
# encoding:utf-8


'''

功能: 基于北大开源的分词工具 pkuseg 进行分词实践 https://github.com/yishuihanhan/pkuseg-python
参数说明
pkuseg.pkuseg(model_name='msra', user_dict='safe_lexicon')
model_name      模型路径。默认是'msra'表示我们预训练好的模型(仅对pip下载的用户)。用户可以填自己下载或训练的模型所在的路径如model_name='./models'。
user_dict       设置用户词典。默认为'safe_lexicon'表示我们提供的一个中文词典(仅pip)。用户可以传入一个包含若干自定义单词的迭代器。
pkuseg.test(readFile, outputFile, model_name='msra', user_dict='safe_lexicon', nthread=10)
readFile        输入文件路径
outputFile      输出文件路径
model_name      同pkuseg.pkuseg
user_dict       同pkuseg.pkuseg
nthread         测试时开的进程数
pkuseg.train(trainFile, testFile, savedir, nthread=10)
trainFile       训练文件路径
testFile        测试文件路径
savedir         训练模型的保存路径
nthread         训练时开的进程数
'''

import pkuseg
import sys


def testFunc():
    '''
    分词
    '''

    seg = pkuseg.pkuseg(model_name='ctb8')  # 假设用户已经下载好了ctb8的模型并放在了'./ctb8'目录下,通过设置model_name加载该模型
    with open(sys.argv[1],'r', encoding='utf-8') as fp:
        for line in fp.readlines(): # 全部加载
            words = seg.cut(line)
            print('/ '.join(words))
            #print(words)
            #print('=' * 60)


if __name__ == '__main__':
    param = sys.argv # 获取参数的个数
    if len(param) == 2:
        testFunc()
    else:
        print('参数输入不合规范')
        sys.exit()
2.2.2 结果

在这里插入图片描述

三、词性标注

3.1 结巴词性标注

3.1.1 源码
#!/usr/bin/env python
# -*- encoding: utf-8 -*-
'''
@File    :   ceshi.py
@Time    :   2019/03/22 14:33:05
@Author  :   jjk 
@Version :   1.0
@Contact :   None
@License :   (C)Copyright 2019-2020, Liugroup-NLPR-CASIA
@Desc    :   None
'''

# here put the import lib


import jieba
import pkuseg
import jieba.posseg as pseg


# line = "我爱北京天安门"
# pseglist = pseg.cut(line)
# for j in pseglist:
#     #也可以直接print出来看
#     #wordtmp = j.word
#     # flagtmp = j.flag
#     print('%s,%s' % (j.word,j.flag))


# 正文
def jiebaCiXingBiaoZhu():

    fp = open('ceshi.txt', 'r', encoding='utf-8')  # 打开文件
    for line in fp.readlines(): # 读取全文本
        line = line.strip('\n')
        # print(line)
        words = pseg.cut(line)
        for j in words:
            print('%s,%s' % (j.word, j.flag))

    fp.close()


if __name__ == '__main__':
    jiebaCiXingBiaoZhu()

3.1.2 结果

在这里插入图片描述

3.2 hanlp词性标注

3.2.1 源码
"""
 author:jjk
 datetime:2019/3/19
 coding:utf-8
 project name:Pycharm_workstation
 Program function: 词性标注

"""

import jpype
from jpype import *
from pyhanlp import *
import jieba.posseg as pseg
import pkuseg

def testFunc():
    '''
    分词
    '''
    # CRF 词法分析器
    CRFLexicalAnalyzer = JClass("com.hankcs.hanlp.model.crf.CRFLexicalAnalyzer")
    analyzer = CRFLexicalAnalyzer()

    seg = pkuseg.pkuseg(model_name='ctb8')  # 假设用户已经下载好了ctb8的模型并放在了'./ctb8'目录下,通过设置model_name加载该模型
    with open(sys.argv[1], 'r', encoding='utf-8') as fp:
        for line in fp.readlines():  # 全部加载
            words = seg.cut(line)
            # print('/ '.join(words))
            # print(words)
            # print('=' * 60)
            for sentence in words:
                print(analyzer.analyze(sentence))

if __name__ == '__main__':
    param = sys.argv  # 获取参数的个数
    if len(param) == 2:
        testFunc()
    else:
        print('参数输入不合规范')
        sys.exit()
3.2.2 结果

在这里插入图片描述

四、说明

4.1 pkuseg模型下载

        http://www.dataguru.cn/article-14485-1.html

结巴分词早期版本。 * 结巴分词(java版) jieba-analysis 首先感谢jieba分词原作者[[https://github.com/fxsjy][fxsjy]],没有他的无私贡献,我们也不会结识到结巴 分词,更不会有现在的java版本。 结巴分词的原始版本为python编写,目前该项目在github上的关注量为170, 打星727次(最新的数据以原仓库为准),Fork238次,可以说已经有一定的用户群。 结巴分词(java版)只保留的原项目针对搜索引擎分词的功能(cut_for_index、cut_for_search),词性标注,关键词提取没有实现(今后如用到,可以考虑实现)。 * 简介 ** 支持分词模式 - Search模式,用于对用户查询词分词 - Index模式,用于对索引文档分词 ** 特性 - 支持多种分词模式 - 全角统一转成半角 - 用户词典功能 - conf 目录有整理的搜狗细胞词库 - 支持词性标注(感谢 [[https://github.com/linkerlin][@linkerlin]] 的贡献) * 如何获取 - 当前稳定版本 #+BEGIN_SRC xml com.huaban jieba-analysis 0.0.2 #+END_SRC - 当前快照版本 - 支持词性标注 [[https://github.com/huaban/jieba-analysis/pull/4][#4]] - 修复以'-'连接词分词错误问题 [[https://github.com/huaban/jieba-analysis/issues/3][#3]] #+BEGIN_SRC xml com.huaban jieba-analysis 1.0.0-SNAPSHOT #+END_SRC * 如何使用 - Demo #+BEGIN_SRC java @Test public void testDemo() { JiebaSegmenter segmenter = new JiebaSegmenter(); String[] sentences = new String[] {"这是一个伸手不见五指的黑夜。我叫孙悟空,我爱北京,我爱Python和C++。", "我不喜欢日本和服。", "雷猴回归人间。", "工信处女干事每月经过下属科室都要亲口交代24口交换机等技术性器件的安装工作", "结果婚的和尚未结过婚的"}; for (String sentence : sentences) { System.out.println(segmenter.process(sentence, SegMode.INDEX).toString()); } } #+END_SRC * 算法(wiki补充...) - [ ] 基于 =trie= 树结构实现高效词图扫描 - [ ] 生成所有切词可能的有向无环图 =DAG= - [ ] 采用动态规划算法计算最佳切词组合 - [ ] 基于 =HMM= 模型,采用 =Viterbi= (维特比)算法实现未登录词识别 * 性能评估 - 测试机配置 #+BEGIN_SRC screen Processor 2 Intel(R) Pentium(R) CPU G620 @ 2.60GHz Memory:8GB 分词测试时机器开了许多应用(eclipse、emacs、chrome...),可能 会影响到测试速度 #+END_SRC - [[src/test/resources/test.txt][测试文本]] - 测试结果(单线程,对测试文本逐行分词,并循环调用上万次) #+BEGIN_SRC screen 循环调用一万次 第一次测试结果: time elapsed:12373, rate:2486.986533kb/s, words:917319.94/s 第二次测试结果: time elapsed:12284, rate:2505.005241kb/s, words:923966.10/s 第三次测试结果: time elapsed:12336, rate:2494.445880kb/s, words:920071.30/s 循环调用2万次 第一次测试结果: time elapsed:22237, rate:2767.593144kb/s, words:1020821.12/s 第二次测试结果: time elapsed:22435, rate:2743.167762kb/s, words:1011811.87/s 第三次测试结果: time elapsed:22102, rate:2784.497726kb/s, words:1027056.34/s 统计结果:词典加载时间1.8s左右,分词效率每秒2Mb多,近100万词。 2 Processor Intel(R) Core(TM) i3-2100 CPU @ 3.10GHz 12G 测试效果 time elapsed:19597, rate:3140.428063kb/s, words:1158340.52/s time elapsed:20122, rate:3058.491639kb/s, words:1128118.44/s #+END_SRC
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jjkqjj

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值