1. 程式人生 > >R+tmcn筆記︱tmcn包的基本內容以及李艦老師R語言大會展示內容摘錄

R+tmcn筆記︱tmcn包的基本內容以及李艦老師R語言大會展示內容摘錄

每每以為攀得眾山小,可、每每又切實來到起點,大牛們,緩緩腳步來俺筆記葩分享一下吧,please~

———————————————————————————


install.packages("tmcn", repos = "http://R-Forge.R-project.org")

tmcn 包是一個進行中文文字挖掘的R包。包含了中文編碼處理、文字操作、 文字挖掘模型和演算法的一些函式。主要針對目前可用的 R 資源的不足而開發的。

目前最常用的文字挖掘包是 tm 包,該包已經成了事實上的分析標準, 幾乎所有的其他 R 包都是基於這個框架的。但是 tm 包具有一些缺陷, 在R中進行分析的時候不是很方便。

最明顯的問題是中文支援得不夠好, 其函式的設計並沒有考慮到國際化的需求和 UTF-8 的支援,很多函式操作中文時不方便。 此外,tm 包的開發大量使用了 S3 的面向物件方法,其最大的價值是為後續的開發者提供了介面, 但是這些物件對於使用者來說並沒有什麼便利,增加了學習的複雜度, 而且由於 S3 封裝性上天然的缺陷,初學者容易出錯而且提示不清楚。另外, tm 包及相關體系完全基於文件詞條矩陣的資料結構,在大量資料的工程化實現方面非常便利, 但是所有的這些包包括 tm 在內並沒有簡單的能夠高效能運算的機制, 該設計的優勢在R中完全沒有被體現。

        基於目前 R 中可用的文字挖掘資源的不足,tmcn 試圖去解決這些問題, 先從中文支援開始,然後逐漸更新去解決各種問題,但是也會考慮到 tm 的框架, 在框架之外進行一些有益的補充。

