R語言數據挖掘實踐——Rwordseg文本挖掘包簡介

文本挖掘定義

文本挖掘指的是從文本數據中獲取有價值的信息和知識,它是數據挖掘中的一種方法。文本挖掘中最重要最基本的應用是實現文本的分類和聚類,前者是有監督的挖掘算法,後者是無監督的挖掘算法。

R語言數據挖掘實踐——Rwordseg文本挖掘包簡介

文本挖掘步驟

  1. 讀取數據庫或本地外部文本文件;

  2. 文本分詞:文本分詞包括自定義字典、自定義停止詞、分詞、文字雲檢索;

  3. 構建文檔-條目矩陣,即文本的特徵提取;

  4. 對矩陣建立統計、挖掘模型;

  5. 將結果反饋至用戶端。

首先介紹一些文本分詞階段需要做的一些工作,包括人名識別設置、添加和卸載自定義字典、添加和刪除自定義詞彙和停止詞的使用等。

人名識別

默認情況下,Rwordseg包是無法識別一些人名的。可以通過

getOption()函數和segment.options()函數查看人名識別功能的狀態和設置人名識別功能的狀態。

> library(Rwordseg)

> getOption("isNameRecognition")

[1] FALSE

> str1

> segmentCN(str1)

[1] "我" "的" "名字" "叫" "張" "三" "豐"

> segment.options(isNameRecognition=TRUE)

> getOption("isNameRecognition")

[1] TRUE

> segmentCN(str1)

[1] "我" "的" "名字" "叫" "張三丰"

在人名識別功能狀態設置前無法識別姓名,通過segment.options()函數設置後,可以很好的將人的姓名識別出來。

添加和卸載自定義字典

Rwordseg包中提供installDict()函數和uninstallDict()函數,用以添加和卸載用戶自定義的字典。

有些文檔的句子或詞會出現歧義,例如“雷克薩斯品牌“是分割為“雷克薩斯”和“品牌”兩個部分還是分割為“雷克薩”、“斯”和“品牌”三個部分,這對於segmentCN函數來說是困難的。為了能夠正確地分詞,可以添加自定義字典。

看一下installDict()函數的語法:

installDict(dictpath, dictname,dicttype = c("text", "scel"), load = TRUE)

  • dictpath表示需要安裝詞典的路徑;

  • dictname為自定義的詞典名稱;

  • dicttype表示安裝的詞典類型,'text'為普通文本格式,'scel'為Sogou細胞詞典(可在Sogou官網下載);

  • load表示安裝後是否自動加載到內存,默認為TRUE。

強烈建議使用Sogou官網中的細胞詞典,因為該詞典包含的量比較大,且最新流行的詞也會包含在詞典中。以下例子將下載汽車名稱詞典,並安裝到R中。這個詞典的鏈接:http://pinyin.sogou.com/dict/detail/index/15153

> str2

> segmentCN(str2)

[1] "雷克薩" "斯" "品牌"

> installDict(dictpath = "./qiche.scel", dictname = "qiche")

2388 words were loaded! ... New dictionary 'qiche' was installed!

> listDict()

Name Type Des

1 qiche 汽車 官方推薦,詞庫來源於網友上傳!

Path

1 C:/R-3.3.2/library/Rwordseg/dict/qiche.dic

> segmentCN(str2)

[1] "雷克薩斯" "品牌"

默認情況下,Rwordseg包中不存在自定義的詞典,此時對於“雷克薩斯品牌”就不能準確的分詞,通過安裝Sogou詞典後,該字符串就能夠準確的被分詞。

如果不需要已經建立的自定義詞典時,可以使用uninstallDict()函數卸載指定的詞典。

uninstallDict(removedict = listDict()$Name,remove = TRUE)

  • removedict指定要卸載的詞典名稱;

  • remove表示是否立即清除詞典中詞語,默認為TRUE。

> listDict()

Name Type Des

1 qiche 汽車 官方推薦,詞庫來源於網友上傳!

Path

1 C:/R-3.3.2/library/Rwordseg/dict/qiche.dic

> uninstallDict(removedict = 'qiche')

2388 words were removed! ... The dictionary 'qiche' was uninstalled!

> listDict()

[1] Name Type Des Path

<0 行> (或0-長度的row.names)

添加和刪除自定義詞彙

有時已安裝的自定義詞典仍然不能夠準確的實現分詞,還可以通過在內存中臨時添加和刪除詞彙實現更進一步的準確分詞。例如“不要錯過美好時光”該如何分詞?

R中提供insertWords()函數和deleteWords()函數實現自定義詞彙的添加和刪除。

> str3

> segmentCN(str3)

[1] "不要" "錯" "過" "美好" "時光"

> insertWords('錯過')

> segmentCN(str3)

[1] "不要" "錯過" "美好" "時光"

創建停止詞

在文本分詞中,有一些無意義的語氣詞,如啊、哦、哈等,或是轉折詞,如即使、而且、但是等。對於這類詞在分析時需要去掉。如何去掉?首先需要指定哪些詞為停止詞,然後在分詞時將這些停止詞刪掉即可。

tmcn包中自帶一個包含504箇中文停止詞的對象。下文的應用分析中字就是用該停止詞對象。

> library(tmcn)

> stopwords

> length(stopwords)

[1] 503

> head(stopwords,20)

[1] "第二" "一番" "一直" "一個" "一些" "許多"

[7] "種" "有的是" "也就是說" "末" "啊" "阿"

[13] "哎" "哎呀" "哎喲" "唉" "俺" "俺們"

[19] "按" "按照"

分詞函數segmentCN()

segmentCN()分詞函數的格式如下:

segmentCN(strwords,analyzer = get("Analyzer", envir = .RwordsegEnv),nature = FALSE, nosymbol = TRUE,returnType = c("vector", "tm"), isfast = FALSE,outfile = "", blocklines = 1000)

  • strwords可以是需要分詞的字符向量,也可以是某個文本文件的路徑;

  • nature用於詞性識別,默認不輸出,如果設為TRUE將同時返回分詞對應的詞性識別;

  • nosymbol表示是否只輸出漢字、英文和數字,默認為TRUE,否則將還會輸出標點符號;

  • returnType表示分詞後的返回類型,如果為'tm',返回時無法輸出詞性;

  • isfast參數可設置直接調用JAVA包進行最基礎的分詞,速度比較快,只能返回'tm'格式的文本,且無法輸出繁體字,也不能進行詞性識別。如果對分詞效率要求比較高可以設置該參數為TRUE;

  • outfile用於指定輸出文件的名稱,如果strwords為指定的路徑,需要為該參數指定文件名稱,默認產生原文件名加“segment”;

  • blocklines表示每次讀入的行數,默認為1000行。


分享到:


相關文章: