jieba自定义词典精准分词.

代码中的两种方式 :

  1. 添加自定义词典
        jieba.load_userdict("3dict.txt")

  2. 添加自定义正则   
        regex1 = u'(?:[^\u4e00-\u9fa5()*&……%¥$,,。.@! !]){1,5}期'  # 非汉字xxx期
        regex2 = r'(?:[0-9]{1,3}[.]?[0-9]{1,3})%'  # xx.xx%

最后要加   file_save.close()  ,关闭文件,  #一定!一定!要加这一句否则不能写入文件 !!!!

#!/usr/bin/env python
# -*- coding:utf-8 -*- 
# Author: Jia ShiLin

import jieba
import re
#from tokenizer import cut_hanlp

# 加载自定义字典
jieba.load_userdict("3dict.txt")


def merge_two_list(a, b):
    '''
        c = merge_two_list(["你好","很好","非常好"],["abc","ade","abcd","abc",'efg']
        ----> c = ['你好', 'abc', '很好', 'ade', '非常好', 'abcd', 'abc', 'efg']
    :param a:
    :param b:
    :return: c
    '''
    # 传入两个list,将b中元素分别从a[i]位置插入到a中,
    c = []
    len_a, len_b = len(a), len(b)
    minlen = min(len_a, len_b)
    for i in range(minlen):
        c.append(a[i])
        c.append(b[i])

    if len_a > len_b:
        for i in range(minlen, len_a):
            c.append(a[i])
    else:
        for i in range(minlen, len_b):
            c.append(b[i])
    return c


if __name__ == '__main__':
    # data
    file_open = open("text.txt", "r", encoding="utf8")
    file_save = open("result_cut.txt", "w", encoding="utf8")

    # 添加正则匹配规则
    regex1 = u'(?:[^\u4e00-\u9fa5()*&……%¥$,,。.@! !]){1,5}期'  # 非汉字xxx期
    regex2 = r'(?:[0-9]{1,3}[.]?[0-9]{1,3})%'  # xx.xx%
    # 正则对象
    p1 = re.compile(regex1)
    p2 = re.compile(regex2)
    # 对每一行进行p1和p2判断
    for line in file_open.readlines():

        # 第一个regex1的匹配操作
        result1 = p1.findall(line)  # 返回匹配到的list
        if result1:
            regex_re1 = result1
            line = p1.sub("FLAG1", line)  # 将匹配到的替换成FLAG1

        # 第二个regex2的匹配操作
        result2 = p2.findall(line)
        if result2:
            line = p2.sub("FLAG2", line)

        # 分词操作
        words = jieba.cut(line)  # 结巴分词,返回一个generator object
        result = " ".join(words)  # 结巴分词结果 本身是一个generator object,所以使用 “ ”.join() 拼接起来

        if "FLAG1" in result:
            result = result.split("FLAG1")
            result = merge_two_list(result, result1)
            ss = result
            result = "".join(result)  # 本身是个list,我们需要的是str,所以使用 "".join() 拼接起来

        if "FLAG2" in result:
            result = result.split("FLAG2")
            result = merge_two_list(result, result2)
            result = "".join(result)

        file_save.write("jieba_save:"+result)
    file_save.close() #一定!一定!要加这一句否则不能写入文件

 

  • 5
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

贾世林jiashilin

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

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

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

打赏作者

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

抵扣说明:

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

余额充值