首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >python利用jieba处理文本数据词频列表,最终生成词云

python利用jieba处理文本数据词频列表,最终生成词云

作者头像
IT不难
发布2022-03-12 08:57:19
发布2022-03-12 08:57:19
1.5K0
举报
文章被收录于专栏:IT不难技术家园IT不难技术家园

前言

自己使用的一个接单系统,运行了多半年时间。积累的一批数据,有近万条的开发数据。就像自己分析一下,大部分是什么需求。看看能不能挖出新的商机。

从数据库导出标题数据

代码语言:javascript
复制
select task_title from task_requirements where UNIX_TIMESTAMP(task_addtime) > UNIX_TIMESTAMP('2022-03-10');

将结果保存到r.txt

利用python处理文本

作为一个码农,先想到的是自己动手处理,于是撸了一个python脚本,做数据处理。

代码结构

代码语言:javascript
复制
tree 
|____TextAnalytics       //项目目录
| |____output            //数据输出
| |____setting.py        //配置文件
| |____README.md         //说明
| |____common.py         //主文件
| |____lib               //词库
| | |____停用词.csv
| | |____无效词.csv
| | |____保留词.csv
| |____main.py           //入口
| |____data              //待处理数据
| | |____r.txt

主要函数说明

  • 数据载入清洗
代码语言:javascript
复制
def _cleanSourceText(sFile):
    '''
    文本文件数据清洗
    '''
    sourceFile = 'data/{}'.format(sFile)
    #关键词列表
    savewords = [line.strip() for line in open(saveFilePath, encoding='utf-8').readlines()]
    voidwords = [line.strip() for line in open(voidFilePath, encoding='utf-8').readlines()]

    # 对文本进行操作
    with open(sourceFile, 'r', encoding = 'utf-8') as sf:
        #返回字符串
        res_str = ''
        for line in sf:
            #过滤字符串,只保留中文,英文,数字
            string = re.compile("[^\u4e00-\u9fa5^a-z^A-Z^0-9]").sub('',line)
            tag = 0
            seg = jieba.cut(string.strip(), cut_all = False)
            # 筛选存在关键词的条目
            for word in seg:
                # 如果是无效词,跳过此条,将tag设置为0
                if word in voidwords:
                    tag = 0
                    break

                #如果在保留词中
                if len(savewords) == 0 or word in savewords:
                    tag = 1

            if tag == 1 and len(string) > 6 and len(string) < 14:
                res_str = res_str + string + "\n"

        print('源数据文件{}处理完成!'.format(sFile))

    return res_str
  • 文本分词
代码语言:javascript
复制
def _parseText(text):
    '''
    文本分词函数
    '''
    text = re.sub(r'[^\w]', ' ' , text)
    #text = filter(None, text)

    words = jieba.lcut(text) #使用jieba.lcut()返回一个单词列表
    #加载停用词
    stopwords = [line.strip() for line in open(stopFilePath, encoding='utf-8').readlines()]

    words_dict = {} #创建一个字典,用于生成单词,频率
    for word in words:
       #不在停用词表中
        if word not in stopwords:
            if len(word) == 1:
                continue
            else:
                words_dict[word] = words_dict.get(word,0) + 1 #get不到word就创建word为下>标的值0+1,如果get到了就在word的值上加1,然后更新字典

    #words_dict = list(words_dict)
    words_dict_sorted = sorted(words_dict.items(), key=lambda kv:kv[1], reverse = True)

    #返回结果
    return words_dict_sorted

执行

代码语言:javascript
复制
python3 main.py -s r.txt

结果如下

代码下载

脚本下载地址:

在线方式

脚本写完之后,才发现有更简单的方式。就是利用微词云,直接就生成了。就是开头的图。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 从数据库导出标题数据
  • 利用python处理文本
    • 代码结构
    • 主要函数说明
    • 执行
  • 代码下载
  • 在线方式
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档