http://cos.name/cn/topic/102130
應用定性數據分析包RQDA(Qualitative Data Analysis)和文挖掘框架包tm結合進行文本挖掘。
在對訪談內容或劇本、小說部分內容進行文本挖掘時,如果用不斷的剪粘保存的方法非常繁瑣而且容易漏掉一些內容。好在黃榮貴開發的RQDA包可以進行文檔管理和內容編碼及提取,大大方便了利用tm包進行文本挖掘,既提高了效率又提高了準確性,下面舉一個小例子:
1、安裝RQDA包、tm包和中文分詞軟件(分詞軟件見下面鏈接);
http://www.pinggu.org/bbs/thread-853290-1-1.html
2、裝載RQDA包並建立一個新的工程項目;
3、輸入相關文本文件;
4、進行編碼和作標記;
5、雙擊想要提取的編碼即可提取相關文本;
6、運行下面下載的程序進行文本提取、轉換、分詞、文本挖掘工作。
> gg
A corpus with 55 text documents
>
------------------------------------------------
> ### 去掉多餘空格 ####
> reuters <- tm_map(gg, stripWhitespace)
> reuters[[1]]
這個也是臨時改的?這兒應該放一個那樣的桌子。
>
------------------------------------------------
> ## 全文搜索 ##
> searchFullText(gg[[1]], "是臨[時]?改")
[1] TRUE
>
------------------------------------------------
> ### 查找以某字開頭、結尾等的詞條 ###
> stemCompletion(gg, c("財", "政", "部"))
財 政 部
"財政部就是替政府花錢的" "" ""
------------------------------------------------
> ### 元數據管理 ###
> DublinCore(reuters[[2]], "title") <- "建國60週年"
> meta(reuters[[2]])
Available meta data pairs are:
Author :
DateTimeStamp: 2010-07-15 02:06:27
Description :
Heading : 建國60週年
ID : 2
Language : eng
Origin :
>
------------------------------------------------
> ### 創建詞條-文件矩陣
>
> dtm <- DocumentTermMatrix(reuters,control = list(minWordLength=2))##最短詞兩個字
> inspect(dtm[1:2, 3:6])
A document-term matrix (2 documents, 4 terms)
Non-/sparse entries: 0/8
Sparsity : 100%
Maximal term length: 5
Weighting : term frequency (tf)
Terms
Docs 10000 12 120 1966
1 0 0 0 0
2 0 0 0 0
------------------------------------------------
> ## 操作詞條-文件矩陣 ##
> ## 1、找出最少出現過3次的詞條 ##
> findFreqTerms(dtm, 3)
[1] "政策"
------------------------------------------------
> ## 2、找出與"應該"相關度到少達0.6的詞條 ###
> findAssocs(dtm, "應該", 0.6)
0.11 應該 桌子 臨時
1.0 1.0 1.0 0.7
>
民網 >> 時政 >> 時政專題 >> 網友進言
http://politics.people.com.cn/GB/8198/138817/index.html
MetaID fname fid
1 0 公安部答覆本網網友關於輕微交通違法處罰等4問題 1
2 0 公安部答覆本網網友關於駕齡計算、異地購車上牌、老人駕車等8問題 2
3 0 公安部答覆本網網友關於如何轉回農業戶口等3問題 3
4 0 公安部回覆本網網友關於駕駛證年檢被註銷等3問題 4
5 0 公安部回覆人民網網友關於異地繳交通罰款等4問題 5
6 0 公安部回覆人民網網友關於身份證重號錯號等4問題 6
一、出現5次以上的詞條
----------------------------------------------------------------------------
1、根據編碼“網友”分析:
> findFreqTerms(dtm, 5)
[1] "駕駛" "身份證" "問題"
----------------------------------------------------------------------------
2、根據編碼“公安部迴應”分析:
> findFreqTerms(dtm, 5)
[1] "辦理" "部門" "公安" "管理" "規定" "機動車" "機關" "交通"
[9] "安全" "不得" "車輛" "道路" "駕駛" "駕駛證" "汽車" "實施"
[17] "使用" "小型" "營運" "載貨" "載客" "證明" "工作" "法律"
[25] "公民" "居民" "社會" "身份" "身份證" "條件" "相關" "行爲"
[33] "證件" "措施" "違法" "應當" "公安部" "信息"
**************************************************************
二、找出與“駕駛”相關達70%以上的詞條
----------------------------------------------------------------------------
1、根據編碼“網友”分析:
駕駛 公安部 能否 規定 駕照 汽車
1.00 0.87 0.80 0.79 0.78 0.72
2、根據編碼“公安部迴應”分析:
駕駛 需要 期限 證明 小型 法律 使用 中型 駕駛證 依法 檢查
1.00 0.95 0.90 0.86 0.84 0.83 0.80 0.79 0.77 0.77 0.75
有效 超過
0.75 0.72
MetaID fname fid
1 0 公安部答覆本網網友關於輕微交通違法處罰等4問題 1
2 0 公安部答覆本網網友關於駕齡計算、異地購車上牌、老人駕車等8問題 2
3 0 公安部答覆本網網友關於如何轉回農業戶口等3問題 3
4 0 公安部回覆本網網友關於駕駛證年檢被註銷等3問題 4
5 0 公安部回覆人民網網友關於異地繳交通罰款等4問題 5
6 0 公安部回覆人民網網友關於身份證重號錯號等4問題 6
對上面的數據改爲將每條迴應爲研究對象進行文檔聚類分析,結果如下:
綜合上面兩種聚類分析可以判斷:公安部負責對人民網網民進行迴應的工作人員有兩名,因爲每個人的寫作用詞習慣是比較固定的。
-
對三位房地產大佬在搜房網博客近期文章的分析:
-
標題:
-
> txt
MetaID fname fid ID
1 0 穿越“鬼門關”登山者視界4(王) 3 1
2 0 美麗的建築網友交流42(王) 7 2
3 0 如何瞭解日本民族網上交流43(王) 8 3
> txt
MetaID fname fid ID
1 0 從發改委的文件看政策的變化(任) 4 1
2 0 該不該降價(任) 6 2
3 0 聽老柳侃管理(任) 11 3
4 0 穩定、明確的政策預期更爲重要(任) 12 4
5 0 先拆還是先建,這是一門藝術(任) 13 5
6 0 幸福指數——再次寫給八零後(任) 16 6
> txt
MetaID fname fid ID
1 0 IPAD現象預示了社會結構的變化(潘) 1 1
2 0 SOHO中國進駐上海外灘(潘) 2 2
3 0 房地產業要做受人尊重的行業(潘) 5 3
4 0 商業地產與住房是兩個完全不同的市場(潘) 9 4
5 0 世界正經歷分娩之陣痛(潘) 10 5
6 0 現在中國房地產市場上“尖叫”聲一片(潘) 14 6
7 0 信仰改變了我的生命(潘) 15 7
8 0 銀河SOHO和光華路SOHO2通過LEED預認證(潘) 17 8
9 0 銀河SOHO開盤三天銷售46.75億元(潘) 18 9
10 0 致《酥油》作者: 你的愛和我們的感受構成世界的力量(潘) 19 10
> -
-
結果:
-
> ## 任志強最喜歡的用詞:
> inspect(dtm_rzq[,j])
A document-term matrix (6 documents, 10 terms)
Non-/sparse entries: 41/19
Sparsity : 32%
Maximal term length: 2
Weighting : term frequency (tf)
Terms
Docs 價格 企業 租賃 發展 改革 沒有 社會 一代 知道 中國
1 0 1 5 4 7 0 3 0 0 6
2 31 2 0 3 1 7 4 0 4 15
3 0 42 0 4 0 5 4 0 0 2
4 9 1 0 0 0 7 4 0 3 4
5 1 0 25 3 0 6 4 0 2 4
6 1 5 0 25 48 30 55 41 35 51
> ## 潘石屹最喜歡的用詞:
> inspect(dtm_psy[,j])
A document-term matrix (10 documents, 9 terms)
Non-/sparse entries: 49/41
Sparsity : 46%
Maximal term length: 4
Weighting : term frequency (tf)
Terms
Docs 一個 商業 上海 外灘 項目 房地產 市場 土地 soho
1 17 12 0 0 0 4 4 1 1
2 6 17 15 27 21 1 2 2 6
3 8 0 0 0 2 11 2 10 0
4 6 16 0 0 2 0 5 0 13
5 10 2 0 0 6 0 0 0 9
6 5 4 3 0 1 17 37 15 0
7 5 0 0 0 1 0 1 0 0
8 1 0 0 0 8 0 0 0 7
9 1 15 0 0 4 0 9 0 18
10 7 0 0 0 0 0 0 1 0
> ## 王石最喜歡的用詞
> inspect(dtm_ws[,j])
A document-term matrix (3 documents, 16 terms)
Non-/sparse entries: 17/31
Sparsity : 65%
Maximal term length: 2
Weighting : term frequency (tf)
Terms
Docs 冰川 穿越 攀登 融化 珠峯 處理 東京 焚燒 垃圾 等級 瞭解 日本 喜歡 相撲
1 18 6 4 8 4 0 0 0 0 0 0 0 0 0
2 0 0 0 0 0 4 4 8 11 0 0 1 0 0
3 0 0 0 0 0 0 0 0 0 4 4 7 4 10
Terms
Docs 運動 秩序
1 0 0
2 0 0
3 4 6 -
-
由此看來王石仍然在到處玩兒,怪不得從萬科A到萬科B,再到萬科債券08G1、08G2都跌的一塌糊塗。
任志強的興趣仍在研究國家政策,憂國憂民啊!
老潘的工作重點已經轉到上海的商業地產了。
-
好吧,現在再用支持向量機的方法對上面的數據建模,看是否能分辨出某些話是誰說的:
> library(e1071)
> ## 生成訓練用的數據 ##
………………
> tt <- rbind(tt,tt1)
>
> tt[is.na(tt)]<-0
> tt[,"作者"] <- factor(tt[,"作者"])
> model <- svm(作者 ~ ., data = tt[c(1:4,7:14,17:18),], kernel = "sigmoid")
> summary(model)
Call:
svm(formula = 作者 ~ ., data = tt[c(1:4, 7:14, 17:18), ], kernel = "sigmoid")
Parameters:
SVM-Type: C-classification
SVM-Kernel: sigmoid
cost: 1
gamma: 0.01666667
coef.0: 0
Number of Support Vectors: 10
( 4 4 2 )
Number of Classes: 3
Levels:
潘石屹 任志強 王石
> ## 模型擬合測試 ##
> ## 訓練集(樣本內)擬合 ##
> pred <- predict(model, tt[c(1:4,7:14,17:18),1:length(hh)])
> table(pred, tt[c(1:4,7:14,17:18),"作者"])
pred 潘石屹 任志強 王石
潘石屹 7 0 0
任志強 1 4 0
王石 0 0 2
> ## 測試集(樣本外)預測 ##
> pred <- predict(model, tt[c(5:6,15:16,19),1:length(hh)])
> table(pred, tt[c(5:6,15:16,19),"作者"])
pred 潘石屹 任志強 王石
潘石屹 2 0 0
任志強 0 2 0
王石 0 0 1訓練集中有一個錯的,但預測集中全中。
*******************************************************
哪麼隨機找兩段他們的話看能判斷出嗎?>對了,是《珠峯零公里口述之四 (2010-4-9 16:06:22)》中的一段話。
> test <- c("昨天休息了一天,駐地村子現在很大,二年前很小,自首位成功登上珠穆朗瑪峯的探險家埃德蒙.希拉里組織義工建立學校醫療診所,當地條件開始顯著改善,目前這裏三分之一的當地人已經移民國外,境外一些人士建立了一些家庭小旅館,衛生條件不錯,新西蘭獅子會建立了一家小衛生所,以改善當地的醫療條件。這些讓我體會到登山這項運動對當地生活條件改善的有益影響。")
>
………………
> tt1[,c(test_h)] <- test_tt[,c(test_h)]
> tt1[is.na(tt1)]<-0
> predict(model, tt1)
1
王石
Levels: 潘石屹 任志強 王石
>
++++++++++++++++++++++++++++++++++++++++> test <- c("2007年出臺的“第二套住房的信貸”新政,讓中國的房地產市場調頭直下,在“兩防”的政策推力和美國的金融危機雙重作用之下,讓中國的宏觀經濟也隨之調頭直下,GDP快速下降到6.3%,從而讓中國政府不得不用四萬億元投資、放量的貨幣信貸和解封“第二套住房信貸”改爲0.7倍信貸降息和對改善性住房(實際的第二套)信貸給以支持,才讓中國的房地產和宏觀經濟從谷底翻轉恢復到保八之上。也對了,是《何需分清幾套房 (2010-4-29 9:38:52) 》中的一段話
+ ")
……………………
> tt1[,c(test_h)] <- test_tt[,c(test_h)]
> tt1[is.na(tt1)]<-0
> predict(model, tt1)
1
任志強
Levels: 潘石屹 任志強 王石
>
-
那麼下面這段文字是誰寫的呢?
test <- c("經常有人問我第一桶金怎麼來的,從哪裏得到的,有多少。其實每次有人問我這個問題時,我都想說,人的第一桶金是自信。即使你沒錢也不要怕,自信就是你的資本。也有人在自信前面加了一個不好的修飾語,叫盲目自信,我不太愛聽。我說過很多次自我的害處,但我認爲與自我有點關係的不多的好東西之一,就是自信。自信當然有自我意識,還有信,相信的信。相信,是正面的、健康的。要相信自己。一個相信自己的人才會相信他人,相信未來。")
> predict(model, tt1)
1
潘石屹
Levels: 潘石屹 任志強 王石太神奇了!潘石屹——《自信是人生第一桶金》的一段。見下面的鏈接: