1. 程式人生 > >LDA文件主題發現R

LDA文件主題發現R

1.# 載入rJava、Rwordseg、tm、lda庫

library(rJava);  
library(Rwordseg); 
library("lda", lib.loc="~/R/win-library/3.3")
library("tm", lib.loc="~/R/win-library/3.3")

2.# == 讀入資料

lecture=read.csv("E:\\worldcup_test.txt",sep=",");  

1.用正則剔除URL

res=lecture[lecture!=" "];  
 res=gsub(pattern="http://t.cn/[A-Za-z0-9]+$+"
,"",res); res=gsub(pattern="[我|你|的|了|是]","",res);

2.jieba

library(jiebaR) #載入

3.加入詞典,以及停用詞,去除標點

cutter <- worker(bylines = T,user = "G:\\hhe\\15W.txt",stop_word = "G:\\hhe\\dtop.txt")

4.分詞

comments_seg <- cutter["G:\\hhe\\8yue2.txt"]

5.讀入分詞後的檔案

comments<- readLines("G:\\hhe\\8yue2.segment.2017-05-04_19_40_41.txt"
,encoding="UTF-8")

6.向量化

comments <- as.list(comments) #將向量轉化為列表
doc.list <- strsplit(as.character(comments),split=" ") #將每行文字,按照空格分開,每行變成一個詞向量,儲存在列表裡

7.建立一個詞典,並給每個詞取一個編號:

term.table <- table(unlist(doc.list)) 
#這裡有兩步,unlist用於統計每個詞的詞頻;table把結果變成一個交叉表式的factor,原理類似python裡的詞典,key是詞,value是詞頻.

8.排序

term.table <- sort(term.table, decreasing = TRUE) #按照詞頻降序排列

9.為了提高建模效果,我們可以將單字去掉,同時也可以把出現次數少於5次的詞去掉。

del <- term.table < 5| nchar(names(term.table))<2   #把不符合要求的篩出來
term.table <- term.table[!del]   #去掉不符合要求的
vocab <- names(term.table)    #建立詞庫

10.把文字的格式整理成lda包建模需要的格式

get.terms <- function(x) {
  index <- match(x, vocab)  # 獲取詞的ID
  index <- index[!is.na(index)]  #去掉沒有查到的,也就是去掉了的詞
  rbind(as.integer(index - 1), as.integer(rep(1, length(index))))   #生成矩陣結構
}
documents <- lapply(doc.list, get.terms)

11.引數設定
這些為LDA建模需要先設定的幾個引數,關於alpha、eta的設定和作用,引用樑斌penny的一段話:

其中α,大家可以調大調小了試試看,調大了的結果是每個文件接近同一個topic,即讓p(wi|topici)發揮的作用小,這樣p(di|topici)發揮的作用就大。其中的β,調大的結果是讓p(di|topici)發揮的作用變下,而讓p(wi|topici)發揮的作用變大,體現在每個topic更集中在幾個詞彙上面,或者而每個詞彙都儘可能的百分百概率轉移到一個topic上。

接下來是主題建模的過程,以文字量大小和迭代次數多少,用時會不同,多則幾十分鐘,少則一兩分鐘。

K <- 10   #主題數
G <- 5000    #迭代次數
alpha <- 0.10   
eta <- 0.02

12.開始建模,以文字量大小和迭代次數多少,用時會不同

 library(lda)
 set.seed(357) 
fit <- lda.collapsed.gibbs.sampler(documents = documents, K = K, vocab = vocab, num.iterations = G, alpha = alpha, eta = eta, initial = NULL, burnin = 0, compute.log.likelihood = TRUE)
13.視覺化引數
theta <- t(apply(fit$document_sums + alpha, 2, function(x) x/sum(x))) #文件—主題分佈矩陣

phi <- t(apply(t(fit$topics) + eta, 2, function(x) x/sum(x))) #主題-詞語分佈矩陣

term.frequency <- as.integer(term.table) #詞頻

doc.length <- sapply(documents, function(x) sum(x[2, ])) #每篇文章的長度,即有多少個詞

14.視覺化

library(LDAvis)

json <- createJSON(phi = phi, theta = theta,

doc.length = doc.length, vocab = vocab,

term.frequency = term.frequency)#json為作圖需要資料,下面用servis生產html檔案,通過out.dir設定儲存位置

serVis(json, out.dir = './vis', open.browser = FALSE)

15為了解決亂碼的問題,我們需要將其中的lda.json檔案的編碼改成UTF8格式,你可以手動改,也可以用R來自動改。

writeLines(iconv(readLines("./vis/lda.json"), from = "GBK", to = "UTF8"),

file("./vis/lda.json", encoding="UTF-8"))

相關推薦

LDA主題發現R

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

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

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

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

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

讀《基於主題結構的關鍵詞抽取方法研究》有感(一)

沒錯,這是一篇讀後感。今天拜讀了劉知遠老師的博士畢業論文。 一、研究內容: 1、基於文件內部資訊,利用文件的詞聚類演算法構建文件主題,進行關鍵詞抽取。 2、基於文件外部資訊,利用隱含主題模型構建文件主題,進行關鍵詞抽取。 3、綜合利用隱含主題模型和文件結構資訊,進行關鍵詞抽取。 4、

