1. 程式人生 > >[python] LDA處理文件主題分佈程式碼入門筆記

[python] LDA處理文件主題分佈程式碼入門筆記

以前只知道LDA是個好東西,但自己並沒有真正去使用過。同時,關於它的文章也非常之多,推薦大家閱讀書籍《LDA漫遊指南》,最近自己在學習文件主題分佈和實體對齊中也嘗試使用LDA進行簡單的實驗。這篇文章主要是講述Python下LDA的基礎用法,希望對大家有所幫助。如果文章中有錯誤或不足之處,還請海涵~


一. 下載安裝

  1. Loading dataset...  
  2. Fitting LDA models with tf features, n_samples=2000 and n_features=1000...  
  3. done in 0.733s.  
  4. Topics in LDA model:  
  5. Topic #0:  
  6. 000 war list people sure civil lot wonder say religion america accepted punishment bobby add liberty person kill concept wrong  
  7. Topic #1:  
  8. just reliable gods consider required didn war makes little seen faith default various civil motto sense currency knowledge belief god  
  9. Topic #2:  
  10. god omnipotence power mean rules omnipotent deletion policy non nature suppose definition given able goal nation add place powerful leaders  
  11. ....  
model_parameter.dat 儲存模型訓練時選擇的引數 
wordidmap.dat 儲存詞與id的對應關係,主要用作topN時查詢 
model_twords.dat 輸出每個類高頻詞topN個 
model_tassgin.dat 輸出文章中每個詞分派的結果,文字格式為詞id:類id 
model_theta.dat 輸出文章與類的分佈概率,文字一行表示一篇文章,概率1 概率2..表示文章屬於類的概率 
model_phi.dat 輸出詞與類的分佈概率,是一個K*M的矩陣,K為設定分類的個數,M為所有文章的詞的總數
但是短文字資訊還行,但使用大量文字內容時,輸出文章與類分佈概率幾乎每行資料存在大量相同的,可能程式碼還存在BUG。

下面是介紹使用pip install lda安裝過程及程式碼應用:
  1. pip install lda  

二. 官方文件

1.載入資料

  1. import numpy as np  
  2. import lda  
  3. import lda.datasets  
  4. # document-term matrix
  5. X = lda.datasets.load_reuters()  
  6. print("type(X): {}".format(type(X)))  
  7. print("shape: {}\n".format(X.shape))  
  8. print(X[:5, :5])  
  9. # the vocab
  10. vocab = lda.datasets.load_reuters_vocab()  
  11. print("type(vocab): {}".format(type(vocab)))  
  12. print("len(vocab): {}\n".format(len(vocab)))  
  13. print(vocab[:5])  
  14. # titles for each story
  15. titles = lda.datasets.load_reuters_titles()  
  16. print("type(titles): {}".format(type(titles)))  
  17. print("len(titles): {}\n".format(len(titles)))  
  18. print(titles[:5])  
載入LDA包資料集後,輸出如下所示:
X矩陣為395*4258,共395個文件,4258個單詞,主要用於計算每行文件單詞出現的次數(詞頻),然後輸出X[5,5]矩陣;
vocab為具體的單詞,共4258個,它對應X的一行資料,其中輸出的前5個單詞,X中第0列對應church,其值為詞頻;
titles為載入的文章標題,共395篇文章,同時輸出0~4篇文章標題如下。
  1. type(X): <type 'numpy.ndarray'>  
  2. shape: (395L4258L)  
  3. [[ 10100]  
  4.  [ 70200]  
  5.  [ 000110]  
  6.  [ 60100]  
  7.  [ 000214]]  
  8. type(vocab): <type 'tuple'>  
  9. len(vocab): 4258
  10. ('church''pope''years''people''mother')  
  11. type(titles): <type 'tuple'>  
  12. len(titles): 395
  13. ('0 UK: Prince Charles spearheads British royal revolution. LONDON 1996-08-20',  
  14.  '1 GERMANY: Historic Dresden church rising from WW2 ashes. DRESDEN, Germany 1996-08-21',  
  15.  "2 INDIA: Mother Teresa's condition said still unstable. CALCUTTA 1996-08-23",  
  16.  '3 UK: Palace warns British weekly over Charles pictures. LONDON 1996-08-25',  
  17.  '4 INDIA: Mother Teresa, slightly stronger, blesses nuns. CALCUTTA 1996-08-25')  
