利用Python进行文本分析

原文地址:

http://blog.sina.com.cn/s/blog_727a704c0102vn44.html

使用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(r)
        # 分词+选词
        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 

在这里插入图片描述

posted @ 2021-07-06 18:30  老酱  阅读(551)  评论(0编辑  收藏  举报