Confluence 6 主題合併問答

在 Confluence 官方 前期釋出的訊息 中,文件主題在 Confluence 6.0 及其後續版本中已經不可用。我們知道你可能對這個有很多好好奇的問題,因此我們在這裡設定了一個問答用於幫助你將這個主題升級到 Confluence 6.0。 如果你還有其他問題,你可以在

android 項目R丟失解決的方法

系統 size error tar XML ror ont androi col R文件丟失的原因有非常多,這裏提供幾種解決的方法: 1. 選中項目,點擊 Project — Clean , 清理一下項目。 2. 選中項目,右鍵 選擇 Android Tools —

作業一:登錄界面(優化,能讀取鎖定中的任意用戶名,一旦發現所輸入的用戶名是鎖定中的,立即告知並跳出循環)

col cnblogs 循環 lin auth pen str flag div 1 #Author:AXIN 2 #功能:登錄窗口 3 # 1.輸入用戶名,密碼 4 # 2.認證成功後輸出提示信息,表示歡迎 5 # 3.輸錯

R語言相關的操作

文件權限 min git -1 長度 rename path ech 作用 1. 文件系統介紹 R語言對文件系統的操作,包括文件操作和目錄操作,函數API都定義在base包中。 2. 目錄操作 2.1 查看目錄 查看當前目錄下的子目錄。 # 啟動R程序 ~

R中讀取,找不到路徑問題 No such file or directory

con tracking air csdn rac rect 路徑 路徑和 data R中讀取文件,找不到路徑問題 No such file or directory 近日,讀取文件時。出現例如以下問題 > passenger = read.c

老男孩教育每日一題-第82天-發現系統只讀了,是什麽原因?如何解決?

文件系統 只讀 每日一題 參考答案目前已知造成硬盤分區只讀的可能原因有:文件系統錯誤內核相關硬件驅動bug磁盤壞道HBA卡故障RAID卡故障解決方法:1.重啟系統後看看是否可以自動恢復2.使用fdisk修復3.卸載只讀的分區,然後重新mount掛載mount -o remount,rw /網友回答

項目GEN包下的R丟失

list lis http r文件丟失 5% ongl aid 文件丟失 hao123 %E5%85%B3%E4%BA%8E%E6%8E%A7%E4%BB%B6%E7%9A%84%E5%8A%A8%E7%94%BB%E7%BC%A9%E6%94%BE%E9%97%AE%E9

操作系統-目錄(又發現一個數據結構)

spa 文件目錄 height 數據結構 png 操作系統 src title 技術分享 另外一種回答 ——————————————————- 操作系統-文件目錄(又發現一個數據結構)

R讀取excel

方法 讀取 pen jar 出現 很多 顯示 數據 lan 2017.09.05 我一個下午的成果啊啊啊啊,看看失敗 不禁感嘆一聲,失敗的路真是多啊!!!! 一.安裝xlsx包 下面具體講一講怎麽弄的(太笨了,所以學得慢,需要一步一步的來) 用R讀取excel文件,

【轉】python打開方式詳解——a、a+、r+、w+區別

不能 mos open col strong cnblogs span ast last 原文地址:http://blog.csdn.net/ztf312/article/details/47259805 第一步 排除文件打開方式錯誤: r只讀,r+讀寫,不創建 w新建只寫

R數據接口_CSV

als 3.2 接口 frame row 文本 lte star creat 獲取和設置工作目錄 可以使用getwd()函數來檢查R工作區指向哪個目錄,使用setwd()函數設置新的工作目錄。 # Get and print current working director

R讀 txt

clas rck 分隔符 ota 表示 community truct utf-8 post house<-read.table("house_data.txt", header = TRUE, sep=‘|‘,fileEncoding =‘UTF-8‘)id|hou

python讀寫 - r+ open讀寫實際表現

打開 而不是 imp 指定 tell int 文件打開 aid end 先說結論: 文件r+ open:   1. write()不能實現插入寫,它總是覆蓋寫或附加寫;   2. 如果文件一打開即write(),則從開頭覆蓋寫;   3. 如果文件一打開,用f.seek()

expect+scp傳輸發現丟失

如果 都是 背景 post 大小 鏈接 就是 原來 測試 背景 使用expect+scp去跨機器傳輸文件,(別問我為什麽,因為公司的測試機器都是通過堡壘機的,無法繞開堡壘機,只能暫時使用這個方法了),結果發現從A傳遞到B的tar.gz文件大小不一致了的,當時心裏MMP了

R語言:提取路徑中的名字符串(basename函數)

lena art star filename div base none gpo highlight 假設存在路徑C:/coverage/Homo_sapiens.sort.add_exon1_coverage.txt,欲提取Homo_sapiens.sort.add_ex

eclipse向tomcat部署站點發現沒有class

而不是 uil 指向 最終 會有 tomcat部署 現在 tomat 部署 其實大部分解決辦法在網上都有的,例如這裏: https://blog.csdn.net/shiyuehit/article/details/53262807 eclipse下無法自動編譯或編譯失敗等