Python數據分析及可視化實例之抽取文本主題(30)
系列文章總目錄:Python數據分析及可視化實例目錄
1.項目背景:
接上一期:Python數據分析之文本處理文本相似度
PS趁熱打鐵
2.分析步驟:
(1)如何載入前幾期處理好的字典、預料包;
(2)計算tf-idf 和 lsi;
(3)轉化為lsi模型, 可用作聚類或分類;如:利用Sklearn中的模型進行文本分類。
(4)LDA模型,將每篇文檔主題以概率的形式給出。
參考資料:主題模型TopicModel:通過gensim實現LDA - 皮皮blog - CSDN博客
3.源碼(公眾號:海豹戰隊):
# coding: utf-8n# 親,轉載即同意幫推公眾號:海豹戰隊,嘿嘿......n# 數據源可關注公眾號:海報戰隊,後留言:數據nnn# In[1]:nnimport osnfrom gensim import corpora, models, similaritiesnfrom pprint import pprintnfrom matplotlib import pyplot as pltnimport loggingnlogging.basicConfig(format=%(asctime)s : %(levelname)s : %(message)s, level=logging.INFO)nnn# In[2]:nndef PrintDictionary(dictionary):n token2id = dictionary.token2idn dfs = dictionary.dfsn token_info = {}n for word in token2id:n token_info[word] = dict(n word = word,n id = token2id[word],n freq = dfs[token2id[word]]n )n token_items = token_info.values()n token_items = sorted(token_items, key = lambda x:x[id])n print(The info of dictionary: )n pprint(token_items)n print(--------------------------)nnn# In[3]:nndef Show2dCorpora(corpus):n nodes = list(corpus)n ax0 = [x[0][1] for x in nodes] # 繪製各個doc代表的點n ax1 = [x[1][1] for x in nodes]n # print(ax0)n # print(ax1)n plt.plot(ax0,ax1,o)n plt.show()nnn# In[4]:nnif (os.path.exists("../../tmp/deerwester.dict")):n dictionary = corpora.Dictionary.load(../../tmp/deerwester.dict)n corpus = corpora.MmCorpus(../../tmp/deerwester.mm)n print("Used files generated from first tutorial")nelse:n print("Please run first tutorial to generate data set")nnn# In[5]:nnPrintDictionary(dictionary)nnn# In[6]:nn# 嘗試將corpus(bow形式) 轉化成tf-idf形式n# tfidf_model = models.TfidfModel(corpus) # step 1 -- initialize a model 將文檔由按照詞頻表示 轉變為按照tf-idf格式表示n# doc_bow = [(0, 1), (1, 1),[4,3]]n# doc_tfidf = tfidf_model[doc_bow]n# doc_tfidfnnn# In[7]:nn# 將整個corpus轉為tf-idf格式ncorpus_tfidf = tfidf_model[corpus]npprint(list(corpus_tfidf))npprint(list(corpus))nnn# In[8]:nn## LSI模型 **************************************************n# 轉化為lsi模型, 可用作聚類或分類nlsi_model = models.LsiModel(corpus_tfidf, id2word=dictionary, num_topics=2)ncorpus_lsi = lsi_model[corpus_tfidf]nnodes = list(corpus_lsi)npprint(nodes)nnn# In[9]:nnlsi_model.print_topics(2) # 列印各topic的含義nnn# In[10]:nnax0 = [x[0][1] for x in nodes] # 繪製各個doc代表的點nax1 = [x[1][1] for x in nodes]nprint(ax0)nprint(ax1)nplt.plot(ax0,ax1,o)nplt.show()nnn# In[11]:nnlsi_model.save(../../tmp/model.lsi) # same for tfidf, lda, ...nlsi_model = models.LsiModel.load(../../tmp/model.lsi)nnn# In[12]:nn## LDA模型 **************************************************nlda_model = models.LdaModel(corpus_tfidf, id2word=dictionary, num_topics=2)ncorpus_lda = lda_model[corpus_tfidf]nShow2dCorpora(corpus_lsi)nnn# In[13]:nnnodes = list(corpus_lda)npprint(list(corpus_lda))nnn# In[14]:nn# 此外,還有Random Projections, Hierarchical Dirichlet Process等模型n
膠水語言博大精深,
本主只得一二為新人帶路,
老鳥可去另一專欄:Python中文社區
新手可查閱歷史目錄:
Python數據分析及可視化實例目錄
最後,別只收藏不關注哈
推薦閱讀: