天天看點

R+tmcn筆記︱tmcn包的基本内容以及李艦老師R語言大會展示内容摘錄NLP︱R語言實作word2vec(詞向量)經驗總結(消除歧義、詞向量的可加性)一、字元編碼UTF-8 GBK unicode二、tmcn包的内容三、李艦老師在R語言大會展示内容的摘錄R+openNLP︱openNLP的六大可實作功能及其在R語言中的應用

tmcn包目前托管在在R-forge 上開發和釋出。下載下傳方式以及Rforge相關連結:

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語言大會分享内容;

word2vec子產品,可見筆者部落格:重磅︱文本挖掘深度學習之word2vec的R語言實作

NLP︱R語言實作word2vec(詞向量)經驗總結(消除歧義、詞向量的可加性)

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

一、字元編碼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

可以單句識别、句分解、句結構分析,建構文法樹等;相對比較底層的一般文本挖掘任務,該包基礎上進行二次開發比較好。

而且該包對中文的支援不是特别好。

筆者做過測試,可見部落格:

R+openNLP︱openNLP的六大可實作功能及其在R語言中的應用

2、qdap

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

3、koRpus

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

詞分析

4、RKEA

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

5、wordcloud

畫詞雲,現在已經更新了,可見我的部落格:R語言︱文本挖掘——詞雲wordcloud2包

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~