jieba分词、多进程进度条显示

4 篇文章 0 订阅
1 篇文章 0 订阅

jieba安装

pip install jieba 详情参考官网项目地址

数据集

提供一份来自搜狐网的数据集(移动端网页更好爬),这里
使用bz2格式保存速度和大小较为均衡,通过pandas读入。
df = pd.read_pickle(YOUR_PATH)
在这里插入图片描述

使用jieba分词

要使用不同模式参考官网文档这里给出个示例,对content列进行默认模式中文分词,并去掉标点符号

import jieba.posseg as pseg

def content100_to_word(line):
    try:
        gen = pseg.cut(line[:100]) #对字符串前一百分词
    except:
        return ""
    words = []
    for i in gen:
        if i.flag != 'x':
            words.append(i.word) #只加非标点符号
    return ' '.join(words) #空格分割的字符串

具体使用多少字符进行分词需要权衡数据集分布和效率。另外除了去标点,还可以去停用词如哈、呀之类的词,网上应该有收集的列表直接用。

多进程的进度条

使用tqdm这个库来显示,依旧是pip install tqdm,这里直接封装成一个函数可以不用管细节:

def run_imap_mp(func, argument_list, num_processes='', is_tqdm=True):
    '''
    多进程与进度条结合
    param:
    ------
    func:function
        函数
    argument_list:list
        参数列表
    num_processes:int
        进程数,不填默认为总核心
    is_tqdm:bool
        是否展示进度条,默认展示
    ''' 
    result_list_tqdm = []
    try:
        import multiprocessing
        if num_processes == '':
            num_processes = multiprocessing.cpu_count()
        pool = multiprocessing.Pool(processes=num_processes)
        if is_tqdm:
            from tqdm import tqdm
            for result in tqdm(pool.imap(func=func, iterable=argument_list), total=len(argument_list)):
                result_list_tqdm.append(result)
        else:
            for result in pool.imap(func=func, iterable=argument_list):
                result_list_tqdm.append(result)
        pool.close()
    except:
        result_list_tqdm = list(map(func,argument_list))   
    return result_list_tqdm

会使用多进程的话很容易看懂。
结合上面的jieba分词测试下:(单进程情况所有数据我i5八代需要处理几十分钟)

def main():
    df = pd.read_pickle(PATH)
    df['content'][:10000] = run_imap_mp(content100_to_word,df['content'][:10000]) 
    print(df['content'][:10000])

在这里插入图片描述
在这里插入图片描述
对于这种耗时较多的任务可以充分发挥多进程的优势。
核心代码已经展示在上面了

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值