文本数据分析——主题提取+词向量化

it2023-11-27  72

使用Python 进行简单文本类数据分析,包括: 1. 分词 2. 生成语料库,tfidf加权 3. lda主题提取模型 4. 词向量化word2vec 参考: http://zhuanlan.zhihu.com/textmining-experience/1963076

#!/usr/bin/env python # -*- coding:utf-8 -*- import MySQLdb import pandas as pd import pandas.io.sql as sql import jieba import nltk import jieba.posseg as pseg from gensim import corpora, models, similarities import re # import logging # logging.basicConfig(format='%(asctime)s: %(levelname)s: %(message)s',level=logging.INGO) # reload(sys) # sys.setdefaultencoding('utf-8')

if name == 'main': #用户词典导入 jieba.load_userdict("F:\userdict.txt") #1. 读取数据 conn = MySQLdb.connect(host='', port=3306, charset='utf8',user='', passwd='', db='') df = sql.read_sql('select * from test',conn) conn.close() cont = df['commcont'] #示例数据(电商评论): 0 标签:洗衣机不错操作简单全自动不错心得:洗衣机很满意!洗宝宝衣服的!小巧方便!! 1 标签:洗衣时间短脱水声音小脱水很好噪音很小操作简单心得:比超市便宜,挺好用的,床单也可以洗。 2 标签:脱水很好脱水声音小洗衣效果好心得:质量、设计都非常好,外观也很漂亮。很满意。要注意这款… 3 标签:洗衣干净动力足洗衣效果好心得:比较小巧,非常不错,大品牌有保障!!! 4 心得:很适合家庭使用小件的衣物及时就洗出来了方便 5 标签:洗衣机不错操作简单心得:非常不错的洗衣机,价格也还不错,支持京东! 6 标签:脱水很好操作简单心得:给儿子买的脱水用,还不错~~~~~~~~~ 7 心得:很好的烘干机,已经用了 8 标签:操作简单心得:说是防缠绕,不知道是怎么个防缠绕法,脱水声音超大,像是在撞墙一样版本:6… 9 标签:全自动不错心得:买来送长辈的,还没用,看起来还可以版本:6.5公斤 # 2. 简单过滤某些特定词 pattern = ur'标签|心得' regx = re.compile(pattern) r = lambda x: regx.sub('',x) filtercont = cont.map® # 分词+选词 nwordall = [] for t in cont: words =pseg.cut(t) nword = [''] for w in words: if((w.flag == 'n'or w.flag == 'v' or w.flag == 'a') and len(w.word)>1): nword.append(w.word) nwordall.append(nword)

# 3. 选择后的词生成字典 dictionary = corpora.Dictionary(nwordall) #print dictionary.token2id # 生成语料库 corpus = [dictionary.doc2bow(text) for text in nwordall] #tfidf加权 tfidf = models.TfidfModel(corpus) # print tfidf.dfsx # print tfidf.idf corpus_tfidf = tfidf[corpus] # for doc in corpus_tfidf: # print doc # 4. 主题模型lda,可用于降维 #lda流式数据建模计算,每块10000条记录,提取50个主题 lda = models.ldamodel.LdaModel(corpus=corpus_tfidf, id2word=dictionary, num_topics=50, update_every=1, chunksize=10000, passes=1) for i in range(0,3): print lda.print_topics(i)[0] #lda全部数据建模,提取100个主题 #lda = models.ldamodel.LdaModel(corpus=corpus_tfidf, id2word=dictionary, num_topics=100, update_every=0, passes=20) #利用原模型预测新文本主题 # doc_lda = lda[corpus_tfidf]

#提取出的前3个主题的结果: 0.028算轻 + 0.028操作 + 0.027噪音 + 0.026不久 + 0.025送货 + 0.025很好 + 0.024牌子 + 0.022简单 + 0.021很小 + 0.020评价 0.047脱水 + 0.035声音 + 0.034性价比 + 0.031起来 + 0.026经典 + 0.025不错 + 0.024希望 + 0.022知道 + 0.020喜欢 + 0.020问题 0.056不用 + 0.032代买 + 0.029次数 + 0.024冻手 + 0.023稍差 + 0.022优点 + 0.022地方 + 0.021缺点 + 0.020面板 + 0.019送货

#5. word2vec 词向量化,可用于比较词相似度,寻找对应关系,词聚类 #sentences = models.word2vec.LineSentence(nwordall) #size为词向量维度数,windows窗口范围,min_count频数小于5的词忽略,workers是线程数 model = models.word2vec.Word2Vec(nwordall, size=100, window=5, min_count=5, workers=4) #model.save("F:\word2vecmodels") 建模速度慢,建议保存,后续直接调用 #model = models.word2vec.Word2Vec.load("F:\word2vecmodels") print model[u'洗衣'] #向量表示 sim = model.most_similar(positive=[u'洗衣', u'方便']) #相近词 for s in sim: print "word:%s,similar:%s " %(s[0],s[1]) #找到“洗衣”和”方便“相似度高的词 word:容量,similar:0.949171900749 word:动力,similar:0.946333944798 word:时间,similar:0.939984798431 word:干净,similar:0.918717443943 word:滚筒,similar:0.90215164423 word:外观,similar:0.886778771877 word:功能,similar:0.882432937622 word:效果,similar:0.880518734455 word:声音,similar:0.878705024719 word:电机,similar:0.878492772579

最新回复(0)