(摘錄自tmcn官方主頁:http://jianl.org/cn/R/tmcn.html)

後續的李艦老師還基於tmcn模組開發了,CRF模組以及word2vec模組

CRF模組可見李艦老師R語言大會分享內容;


————————————————————————————————————————

一、字元編碼UTF-8 GBK unicode

GB2312(CP936)+改進=GBK--→unicode--→UTF-8

1、GBK

1993年,Unicode 1.1版本推出,收錄中國大陸臺灣日本韓國通用字符集漢字,總共有20,902個。

中國大陸訂定了等同於Unicode 1.1版本的“GB 13000.1-93”“資訊科技通用多八位編碼字符集(UCS)第一部分:體系結構與基本多文種平面”。

由於GB 2312-80只收錄6763個漢字,有不少漢字,如部分在GB 2312-80推出以後才簡化的漢字(如“囉”),部分人名用字(如中國前總理朱鎔基的“鎔”字),臺灣及香港使用的繁體字日語朝鮮語漢字等,並未有收錄在內。於是廠商微軟利用GB 2312-80未使用的編碼空間,收錄GB 13000.1-93全部字元制定了GBK編碼。

根據微軟資料,GBK是對GB2312-80的擴充套件,也就是

CP936字碼表(Code Page 936)的擴充套件(之前CP936和GB 2312-80一模一樣),最早實現於Windows 95簡體中文版。雖然GBK收錄GB 13000.1-93的全部字元,但編碼方式並不相同;因為GBK向下相容GB2312,而GB 13000.1-93等同於Unicode 1.1,二者的編碼方式完全不相容。

漢字內碼擴充套件規範,稱GBK,全名為《漢字內碼擴充套件規範(GBK)》

(來自維基百科)

列舉幾個GBK的編碼:

81 0   1   2   3   4   5   6   7   8   9   A   B   C   D   E   F
4 丂  丄  丅  丆  丏  丒  丗  丟  丠  両  丣  並  丩  丮  丯  丱  
5 丳  丵  丷  丼  乀  乁  乂  乄  乆  乊  乑  乕  乗  乚  乛  乢  
6 乣  乤  乥  乧  乨  乪  乫  乬  乭  乮  乯  乲  乴  乵  乶  乷  
7 乸  乹  乺  乻  乼  乽  乿  亀  亁  亂  亃  亄  亅  亇  亊  
8 亐  亖  亗  亙  亜  亝  亞  亣  亪  亯  亰  亱  亴  亶  亷  嚲  
9 亹  亼  亽  亾  仈  仌  仏  仐  仒  仚  仛  仜  仠  仢  仦  仧  
A 仩  仭  仮  仯  仱  仴  仸  仹  仺  仼  仾  伀  伂  伃  伄  伅  
B 伆  伇  伈  伋  伌  伒  伓  伔  伕  伖  伜  伝  俥  俔  伨  伩  
C 伬  伭  伮  伱  伳  伵  伷  伹  伻  伾  伿  佀  佁  佂  佄  佅  
D 佇  佈  佉  佊  佋  佌  佒  佔  佖  佡  佢  佦  佨  佪  佫  佭  
E 佮  佱  佲  併  佷  佸  佹  佺  佽  侀  侁  侂  侅  來  侇  侊  
F 侌  侎  侐  侒  侓  侕  侖  侘  侙  侚  侜  侞  侟  価  侢  

2、UTF-8

網際網路的普及,強烈要求出現一種統一的編碼方式。UTF-8就是在網際網路上使用最廣的一種Unicode的實現方式。其他實現方式還包括UTF-16(字元用兩個位元組或四個位元組表示)和UTF-32(字元用四個位元組表示),不過在網際網路上基本不用。重複一遍,這裡的關係是,UTF-8是Unicode的實現方式之一。

GBK轉化為UTF-8一定要經過unicode的過程。

————————————————————————————————————————

二、tmcn包的內容

tmcn內容大致包括,格式轉化、字元操作

1、GBK字符集

#GBK字符集
data(GBK)
head(GBK)
  GBK py0        py Radical Stroke_Num_Radical                   Stroke_Order Structure   Freq
1  吖   a      ā yā      口                  3                   丨フ一丶ノ丨      左右     26
2  阿   a     ā ɑ ē      阝                  2                 フ丨一丨フ一丨      左右 526031
3  啊   a ɑ á à ǎ ā      口                  3           丨フ一フ丨一丨フ一丨    左中右  53936
4  錒   a         ā      釒                  5       ノ一一一フフ丨一丨フ一丨    左中右      3
5  錒   a         ā      釒                  8 ノ丶一一丨丶ノ一フ丨一丨フ一丨      左右      0
6  嗄   a     á shà      口                  3     丨フ一一ノ丨フ一一一ノフ丶      左右     11

2、格式轉化

檢驗編碼型別用的是:Encoding()函式,還有isUTF8(txt1)  isGBK(txt2)   isGBK(txt3)

isUTF8(txt1)
isGBK(txt2)
isGBK(txt3)

常規的字元格式轉化用iconv

txt1 <- c("\u4E2D\u56FDR\u8BED\u8A00\u4F1A\u8BAE")  #UTF-8編碼
txt2 <- iconv(txt1, "UTF-8", "GBK")                 #icov把txt1字串從utf8轉化為GBK
也可以通過Encoding來表示:
txt3 <- txt1
Encoding(txt3) <- "GBK"                             #改變編碼,encoding是檢驗編碼型別的

tmcn中比較好的格式轉化的函式:
toUTF8(txt1)        #其他格式(GBK UTF-8)輸出中文
catUTF8(txt1)       #中文以及其他格式輸出UTF8
revUTF8("<U+4E2D><U+56FD>R<U+4F1A><U+8BAE>")  #把UTF8變成中文

toUTF8()比較棒!可以多加留意!

3、繁簡體以及拼音生成

#繁體與拼音改寫
toTrad(txt1)                        #繁體字
toTrad("中國R語言會議", rev = TRUE) #rev=TRUE代表由繁到簡,預設為FALSE為由簡到繁
toPinyin(txt1, capitalize = TRUE)   #由中文變成拼音,capitalize預設為FALSE,代表首字元小寫

4、字元操作

字元操作有根據正則表示式匹配,以及修繕語料的前後空格。但是不能去掉中間的空格。

#字元操作
txt2 <- c("  Ben Franklin and Jefferson Davis", "\tMillard Fillmore")
#根據正則表示式匹配
strextract(txt2, "(?<first>[[:upper:]][[:lower:]]+)", perl = TRUE)   #根據正則表示式匹配內容
#修繕語料兩邊(去掉文章前後的空格,換行符)
strstrip(c("\taaaa ", " bbbb    ","  有這麼坑爹的嗎?","真、    的這麼坑爹嗎?"))         
————————————————————————————————————————

三、李艦老師在R語言大會展示內容的摘錄

李健老師在2013年的R語言大會就已經把R語言的NLP相關的包都羅列並翻譯了一遍,真是厲害。原官方網站連結可見:https://cran.r-project.org/web/views/NaturalLanguageProcessing.html

分析框架部分

1、openNLP

Apá3Tùƒ:̨?1gmu"•©|±ÿ¥È–可以單句識別、句分解、句結構分析,構建語法樹等;相對比較底層的一般文字挖掘任務,該包基礎上進行二次開發比較好。而且該包對中文的支援不是特別好。2、qdap

一個綜合了定量分析以及定性分析的大雜燴,包含了一些自然語言的函式。

3、koRpus

綜合文字分析的包,詞頻分析較多;可讀性分析以及語種識別比較有特色。

詞分析

4、RKEA

提供了KEA的介面可以用來進行關鍵詞提取。

5、wordcloud

6、zipfR

提供了一些關於詞頻分佈的統計模型,尤其是詞頻分佈中最常用的個zipf定律。

7、wordnet包

提供了英文文字資料庫的介面

8、koNLP

一個韓文的自然語言處理的包

9、snowball snowballC Rstem

詞幹提取的包

語義分析

10、topicmodels lda

topicmodels提供了c介面使用LDA和相關的主題模型。lda也是主題建模。

11、RTextTools

自動文字分類

12、skmeans

幾種模糊KMeans演算法。

13、textcat

可以進行基於n-gram短語的文字聚類

14、movMF

提供了基於概率模型,基於vMF分佈的文字聚類方法

15、lsa

潛語義分析,對文件詞條矩陣進行奇異值分解來降維,然後計算相似度。進行文字相似性分析。

16、kernlab

提供了一些核機器學習的方式進行文字分類、聚類、新穎性檢測降維等。

17、textir

提供了一些函式進行文字和語義挖掘。

————————————————————————————————————————

參考文獻:tmcn官方主頁:http://jianl.org/cn/R/tmcn.html

第六屆中國R語言大會李艦老師分享內容:chrome-extension://ikhdkkncnoglghljlkmcimlnlhkeamad/pdf-viewer/web/viewer.html?file=http%3A%2F%2Fcos.name%2Fwp-content%2Fuploads%2F2013%2F11%2FChinaR2013SH_Nov03_07_LiJian.pdf

每每以為攀得眾山小,可、每每又切實來到起點,大牛們,緩緩腳步來俺筆記葩分享一下吧,please~

———————————————————————————