python 多进程jieba分词,高效分词,multiprocessing

Posted 高颜值的殺生丸

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python 多进程jieba分词,高效分词,multiprocessing相关的知识,希望对你有一定的参考价值。

 

自然语言任务经常使用jieba分词,数据量大时怎么加速,jieba分词不支持使用asyncio异步加速,使用multiprocessing还是可以的

import jieba
import jieba.analyse
import multiprocessing

# 加载自定义词典
jieba.load_userdict("user_dic.txt")
jieba.load_userdict("cate_group.txt")
jieba.analyse.set_stop_words(\'stopwords_v1.txt\')

def process_text(text):
    # 分词
    words = jieba.cut(text, cut_all=True)
    
    # 过滤长度小于2或大于10的词和纯数字的词
    filtered_words = [w for w in words if len(w) >= 2 and len(w) <= 10 and not w.isdigit()]
    
    # 返回分词结果
    return filtered_words


# 创建进程池
pool = multiprocessing.Pool()

# 处理文本列表
# texts = ["这是一段测试文本", "这是另一段测试文本"]
texts = data["new_text"]
results = pool.map(process_text, texts)

# 输出结果
results

  

结果:

[[\'估值\', \'有待\', \'修复\', \'煤炭\', \'平均\', \'市盈率\', \'美元\'],
 [\'国产\',
  \'医疗\',
  \'医疗器械\',
  \'器械\',
  \'行业\',
  \'发展\',
  \'迅速\',
  \'作为\',
  \'国内\',
  \'最大\',
  \'医疗\',
  \'医疗器械\',
  \'器械\',
  \'企业\',
  \'基本\',
  \'一枝\',
  \'一枝独秀\',
  \'独秀\'],
 [\'今日\', \'上海\', \'现货\'],
 [\'消息\', \'准备\'],

 

jieba 分词库(python)

安装jieba:pip install jieba

原理:

  基于前缀词典实现高效的词图扫描,生成句子中汉字所有可能成词情况所构成的有向无环图 (DAG)

  采用了动态规划查找最大概率路径, 找出基于词频的最大切分组合

  对于未登录词,采用了基于汉字成词能力的 HMM 模型,使用了 Viterbi 算法

分词:

jieba支持三种分词模式:

  精确模式:试图将句子最精确地切开,适合文本分析

  全模式:把句子中所有的可以成词的词语都扫描出来, 速度非常快,但是不能解决歧义

  搜索引擎模式,在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词

示例:

#!/usr/bin/python
# -*- coding: UTF-8 -*-
import jieba
strt = "我爱北京天安门!"
# 全模式
sl = jieba.cut(strt, cut_all=True)
print("全模式:", ",".join(sl))

# 精确模式,默认为精确模式,所以可以不指定cut_all=False
sl = jieba.cut(strt, cut_all=False)
print("精确模式:", ",".join(sl))

# 搜索引擎模式
sl = jieba.cut_for_search(strt)
print("搜索引擎模式:", ",".join(sl))

 

 

  关键词抽取算法主要有以下两种:

  有监督学习算法:将关键词抽取过程视为二分类问题,先抽出候选词,然后对于每个候选词划定标签,其要么是关键词,要么不是关键词。然后训练关键词抽取分类器,当对一段新的文本进行抽取关键词时,先抽取出所有的候选词,然后利用训练好的关键词抽取分类器,对各个候选词进行分类,最终将标签为关键词的候选词作为关键词。

  无监督学习算法:先抽取出候选词,然后对各个候选词进行打分,然后输出topN个分值最高的候选词作为关键词。根据打分的策略不同,有不同的算法,例如TF-IDF,TextRank等算法。

jieba分词实现了基于TF-IDF关键词抽取算法和基于TextRank关键词抽取算法,两类算法均是无监督学习的算法。以下对这两种算法进行介绍:

  1.基于TF-IDF算法进行关键词提取

  如果某个词在一篇文档中出现的频率高,也即TF(词频)高;并且在语料库中其他文档中很少出现,即DF的低,也即IDF高,则认为这个词具有很好的类别区分能力。TF-IDF算法中,将TF与IDF相乘。

  代码示例:

#!/usr/bin/python
# -*- coding: UTF-8 -*-
import jieba
import jieba.analyse
# jieba.analyse.extract_tags(sentence,topK) 有两个参数,第一个为要提取的文本,第二个为要获取的按TF-IDF排序的词的个数
sentence = "有监督学习算法将关键词抽取过程视为二分类问题,先抽出候选词,然后对于每个候选词划定标签,其要么是关键词,要么不是关键词。然后训练关键词抽取分类器," \\
           "当对一段新的文本进行抽取关键词时,先抽取出所有的候选词,然后利用训练好的关键词抽取分类器,对各个候选词进行分类,最终将标签为关键词的候选词作为关键词。"
topK = 5
result=jieba.analyse.extract_tags(sentence,topK)
print(result)

  运行结果:

  

 

  2.基于TextRank算法进行关键词提取

  代码示例:

#!/usr/bin/python
# -*- coding: UTF-8 -*-
import jieba
from jieba import analyse
textrank = analyse.textrank

sentence = "有监督学习算法将关键词抽取过程视为二分类问题,先抽出候选词,然后对于每个候选词划定标签,其要么是关键词,要么不是关键词。然后训练关键词抽取分类器," \\
           "当对一段新的文本进行抽取关键词时,先抽取出所有的候选词,然后利用训练好的关键词抽取分类器,对各个候选词进行分类,最终将标签为关键词的候选词作为关键词。"
# sentence为要提取的文本,topK为要获取的关键词的个数,withWeight为是否显示权重,allowPOS为要提取关键词的词性
result=textrank(sentence, topK=5, withWeight=True, allowPOS=(\'ns\', \'n\', \'vn\', \'v\'))

print(result)

  运行结果:

  

 

jieba动态添加自定义词

#!/usr/bin/python
# -*- coding: UTF-8 -*-
import jieba

content = "韩国东大门单鞋女方头绒面一脚蹬韩版休闲2020春季新款平底毛毛鞋"
result = jieba.cut(content)
print("自定义前:",",".join(result))

jieba.add_word("东大门")
jieba.add_word("一脚蹬")
jieba.add_word("毛毛鞋")
result = jieba.cut(content)
print("自定义后:",",".join(result))

  运行结果:

  

 

jieba自定义词库

jieba支持自定义词库,需要使用时把自定义的词库load进来后jieba就会同时使用 jieba初始化时加载的词库自定义词库,词典格式和dict.txt一样,一个词占一行,每一行分三部分,第一部分为词语,第二部分为词频,最后为词性(可省略),并用空格隔开。

用法:jieba.load_userdict(file_name) #file_name为自定义词典的路径

自定义词库:

  

工程目录:

   

代码示例:

#!/usr/bin/python
# -*- coding: UTF-8 -*-
import jieba

content = "韩国东大门单鞋女方头绒面一脚蹬韩版休闲2020春季新款平底毛毛鞋"
result = jieba.cut(content)
print("自定义前:",",".join(result))

jieba.load_userdict("./shoes")
result = jieba.cut(content)
print("加载自定义库后:",",".join(result))

运行结果:

  

 

以上是关于python 多进程jieba分词,高效分词,multiprocessing的主要内容,如果未能解决你的问题,请参考以下文章

jieba 分词库(python)

python结巴(jieba)分词

如何利用Python对中文进行分词处理

jieba分词(R vs. python)

python jieba分词如何去除停用词

python将怎么将jieba分词结果写入文本,各种编码问题啊