From the above we can see that there are 395 news items (documents) and a vocabulary of size 4258. The document-term matrix, X, has a count of the number of occurences of each of the 4258 vocabulary words for each of the 395 documents.
下面是測試文件編號為0,單詞編號為3117的資料,X[0,3117]:
  1. # X[0,3117] is the number of times that word 3117 occurs in document 0
  2. doc_id = 0
  3. word_id = 3117
  4. print("doc id: {} word id: {}".format(doc_id, word_id))  
  5. print("-- count: {}".format(X[doc_id, word_id]))  
  6. print("-- word : {}".format(vocab[word_id]))  
  7. print("-- doc  : {}".format(titles[doc_id]))  
  8. '''''輸出 
  9. doc id: 0 word id: 3117 
  10. -- count: 2 
  11. -- word : heir-to-the-throne 
  12. -- doc  : 0 UK: Prince Charles spearheads British royal revolution. LONDON 1996-08-20 
  13. '''

2.訓練模型

其中設定20個主題,500次迭代
  1. model = lda.LDA(n_topics=20, n_iter=500, random_state=1)  
  2. model.fit(X)          # model.fit_transform(X) is also available 

3.主題-單詞(topic-word)分佈

程式碼如下所示,計算'church', 'pope', 'years'這三個單詞在各個主題(n_topocs=20,共20個主題)中的比重,同時輸出前5個主題的比重和,其值均為1。
  1. topic_word = model.topic_word_  
  2. print("type(topic_word): {}".format(type(topic_word)))  
  3. print("shape: {}".format(topic_word.shape))  
  4. print(vocab[:3])  
  5. print(topic_word[:, :3])  
  6. for n in range(5):  
  7.     sum_pr = sum(topic_word[n,:])  
  8.     print("topic: {} sum: {}".format(n, sum_pr))  
