python实现文本词频统计分析,计算距离重心和词云可视化

在这里插入图片描述
import jieba
import math
import wordcloud
import matplotlib.pyplot as plt

#构建停用词列表
def stopword(path1):
    file = open(path1,'r',encoding='utf-8')
    stopwords = [line.strip() for line in file.readlines()]

    return stopwords
    
#统计词频和高频词
def comment(path2,stopwords):
    dic = {}
    with open(path2,'r',encoding='utf-8') as f:
        txt = f.readlines()
        for line in txt:
            word = jieba.lcut(line.strip('\n'))
            for w in word:
                if len(w)>1 and w not in stopwords:
                    dic[w] = dic.get(w,0) + 1
    dic_order=sorted(dic.items(),key=lambda x:x[1],reverse=True) 
    print(dic_order)
    lis = [k[0] for k in dic_order[:6]]
    print(lis)

    return lis,dic

#查看每条评论(文档)是否含有高频词
def matrics(path2,lis):
    matric = []
    with open(path2,'r',encoding='utf-8') as f:
        txt = f.readlines()
        for line in txt:
            mat = [0 for i in range(6)]
            word = jieba.lcut(line.strip('\n'))
            #print(word)
            for w in word:
                if w in lis:
                    #print(w,end = ' ')
                    mat[lis.index(w)] = 1 #变成+=1就是累加
            matric.append(mat)
            #print()
    return matric

#计算不同评论之间的距离
def distance(matric):
    for i in matric:
        for j in matric:
            var = math.sqrt(sum([(i[k]-j[k])**2 for k in range(6)]))
            #print(round(var,2),end =' ')
        #print()

#计算所有评论的重心并输出
def center(matric):
    point = [0 for i in range(6)]
    for i in matric:
        for j in range(6):
            point[j] += i[j]/len(matric)
    print('point = ',point)

#绘制词云
def wcloud(dic):
    wc = wordcloud.WordCloud( #     根据词频字典生成词云图
        max_words=200,  # 最多显示词数
        max_font_size=300,  # 字体最大值
        background_color="white",  # 设置背景为白色,默认为黑色
        width = 1500,  # 设置图片的宽度
        height= 960,  # 设置图片的高度
        margin= 10,  # 设置图片的边缘
        font_path='C:/Windows/SIMLI.TTF'
    )
    wc.generate_from_frequencies(dic)  # 从字典生成词云
    plt.imshow(wc)  # 显示词云
    plt.axis('off')  # 关闭坐标轴
    plt.show()  # 显示图像
    #wc.to_file(fp)  # 保存图片

#定义主函数
def main():
    path1 = 'stopwords_list.txt'
    path2 = 'jd_comments.txt'
    stopwords = stopword(path1)
    lis,dic = comment(path2,stopwords)
    matric = matrics(path2,lis)
    distance(matric)
    center(matric)
    wcloud(dic)

#主函数调用执行
if __name__ == '__main__':
    main()

部分高频词统计

[('不错', 451), ('电脑', 332), ('非常', 297), ('没有', 236), ('速度', 234), ('客服', 187), ('问题', 186), ('开机', 183), ('京东', 180), ('满意', 176), ('感觉', 166), ('很快', 149), ('收到', 147), ('东西', 135), ('系统', 133), ('真的', 128), ('使用', 126), ('键盘', 118), ('喜欢', 115), ('包装', 113), ('有点', 111), ('比较', 105), ('hellip', 105), ('外观
', 104), ('游戏', 101), ('效果', 101), ('硬盘', 100), ('物流', 98), ('价格', 97), ('快递', 97), ('屏幕', 97), ('性能', 93), ('机器', 88), ('流畅', 88), ('性价比', 87), ('一下', 87), ('运行', 85), ('安装', 84), ('购买', 82), ('评价', 82), ('值得', 81), ('鼠标', 80), ('方便', 78), ('不是', 78), ('一次', 78), ('知道', 77), ('配置', 77), ('总体', 77), ('耐
心', 76), ('卖家', 74), ('好评', 74), ('现在', 73), ('笔记本', 73), ('特别', 73), ('推荐', 69), ('第一次', 68), ('希望
', 67), ('来说', 65), ('一点', 65), ('服务', 64), ('质量', 64), ('固态', 63), ('内存', 63), ('很多', 63), ('已经', 62), ('软件', 62), ('清晰', 61), ('以后', 60), ('机子', 60), ('办公', 59), ('声音', 58), ('购物', 58), ('需要', 58), ('几
天', 58), ('之前', 57), ('发货', 53), ('朋友', 53), ('打开', 53), ('散热', 53), ('店家', 52), ('态度', 52), ('完美', 52), ('觉得', 52), ('最后', 51), ('做工', 51), ('好看', 50), ('支持', 50), ('玩游戏', 50),

特征词组成的特征集

['不错', '电脑', '非常', '没有', '速度', '客服']

部分评论的“坐标”

[1, 0, 0, 0, 1, 0]
[1, 1, 1, 0, 0, 0]
[1, 0, 1, 1, 1, 0]
[0, 1, 0, 0, 0, 0]
[0, 1, 1, 0, 0, 1]
[1, 1, 0, 0, 1, 1]
[0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 1]
[1, 0, 0, 0, 1, 0]
[0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0]
[0, 0, 0, 1, 0, 0]
[1, 0, 0, 0, 0, 0]
[0, 0, 1, 0, 0, 1]
[1, 0, 0, 1, 0, 0]
[0, 1, 0, 0, 0, 1]
[0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0]
[1, 0, 0, 0, 0, 0]
[1, 0, 1, 1, 0, 0]
[0, 0, 0, 0, 1, 0]
[1, 1, 0, 0, 1, 0]
[0, 1, 0, 0, 0, 0]
[0, 0, 1, 0, 0, 1]
[0, 1, 0, 1, 0, 1]
[0, 0, 0, 0, 0, 0]
[0, 1, 1, 0, 0, 0]
[0, 0, 0, 0, 0, 0]
[0, 1, 1, 0, 0, 0]
[0, 0, 0, 0, 1, 0]
[0, 1, 1, 1, 0, 0]
[1, 1, 1, 0, 0, 0]
[0, 1, 0, 0, 1, 0]
[0, 0, 0, 0, 0, 0]
[1, 1, 0, 1, 0, 0]
[1, 0, 0, 0, 1, 0]
[1, 0, 0, 1, 1, 0]
[0, 0, 0, 0, 0, 0]
[0, 0, 0, 1, 0, 0]
[0, 0, 1, 0, 0, 0]
[0, 0, 0, 0, 1, 0]
[0, 0, 0, 1, 1, 0]

所有评论的“重心”

point =  [0.3383233532934152, 0.23253493013972026, 0.19960079840319336, 0.19161676646706563, 0.19161676646706563, 0.1447105788423152]

词云可视化

在这里插入图片描述
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,732评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,496评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,264评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,807评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,806评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,675评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,029评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,683评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,704评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,666评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,773评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,413评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,016评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,204评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,083评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,503评论 2 343

推荐阅读更多精彩内容