jieba分词

python jieba中文分词用于搜索引擎

前言:
拉丁语言系不需要分词,因为他们的词语之间有空格分割,可以根据空格就可以把单词分开。比如英语、法语等。
亚系语言中间没有空格,比如中文、韩文及日文等。因此无法对某段文字根据某个标识符切割词语进行搜索。举个例子,假设我要搜索这样一段文字:“80后大学校长”,数据库里有相应的内容“80后都当大学校长了”,前者也不能模糊匹配到后者。但如果把前者分词为[‘80后’,‘大学’,‘校长’],就能很快检索到后者的内容。

jieba是一个中文分词工具,它能够将中文文本分解成单个的词语,这对于进行自然语言处理、文本挖掘等任务非常有用。它提供了多种分词模式,包括精确模式、全模式和搜索引擎模式,以及自定义词典的功能,以适应不同的需求。

jieba分词的使用

  1. 安装 jieba 库

    pip3 install jieba
    
  2. 自定义词典:jieba自带一个默认字典dict.txt,如果有自定义分词需求可以自定义词典:

    filename = "./static/jieba/user_dict.txt"
    # jieba.set_dictionary(filename) # 直接覆盖掉原jieba字典
    jieba.load_userdict(filename) # 原jieba字典基础上添加字典
    

    需注意的是,自定义字典 user_dict.txt格式需要按照 词语 词频 词性 的格式定义分词,且每个分词都需要换行。示例:

    发蓝 3 n
    发蔫 3 v
    发薪 19 v
    发薪日 3 n
    发薪水 3 n
    发虚 29 v
    发蜡 11 v
    发蜡条 3 n
    发行 3498 v
    发行业 3 n
    发行中心 6 l
    

    jieba词性具体可参考:https://blog.csdn.net/qq_36535820/article/details/101360586

  3. 分词:jieba分词支持四种分词模式:精确模式、全模式、搜索引擎模式、paddle模式,这里使用搜索引擎模式。

    raw_content = '80后大学校长'
    # cut_for_search 返回一个迭代器
    # lcut_for_search 返回一个列表
    cut_list = jieba.lcut_for_search(raw_content)
    print(cut_list)
    

    没有自定义词典时的分词结果:['80', '后', '大学', '学校', '校长', '大学校长']

    “80后”可单独作为一个词语不应该再被细分。我们可以在自定义词典user_dict.txt中添加:80后 10086 n

    重新加载自定义词典后的分词结果:['80后', '大学', '学校', '校长', '大学校长']

采用词语权重的方式对分词条件进行检索,再根据权重倒序排序,就可以将最贴近分词结果的检索内容展示在最前面了。

假设我们用“90后/00后 大学校长”去检索“90后/00后 都当大学校长了”,分词词典又必须添加 90后/00后。诸如此类的词语还有2024年,100元等、它们都属于 数字+量词 的组合,遇到这种词语不需要分词,但这种搭配有无数种,不可能把所有的搭配都添加进来。那应该怎么做呢?

可以把需要与数字结合的量词存放到一个列表,遍历列表,利用正则表达式拼接 数字+量词 的表达式;正则匹配将组合筛选出来后再用原内容去除这些组合词语,得到剩下的内容再进行分词即可:

text_sentence = "2024年100元雇佣90后"
# 量词列表
words_list = ['年','元','后']
# 拼接正则表达式
# 这里的*是填充,避免量词列表为空时报错
reg_exp = '\d+[*|'
for word in words_list:
    # 中文转unicode字符
    # word = word.encode('unicode_escape').decode()
    reg_exp+= word + '|'
reg_exp += ']'
# 正则匹配到符合表达式的列表
q_arr = re.findall(reg_exp, text_sentence)
for q in q_arr:
    # 把结果加入jieba词库 注意只是当前加载的临时词库 并没有永久写入dict.txt
    jieba.add_word(q)
cut_list = jieba.lcut_for_search(text_sentence)
print(cut_list)
# 打印结果:
# 没加量词正则前:['2024', '年', '100', '元', '雇佣', '90', '后']
# 加上量词正则后:['2024年', '100元', '雇佣', '90后']

参考链接:

  1. https://blog.csdn.net/u013250861/article/details/122723708
  2. https://blog.csdn.net/qq_36535820/article/details/101360586
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值