輸出結果如下:
  1. type(topic_word): <type 'numpy.ndarray'>  
  2. shape: (20L4258L)  
  3. ('church''pope''years')  
  4. [[  2.72436509e-062.72436509e-062.72708945e-03]  
  5.  [  2.29518860e-021.08771556e-067.83263973e-03]  
  6.  [  3.97404221e-034.96135108e-062.98177200e-03]  
  7.  [  3.27374625e-032.72585033e-062.72585033e-06]  
  8. 相關推薦

    [python] LDA處理主題分佈程式碼入門筆記

    以前只知道LDA是個好東西,但自己並沒有真正去使用過。同時,關於它的文章也非常之多,推薦大家閱讀書籍《LDA漫遊指南》,最近自己在學習文件主題分佈和實體對齊中也嘗試使用LDA進行簡單的實驗。這篇文章主要是講述Python下LDA的基礎用法,希望對大家有所幫助。如果文章中有錯誤或不足之處,還請海涵~

    LDA主題生成模型)--零基礎(一)

    本文目的在於用最簡單的語言,給大家介紹LDA的原理以及使用方法。 首先,我們這裡有M篇文件,每篇文件有個單詞,如果文件是英文,就是每個單獨的單詞;如果是中文,則需要分詞處理,分詞處理又需要用已有的分詞的演算法,比較複雜,所以我們這裡先只考慮英文。我們現在想知道,每篇文章,

    python中對處理

    and 刪除 eva 改密 名稱 賬號 字典 oat 行為 1.當文件中存放的用戶名的密碼,是以字符串的形式存儲時,怎麽進行讀取和操作 eg:MLing,123456   niuniu,234567   luoluo,345678 方法一:將字符串轉為字典 1)字典查找的效

    python基礎之處理

    二進制 table 註解 移動 color 截斷 新建 讀取 如果 # r模式,默認模式,文件不存在則報錯 # w模式,文件存在覆蓋,文件不存在則創建 # a模式,文件不存在則創建,文件存在不會覆蓋,寫內容是追加的方式. # 文件處理--讀 f = open(‘a.t

    Python成長之路【第五篇】:Python基礎之處理

    閱讀 關註 src 文件路徑 程序 opened IT 寫入 文件操作 一、文件操作 1、介紹 計算機系統分為:計算機硬件,操作系統,應用程序三部分。 我們用python或其他語言編寫的應用程序若想要把數據永久保存下來,必須要保存於硬盤中,這就涉及到應用程序要操作硬件,

    python 中有關處理

    subclass 也會 eas metaclass 註意 can 定位 acc instance Python的文件處理 打開文件f = open (“path”,”mode”) r 模式以讀的方式打開,定位到文件開頭 , 默認的 mode。文件不存在直接報錯,文件只能讀

    Python-對Pcap進行處理,獲取指定TCP流

    serve cap dscp 解析 地址 沒有 ont wikipedia 校驗和 通過對TCP/IP協議的學習,本人寫了一個可以實現對PCAP文件中的IPV4下的TCP流提取,以及提取指定的TCP流,鑒於為了學習,沒有采用第三方包解析pcap,而是對byt

    selenium+python自動化98--下載彈窗處理(PyKeyboard)

    and time 操作方法 3.6 事件 技術分享 一個 inter blog 前言 在web自動化下載操作時,有時候會彈出下載框,這種下載框不屬於web的頁面,是沒辦法去定位的(有些同學一說到點擊,腦袋裏面就是定位!定位!定位!) 有時候我們並不是非要去定位到這個按鈕再去

    只需一行程式碼python實現docx轉html頁面!

    說到word文件轉html的,網上一搜一大把,各種線上word轉html頁面,使用起來也方便。但是在實際專案中要使用的話,需要自己開發,這裡就提供一個簡單的方法。 學習Python中有不明白推薦加入交流群            

    python初識05-處理

    文本文件 編輯器 硬盤 計算 符號 字符 編寫程序 這就是 識別   文件是操作系統中的一個虛擬概念。文件是以計算機硬盤為載體存儲在計算機上的信息集合,文件可以是文本文檔、圖片、程序,等等。在系統運行時,計算機以進程為基本單位進行資源的調度和分配;而在用戶進行的輸入、輸出中

    運用好Python處理的小技巧,讓你成為女神心中superstar!

    今天小編給大家帶來了一篇,主要運用Python_docx模組處理word文件的基本技巧來介紹,其中最主要的是如何對圖片進行提取和寫入。   python已有幾個模組可處理word文件、excel表格、以及ppt簡報。首先,彙總列出各模組對不同版本檔案的

    LDA主題發現R

    1.# 載入rJava、Rwordseg、tm、lda庫 library(rJava); library(Rwordseg); library("lda", lib.loc="~/R/win-library/3.3") library("tm",

    Python處理本文、進行查找

    描述 eba 位置 匹配 exist 損壞 冒號 back 獲取 去年換了一部手機,老手機終於光榮退休了,但是裏面的便簽裏還存有很多文字記錄,這個手機還不能備份到雲,只能將每個便簽保留為一個個的文本文件,我想要把所有的文本文件歸到一個文本文件中,手動操作太麻煩了,剛好去年學

    Python之路-操作(py)

    句柄 接口 編碼 操作 strong span 操作系統 使用 color 文件操作的基本步驟:   1.打開文件:f=open(‘filename‘),with open(‘filename‘) as f   2.操作文件:增,刪,改,查   3.關閉文件:f.close

    Python的.py轉變為可執行文.exe

    顯示錯誤 div ron 錯誤 .exe 執行 head python環境 color python是個很強大的工具,但我們生成的.py文件在沒有Python環境下運行就需要轉為.exe文件,我使用的是PyInstaller 1、安裝PyInstaller: pip ins

    linux之系統編碼,python編碼,編碼

    python 編碼 文件編碼 linux編碼 1 前言如果你對python2和python3的中編解碼很清楚,這裏我認為你很清楚。具體參考文檔:“python2 encode和decode函數說明.docx”“字符編碼——從ASCII開始.docx”以上所有文檔均為本地文檔。2

    Python基礎之操作流與函數

    默認 true 格式 nbsp 文件 內容 print 寫入 追加 一.文件操作 打開文件的方式有: r,只讀模式(默認) w,只寫模式(不可讀;不存在則創建;存在則刪除內容;) a,追加模式(可讀; 不存在則創建;存在則只追加內容;) "+"表示可以同時讀寫某個文

    Python常用的讀寫操作和字符串操作

    dir info load char 編碼 lines resolve values ror 文件讀寫操作 fileUtils.py # -*- coding: utf-8 -*- import os def getFileList(dir, fileList=[]):

    'mingw32-make' 不是內部或外部命令,也不是可運行的程序 或批處理。(的解決方案)

    windows 外部命令 搜索 方案 win mage -m 分享 image 問題如上。 解決方案:找到mingw32-make,方法是在計算中搜索 然後將其復制到C:Windows\System32下,需要管理員權限才能復制的情況下直接點繼續。然後就可以了。 

    使用Python生成源的兩種方法

    mob zhang mod pri tid 串接 數字 能夠 package 利用Python的字符串處理模塊,開發者能夠編寫腳本用來生成那些格式同樣的C、C++、JAVA源程序、頭文件和測試文件,從而避免大量的反復工作。本文概述兩種利用Python string類生成