在上一篇博文Python项目之企业审批流绩效分析分析应用1的源码基础上,发现统计出的词频需要做一些纠偏。

1、实际统计的时候,只按词库中的标准名词是不够说明问题,我们希望按照自定义的词组搭配进行自动切分,

jieba库支持自定义扩展词库:

jieba.load_userdict("newdit.txt")

文本格式:

派遣单 4 n
支付方式 4 n

预算编码 4 n

其中字母 表示词类型,数字表示期望统计词频

2、如:预算编码、WBS编码是同一个东西,且有些审批人可能直接写WBS,Python是大小写敏感的,所有wbs和WBS会被统计不同的词汇。所以算法中应该对这类词汇做汇总统计。同样,申请人要求回退和本人要求回退同样的理由,应该归为一类。

程序做如下调整:

#bpmRejectAnalyzeV1.py
import jieba
import jieba.posseg as pseg
from os import path
from scipy.misc import imread
from wordcloud import WordCloud
import matplotlib.pyplot as plt

def getTxt(txt):
    with open(txt,'r',encoding='utf-8')as f:
        reject_list = f.readlines()
    return reject_list

def segmentWords(txtlist):
    stop_words = set(line.strip() for line in open('stopwords.txt', encoding='utf-8'))
    newslist = []
    #新增自定义词
    jieba.load_userdict("newdit.txt")
    for subject in txtlist:
        if subject.isspace():
            continue
        word_list = pseg.cut(subject)
        for word, flag in word_list:
            if not word in stop_words and flag == 'n' or flag == 'eng':
                newslist.append(word)
     #合并指定的相似词
    for line in open('unionWords.txt', encoding='utf-8'):
        newline = line.encode('utf-8').decode('utf-8-sig')    #解决\ufeff问题
        unionlist = newline.split("*")
        for j in range(1,len(unionlist)):
            #wordDict[unionlist[0]] += wordDict.pop(unionlist[j],0)
            for index,value in enumerate(newslist):
                if value == unionlist[j]:
                    newslist[index] = unionlist[0]  
    return newslist

def countWords(newslist):
    wordDict = {}
    for item in newslist:
        wordDict[item] = wordDict.get(item,0) + 1
    itemList = list(wordDict.items())
    itemList.sort(key=lambda x:x[1],reverse=True)        
    for i in range(100):
        word, count = itemList[i]
        print("{}:{}".format(word,count))

def drawPlant(newslist):
    d = path.dirname(__file__)
    mask_image = imread(path.join(d, "mickey.png"))
    content = ' '.join(newslist)
    wordcloud = WordCloud(font_path='simhei.ttf', background_color="white", max_words=40).generate(content)
    # Display the generated image:
    plt.imshow(wordcloud)
    plt.axis("off")
    wordcloud.to_file('wordcloud.jpg')
    plt.show()
        
def main():
    txtlist = getTxt('P001.txt')
    print(len(txtlist))
    wordlist = segmentWords(txtlist)
    countWords(wordlist)
    drawPlant(wordlist)

main()

词云效果,比之前的好很多,能一眼看出问题:

Python项目之企业审批流绩效分析分析应用2相关推荐

  1. Python项目之企业审批流绩效分析分析应用1

    结合词频统计的功能,联想到可以应用于企业审批流程回退意见的词频分析,是企业流程绩效分析的扩展之一. 技术路线:jieba分词,wordcloud绘制特定形状词云 #bpmRejectAnalyzeV1 ...

  2. Python项目实战 —— 04. 淘宝用户行为分析

    Python项目实战 Python项目实战--目录 Python项目实战 -- 04. 淘宝用户行为分析 一.背景 二.解题思路 三.数据分析 3.1 数据清洗 3.2 数据分析 3.2.1 用户整体 ...

  3. python 审批流_Odoo 基于企业微信实现的通用审批流功能的自助配置及使用说明 - Oejia 技术栈,企业方案分享、Odoo顾问...

    ### 概述 以下为基于企业微信自建应用审批流程引擎实现的Odoo通用审批功能,基于企业微信官方审批应用实现的Odoo通用审批功能请移步到 http://oejia.net/blog/2020/05/ ...

  4. Python项目实战:使用PySpark对大数据进行分析

    Python项目实战:使用PySpark对大数据进行分析 大数据,顾名思义就是大量的数据,一般这些数据都是PB级以上.PB是数据存储容量的单位,它等于2的50次方个字节,或者在数值上大约等于1000个 ...

  5. SAP实施项目中采购员在非生产性采购申请审批流中的角色安排

    SAP实施项目中采购员在非生产性采购申请审批流中的角色安排 所谓非生产性物料,也叫间接物料,也有些企业称之为MRO物料.它主要包括而不限于如下物料:办公用品,劳保用品,备品备件,服务,固定资产等等.这 ...

  6. 钉钉python实现审批(通过软件和钉钉审批流的结合)

    为了实现工单系统,又不想自己去结合钉钉的组织架构实现一套审批流,所以采用钉钉的审批结合自己的系统去实现工单. 由钉钉实现审批流,软件实现查询,记录工单等. 一.具体流程 二.具体的实现方式 获取tok ...

  7. 二次开发:flowable审批流程实践与创建流程源码分析

    二次开发:flowable审批流程实践与创建流程源码分析 上一篇已经描述了基于开源项目https://doc.iocoder.cn/的flowable的快速开发,创建了一个租户,创建了用户和相应的岗位 ...

  8. 只能是做的HTML5审批流项目

    这其实不叫工作流系统,更不能算是工作流产品了,只能是做的HTML5审批流项目.一个工作流软件产品,是能适用到各个行业,并且流程引擎的模型设计很健壮,利用流程引擎的模型能设计出各式各样的业务流程.飞鸽传 ...

  9. python有趣小项目源码分析_推荐 10 个有趣的 Python 项目

    想成为一个优秀的开发者,没有捷径可走,势必要花费大量时间在键盘后. 而不断地进行各种小项目开发,可以为之后的大开发项目积攒经验,做好准备. 但不少人都在为开发什么项目而苦恼,因此,我为大家准备了10个 ...

最新文章

  1. java统计字符串中每个字符出现的次数,统计字符串中每个字符出现的次数
  2. python lambda表达式_Python中lambda表达式
  3. 随想录(由自定义打印函数想到的)
  4. 【Cocos2d-X(1.x 2.x) 】iOS6与iphone5解决armv7s,Default-568h@2x.png
  5. 解决Mac Chrome打开HTTPS证书错误问题
  6. Error in moviepy setup command: 'extras_require' must be a dictionary whose values are strings or li
  7. KeyMob聚合平台:为开发者塑造广告变现形式
  8. Java 调用gc语句_Java GC 、引用
  9. eclipse下androidannotations开发环境搭建
  10. Linux 和 Windows 下实现多进程的方式以及管道操作
  11. 坦克采样器加钢琴鼓组弦乐打击音源-IK Multimedia SampleTank 4 v4.1.4 + Library
  12. 手游方舟重启维护服务器要多久,方舟生存进化手游日常维护多久
  13. 手机QQ文件存储路径
  14. java 端口流量统计_java—流量统计源码 | 学步园
  15. JavaScript 事件和事件类型
  16. 东南大学 通信工程/电子信息工程 院校分析 通信保研面试重点问题
  17. 购物车js代码_JS实现购物车商品列表结算功能代码
  18. Android之ContentProvider
  19. java毕业生设计高校教学资源系统计算机源码+系统+mysql+调试部署+lw
  20. RFID智能仓储管理解决方案,你get到了吗-新导智能

热门文章

  1. 牛客小白月赛B JAVA大数或String
  2. 屡教不改!这四大运营商仍在出卖用户位置数据...
  3. 数据挖掘算法之时间序列算法(平稳时间序列模型,AR(p),MA(q),(平稳时间序列模型,AR(p),MA(q),ARMA(p,q)模型和非平稳时间序列模型,ARIMA(p,d,q)模型)学习笔记梳理
  4. Python环境搭建—安利Python小白的Python和Pycharm安装详细教程
  5. 项目实战——匹配系统(中)
  6. 常用条码打印机测纸方法
  7. 2022年Matlab毕设避坑指南及选题推荐
  8. 计算机系统基础:bomb炸弹实验
  9. 今日头条实习面经--20180509
  10. [HDU1290]献给杭电五十周年校庆的礼物