LDA主成分分析

# 挖掘客户意见
import re
import collections
import pandas as pd
import jieba
from wordcloud import WordCloud
from gensim import corpora, models
import matplotlib.pyplot as plt

# 获得wordcloud 需要的 文本格式
with open("want_after.txt", "r", encoding='utf-8') as f:
     text = ' '.join(jieba.cut(f.read(),cut_all=False))
     # print(text)

backgroud_Image = plt.imread('豆瓣.jpg')  # 背景图

# 词云的一些参数设置
wc = WordCloud(
      background_color='white',
      mask=backgroud_Image,
      font_path='SourceHanSerifCN-Medium.otf',
      max_words=200,
      max_font_size=200,
      min_font_size=8,
      random_state=50,
      )

# 生成词云
word_cloud = wc.generate_from_text(text)

plt.imshow(word_cloud)
plt.axis('off')

wc.to_file('结果.jpg')

# 看看词频高的有哪些
process_word = WordCloud.process_text(wc, text)
sort = sorted(process_word.items(), key=lambda e: e[1], reverse=True)
sort_after = sort[:50]
print(sort_after)

# 把数据存成csv文件
df = pd.DataFrame(sort_after)
# 保证不乱码
df.to_csv('sort_after.csv', encoding='utf_8_sig')
# 1.文本预处理方法
# (1)文本去噪
# 包括标点符号、数字、英文字母、转换符等噪声,要删除。
inputfile = 'q_0.txt'  # 评论提取后保存路径
data = pd.read_csv(inputfile, encoding='utf-8', header=None)
datalist = list(data[0])
datalist_denoise = []
r0 = r'[\s+\.!\/_,$%^*(+\"\')]+|[::+——()?【】“”!,。?、~@#¥%……&*()]+'
r1 = '[^\u4e00-\u9fa5]'
for a_string in datalist:
    a_string = str(a_string)
    temp = re.sub(r0, '', a_string)   # 删除标点符号
    temp = re.sub(r1, '', temp)   # 删除英文和数字
    datalist_denoise.append(temp)
data_denoise = pd.DataFrame(datalist_denoise)
# filelist3.to_csv(save_path, index=False, header=False, encoding='utf-8')
# (2)文本去重
# 文本去重包括两个部分,即重复语句删除和重复词压缩。
l1 = len(data_denoise)
# 在重复文字中筛选保留其中1条
data_unique = pd.DataFrame(data[0].unique())
l2 = len(data_unique)
print(u'删除了%s条重复条目。' % (l1 - l2))
# 重复词压缩也称为机械压缩,比如:很好很好很好。
# data_compress = []
# for a_string in data_unique:
#     a_string = str(a_string)
#     temp1 = a_string.strip('\n')
#     temp2 = temp1.lstrip('\ufeff')
#     temp3 = temp2.strip('\r')
#     temp4 = wenben.find_chinese(temp3)
#     temp5 = ""
#     if temp4 != '':
#         temp5 = wenben.delete_copy(temp4)
#     data_compress.append(temp5)
# (3)短句删除
# 还存在一些短句字数过少,这也是没有意义的意见。比如:很不错
data_long = []
for a_string in data_unique:
    a_string = str(a_string)
    if a_string == '':
        continue
    else:
        if len(a_string) < 4:
            continue
        else:
            data_long.append(a_string)
# 2.文本分词和统计
# 将短句划分为词。接着,通过高频率词组进行统计,就可以掌握客户的主要意见。
# def stopwordslist(filepath):
#     stopwords = open(filepath, encoding='utf-8').read()
#     stopwords = jieba.cut(stopwords, cut_all=True)
#     stopwords2 = "\n ".join(stopwords)
#     return stopwords2
# def movestopwords(sentence):
#     stopwords = stopwordslist('stoplist.txt')  # 这里加载停用词的路径
#     outstr = ''
#     for word in sentence.split("\n"):
#         if word not in stopwords:
#             if word != '\t'and'\n':
#                 outstr += word
#     return outstr
#
# wordlist_text = jieba.cut(text, cut_all=True)
# wl_space_split = "\n ".join(wordlist_text)
# listcontent = movestopwords(wl_space_split)
# 统计词频
str1 = listcontent.split(" ")
q = collections.Counter(str1)
dataq = pd.DataFrame(q.items())
dataq.to_excel("q5.xlsx",  header=False, encoding='utf-8')
# 生成词云
outputfile = 'ciyun.jpg'
my_wordcloud = WordCloud(
            background_color='white',    # 设置背景颜
            # mask = abel_mask,        # 设置背景图片
            max_words=2000,            # 设置最大现实的字数
            collocations=False,
            font_path='simhei.ttf',  # 设置字体格式,如不设置显示不了中文
            scale=4).generate(listcontent)
plt.imshow(my_wordcloud)
plt.axis("off")
plt.show()
my_wordcloud.to_file(outputfile)


# 3.主题分析
# 主题分析是通过机器学习和自然语言处理等方法在大量的文本中自动抽象出主题的一种统计模型。这类模型要考虑到文本背后的语义关联的关系,发现文本词语的规律,实现在非结构化的文本中找到有效的信息。
inputfileq[1] = inputfileq[0].apply(lambda s: s.split(' ')) # 定义一个分割函数,然后用apply广播
# 主题分析
inputfileq_dict = corpora.Dictionary(inputfileq[1])  # 建立词典
inputfileq13_corpus = [inputfileq_dict.doc2bow(i) for i in inputfileq[1]]  # 建立语料库
inputfileq13_lda = models.LdaModel(
    inputfileq13_corpus,
    num_topics=3,
    id2word=inputfileq_dict)  # LDA模型训练
filelist = []
for i in range(3):
    filelist.append(inputfileq13_lda.print_topic(i))
    print(inputfileq13_lda.print_topic(i))  # 输出每个主题
filelist1 = pd.DataFrame(filelist)
filelist1.to_csv(outputfileq, index=False, header=False, encoding='utf-8')
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,635评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,628评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,971评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,986评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,006评论 6 394
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,784评论 1 307
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,475评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,364评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,860评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,008评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,152评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,829评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,490评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,035评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,156评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,428评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,127评论 2 356

推荐阅读更多精彩内容