<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      R語言——中文分詞包jiebaR

      R的極客理想系列文章,涵蓋了R的思想,使用,工具,創新等的一系列要點,以我個人的學習和體驗去詮釋R的強大。

      R語言作為統計學一門語言,一直在小眾領域閃耀著光芒。直到大數據的爆發,R語言變成了一門炙手可熱的數據分析的利器。隨著越來越多的工程背景的人的加入,R語言的社區在迅速擴大成長?,F在已不僅僅是統計領域,教育,銀行,電商,互聯網….都在使用R語言。

      要成為有理想的極客,我們不能停留在語法上,要掌握牢固的數學,概率,統計知識,同時還要有創新精神,把R語言發揮到各個領域。讓我們一起動起來吧,開始R的極客理想。

       

      關于作者:

      • 張丹(Conan), 程序員Java,R,PHP,Javascript
      • weibo:@Conan_Z
      • blog: http://blog.fens.me
      • email: bsspirit@gmail.com

      轉載請注明出處:
      http://blog.fens.me/r-word-jiebar/

      http://blog.fens.me/wp-content/uploads/2016/07/jiebaR.png

       

      前言

      本文挖掘是數據挖掘中一個非常重要的部分,有非常廣闊的使用場景,比如我們可以對新聞事件進行分析,了解國家大事;也可以對微博信息進行分析,通過社交輿情看看大家的關注點。通過文本挖掘找到文章中的隱藏信息,對文章的結構進行分析,判斷是不是同一個作者寫文章;同時可以對郵件分析,結合bayes算法判斷哪些是垃圾郵件,哪些是有用的郵件。

      本文挖掘的第一步,就是要進行分詞,分詞將直接影響文本挖掘的效果。R語言在分詞方面有很好的支持,接下來就給大家介紹一個不錯的R語言中文分詞包“結巴分詞”(jiebaR)。

      目錄

      1. jiebaR包介紹
      2. 5分鐘上手
      3. 分詞引擎
      4. 配置詞典
      5. 停止詞過濾
      6. 關鍵詞提取

      1. jiebaR包介紹

      結巴分詞(jiebaR),是一款高效的R語言中文分詞包,底層使用的是C++,通過Rcpp進行調用很高效。結巴分詞基于MIT協議,就是免費和開源的,感謝國人作者的給力支持,讓R的可以方便的處理中文文本。

      官方Github的地址:https://github.com/qinwf/jiebaR

      本文所使用的系統環境

      • Win10 64bit
      • R: 3.2.3 x86_64-w64-mingw32/x64 b4bit

      jiebaR包是在CRAN發布的標準庫,安裝起來非常簡單,2條命令就可以了。

      1.  
         
      2.  
        ~ R
      3.  
        > install.packages("jiebaR")
      4.  
        > library("jiebaR")

      如果想要安裝開發版本,可以使用devtools來進行安裝,devtools的介紹請參考文章:在巨人的肩膀前行 催化R包開發

      1.  
         
      2.  
        > library(devtools)
      3.  
        > install_github("qinwf/jiebaRD")
      4.  
        > install_github("qinwf/jiebaR")
      5.  
        > library("jiebaR")

      開發版本安裝,官方建議使用Linux系統 gcc >= 4.6 編譯,Windows需要安裝 Rtools。

      2. 5分鐘上手

      5分鐘上手,直接看第一個例子吧,對一段文字進行分詞。

      1.  
         
      2.  
        > wk = worker()
      3.  
         
      4.  
        > wk["我是《R的極客理想》圖書作者"]
      5.  
        [1] "我是" "R" "的" "極客" "理想" "圖書" "作者"
      6.  
         
      7.  
        > wk["我是R語言的深度用戶"]
      8.  
        [1] "我" "是" "R" "語言" "的" "深度" "用戶"

      很簡單地,2行代碼,就完成了中文分詞。

      jiebaR提供了3種分詞語句的寫法,例子上面的用[]符號的語法,還可以使用<=符合語法,或者使用segment()函數。雖然形式不同,但是分詞效果是一樣的。使用<=符號的語法,如下

      1.  
         
      2.  
        > wk<='另一種符合的語法'
      3.  
        [1] "另" "一種" "符合" "的" "語法"

      使用segment()函數的語法,如下

      1.  
         
      2.  
        > segment( "segment()函數語句的寫法" , wk )
      3.  
        [1] "segment" "函數" "語句" "的" "寫法"

      如果你覺得很神奇,想了解如何自定義操作符的,可以檢查項目的源代碼quick.R文件。

      1.  
         
      2.  
        # <= 符號定義
      3.  
        `<=.qseg`<-function(qseg, code){
      4.  
        if(!exists("quick_worker",envir = .GlobalEnv ,inherits = F) ||
      5.  
        .GlobalEnv$quick_worker$PrivateVarible$timestamp != TIMESTAMP){
      6.  
         
      7.  
        if(exists("qseg",envir = .GlobalEnv,inherits = FALSE ) )
      8.  
        rm("qseg",envir = .GlobalEnv)
      9.  
         
      10.  
        modelpath = file.path(find.package("jiebaR"),"model","model.rda")
      11.  
        quickparam = readRDS(modelpath)
      12.  
         
      13.  
        if(quickparam$dict == "AUTO") quickparam$dict = DICTPATH
      14.  
        if(quickparam$hmm == "AUTO") quickparam$hmm = HMMPATH
      15.  
        if(quickparam$user == "AUTO") quickparam$user = USERPATH
      16.  
        if(quickparam$stop_word == "AUTO") quickparam$stop_word = STOPPATH
      17.  
        if(quickparam$idf == "AUTO") quickparam$idf = IDFPATH
      18.  
         
      19.  
        createquickworker(quickparam)
      20.  
        setactive()
      21.  
        }
      22.  
         
      23.  
        //..代碼省略
      24.  
        }
      25.  
         
      26.  
        # [ 符號定義
      27.  
        `[.qseg`<- `<=.qseg`
      28.  
         

      我們也可以直接對文本文件進行分詞,在當前目錄新建一個文本文件idea.txt。

      1.  
         
      2.  
        ~ notepad idea.txt
      3.  
         
      4.  
        R的極客理想系列文章,涵蓋了R的思想,使用,工具,創新等的一系列要點,以我個人的學習和體驗去詮釋R的強大。
      5.  
         
      6.  
        R語言作為統計學一門語言,一直在小眾領域閃耀著光芒。直到大數據的爆發,R語言變成了一門炙手可熱的數據分析的利器。隨著越來越多的工程背景的人的加入,R語言的社區在迅速擴大成長。現在已不僅僅是統計領域,教育,銀行,電商,互聯網….都在使用R語言。

      當然,我們運行分詞程序,會在當前目錄生成一個新的分詞結果的文件。

      1.  
         
      2.  
        > wk['./idea.txt']
      3.  
        [1] "./idea.segment.2016-07-20_23_25_34.txt"

      打開文件idea.segment.2016-07-20_23_25_34.txt,整個本文以空格進行分詞。

      1.  
         
      2.  
        ~ notepad idea.segment.2016-07-20_23_25_34.txt
      3.  
         
      4.  
        R 的 極客 理想 系列 文章 涵蓋 了 R 的 思想 使用 工具 創新 等 的 一系列 要點 以 我 個人 的 學習 和 體驗 去 詮釋 R 的 強大 R 語言 作為 統計學 一門 語言 一直 在 小眾 領域 閃耀著 光芒 直到 大 數據 的 爆發 R 語言 變成 了 一門 炙手可熱 的 數據分析 的 利器 隨著 越來越 多 的 工程 背景 的 人 的 加入 R 語言 的 社區 在 迅速 擴大 成長 現在 已 不僅僅 是 統計 領域 教育 銀行 電商 互聯網 都 在 使用 R 語言

      是不是很簡單,5分鐘實踐就能完成分詞的任務。

      3. 分詞引擎

      在調用worker()函數時,我們實際是在加載jiebaR庫的分詞引擎。jiebaR庫提供了7種分詞引擎。

      • 混合模型(MixSegment):是四個分詞引擎里面分詞效果較好的類,結它合使用最大概率法和隱式馬爾科夫模型。
      • 最大概率法(MPSegment) :負責根據Trie樹構建有向無環圖和進行動態規劃算法,是分詞算法的核心。
      • 隱式馬爾科夫模型(HMMSegment):是根據基于人民日報等語料庫構建的HMM模型來進行分詞,主要算法思路是根據(B,E,M,S)四個狀態來代表每個字的隱藏狀態。 HMM模型由dict/hmm_model.utf8提供。分詞算法即viterbi算法。
      • 索引模型(QuerySegment):先使用混合模型進行切詞,再對于切出來的較長的詞,枚舉句子中所有可能成詞的情況,找出詞庫里存在。
      • 標記模型(tag)
      • Simhash模型(simhash)
      • 關鍵詞模型(keywods)

      如果你不太關心引擎的事,那么直接用官方推薦的混合模型(默認選擇)就行了。查看worker()函數的定義。

      1.  
         
      2.  
        worker(type = "mix", dict = DICTPATH, hmm = HMMPATH, user = USERPATH,
      3.  
        idf = IDFPATH, stop_word = STOPPATH, write = T, qmax = 20, topn = 5,
      4.  
        encoding = "UTF-8", detect = T, symbol = F, lines = 1e+05,
      5.  
        output = NULL, bylines = F, user_weight = "max")

      參數列表:

      • type, 引擎類型
      • dict, 系統詞典
      • hmm, HMM模型路徑
      • user, 用戶詞典
      • idf, IDF詞典
      • stop_word, 關鍵詞用停止詞庫
      • write, 是否將文件分詞結果寫入文件,默認FALSE
      • qmax, 最大成詞的字符數,默認20個字符
      • topn, 關鍵詞數,默認5個
      • encoding, 輸入文件的編碼,默認UTF-8
      • detect, 是否編碼檢查,默認TRUE
      • symbol, 是否保留符號,默認FALSE
      • lines, 每次讀取文件的最大行數,用于控制讀取文件的長度。大文件則會分次讀取。
      • output, 輸出路徑
      • bylines, 按行輸出
      • user_weight, 用戶權重

      我們在調用worker()時,就加載了分詞引擎,可以打印出來,查看分詞的引擎的配置。

      1.  
         
      2.  
        > wk = worker()
      3.  
        > wk
      4.  
        Worker Type: Jieba Segment
      5.  
         
      6.  
        Default Method : mix # 混合模型
      7.  
        Detect Encoding : TRUE # 檢查編碼
      8.  
        Default Encoding: UTF-8 # UTF-8
      9.  
        Keep Symbols : FALSE # 不保留符號
      10.  
        Output Path : # 輸出文件目錄
      11.  
        Write File : TRUE # 寫文件
      12.  
        By Lines : FALSE # 不行輸出
      13.  
        Max Word Length : 20 # 最大單單詞長度
      14.  
        Max Read Lines : 1e+05 # 最大讀入文件行數
      15.  
         
      16.  
        Fixed Model Components:
      17.  
         
      18.  
        $dict # 系統詞典
      19.  
        [1] "D:/tool/R-3.2.3/library/jiebaRD/dict/jieba.dict.utf8"
      20.  
         
      21.  
        $user # 用戶詞典
      22.  
        [1] "D:/tool/R-3.2.3/library/jiebaRD/dict/user.dict.utf8"
      23.  
         
      24.  
        $hmm # 隱式馬爾科夫模型模型
      25.  
        [1] "D:/tool/R-3.2.3/library/jiebaRD/dict/hmm_model.utf8"
      26.  
         
      27.  
        $stop_word # 停止詞,無
      28.  
        NULL
      29.  
         
      30.  
        $user_weight # 用戶詞典權重
      31.  
        [1] "max"
      32.  
         
      33.  
        $timestamp # 時間戳
      34.  
        [1] 1469027302
      35.  
         
      36.  
        $default $detect $encoding $symbol $output $write $lines $bylines can be reset.

      如果我們想改變分詞引擎的配置項,可以在調用worker()創建分詞引擎時,也可以通過wk$XX來進行設置。如果想了解wk是什么類型的對象,我們通過pryr包的otype的函數來檢查wk對象的類型。關于pryr包的詳細使用,請參考文章撬動R內核的高級工具包pryr

      1.  
         
      2.  
        # 加載 pryr包
      3.  
        > library(pryr)
      4.  
        > otype(wk) # 面向對象的類型檢查
      5.  
        [1] "S3"
      6.  
         
      7.  
        > class(wk) # 查看class是屬性
      8.  
        [1] "jiebar" "segment" "jieba"

      4. 配置詞典

      對于分詞的結果好壞的關鍵因素是詞典,jiebaR默認有配置標準的詞典。對于我們的使用來說,不同行業或不同的文字類型,最好用專門的分詞詞典。在jiebaR中通過show_dictpath()函數可以查看默認的標準詞典,可以通過上一小節介紹的配置項,來指定我們自己的詞典。日常對話的常用詞典,比如搜狗輸入法的詞庫。

      1.  
         
      2.  
        # 查看默認的詞庫位置
      3.  
        > show_dictpath()
      4.  
        [1] "D:/tool/R-3.2.3/library/jiebaRD/dict"
      5.  
         
      6.  
        # 查看目錄
      7.  
        > dir(show_dictpath())
      8.  
        [1] "D:/tool/R-3.2.3/library/jiebaRD/dict"
      9.  
        [1] "backup.rda" "hmm_model.utf8" "hmm_model.zip"
      10.  
        [4] "idf.utf8" "idf.zip" "jieba.dict.utf8"
      11.  
        [7] "jieba.dict.zip" "model.rda" "README.md"
      12.  
        [10] "stop_words.utf8" "user.dict.utf8"

      看到詞典目錄中,包括了多個文件。

      • jieba.dict.utf8, 系統詞典文件,最大概率法,utf8編碼的
      • hmm_model.utf8, 系統詞典文件,隱式馬爾科夫模型,utf8編碼的
      • user.dict.utf8, 用戶詞典文件,utf8編碼的
      • stop_words.utf8,停止詞文件,utf8編碼的
      • idf.utf8,IDF語料庫,utf8編碼的
      • jieba.dict.zip,jieba.dict.utf8的壓縮包
      • hmm_model.zip,hmm_model.utf8的壓縮包
      • idf.zip,idf.utf8的壓縮包
      • backup.rda,無注釋
      • model.rda,無注釋
      • README.md,說明文件

      打開系統詞典文件jieba.dict.utf8,并打印前50行。

      1.  
         
      2.  
        > scan(file="D:/tool/R-3.2.3/library/jiebaRD/dict/jieba.dict.utf8",
      3.  
        + what=character(),nlines=50,sep='\n',
      4.  
        + encoding='utf-8',fileEncoding='utf-8')
      5.  
        Read 50 items
      6.  
        [1] "1號店 3 n" "1號店 3 n" "4S店 3 n" "4s店 3 n"
      7.  
        [5] "AA制 3 n" "AB型 3 n" "AT&T 3 nz" "A型 3 n"
      8.  
        [9] "A座 3 n" "A股 3 n" "A輪 3 n" "A輪 3 n"
      9.  
        [13] "BB機 3 n" "BB機 3 n" "BP機 3 n" "BP機 3 n"
      10.  
        [17] "B型 3 n" "B座 3 n" "B股 3 n" "B超 3 n"
      11.  
        [21] "B輪 3 n" "B輪 3 n" "C# 3 nz" "C++ 3 nz"
      12.  
        [25] "CALL機 3 n" "CALL機 3 n" "CD機 3 n" "CD機 3 n"
      13.  
        [29] "CD盒 3 n" "C座 3 n" "C盤 3 n" "C盤 3 n"
      14.  
        [33] "C語言 3 n" "C語言 3 n" "D座 3 n" "D版 3 n"
      15.  
        [37] "D盤 3 n" "D盤 3 n" "E化 3 n" "E座 3 n"
      16.  
        [41] "E盤 3 n" "E盤 3 n" "E通 3 n" "F座 3 n"
      17.  
        [45] "F盤 3 n" "F盤 3 n" "G盤 3 n" "G盤 3 n"
      18.  
        [49] "H盤 3 n" "H盤 3 n"

      我們發現系統詞典每一行都有三列,并以空格分割,第一列為詞項,第二列為詞頻,第三列為詞性標記。

      打開用戶詞典文件user.dict.utf8,并打印前50行。

      1.  
         
      2.  
        > scan(file="D:/tool/R-3.2.3/library/jiebaRD/dict/user.dict.utf8",
      3.  
        + what=character(),nlines=50,sep='\n',
      4.  
        + encoding='utf-8',fileEncoding='utf-8')
      5.  
        Read 5 items
      6.  
        [1] "云計算" "韓玉鑒賞" "藍翔 nz" "CEO" "江大橋"

      用戶詞典第一行有二列,,第一列為詞項,第二列為詞性標記,沒有詞頻的列。用戶詞典默認詞頻為系統詞庫中的最大詞頻。

      jiebaR包關于詞典詞性標記,采用ictclas的標記方法。ICTCLAS 漢語詞性標注集。

      代碼名稱幫助記憶的詮釋
      Ag 形語素 形容詞性語素。形容詞代碼為a,語素代碼g前面置以A。
      a 形容詞 取英語形容詞adjective的第1個字母。
      ad 副形詞 直接作狀語的形容詞。形容詞代碼a和副詞代碼d并在一起。
      an 名形詞 具有名詞功能的形容詞。形容詞代碼a和名詞代碼n并在一起。
      b 區別詞 取漢字"別"的聲母。
      c 連詞 取英語連詞conjunction的第1個字母。
      Dg 副語素 副詞性語素。副詞代碼為d,語素代碼g前面置以D。
      d 副詞 取adverb的第2個字母,因其第1個字母已用于形容詞。
      e 嘆詞 取英語嘆詞exclamation的第1個字母。
      f 方位詞 取漢字"方"的聲母。
      g 語素 絕大多數語素都能作為合成詞的"詞根",取漢字"根"的聲母。
      h 前接成分 取英語head的第1個字母。
      i 成語 取英語成語idiom的第1個字母。
      j 簡稱略語 取漢字"簡"的聲母。
      k 后接成分  
      l 習用語 習用語尚未成為成語,有點"臨時性",取"臨"的聲母。
      m 數詞 取英語numeral的第3個字母,n,u已有他用。
      Ng 名語素 名詞性語素。名詞代碼為n,語素代碼g前面置以N。
      n 名詞 取英語名詞noun的第1個字母。
      nr 人名 名詞代碼n和"人(ren)"的聲母并在一起。
      ns 地名 名詞代碼n和處所詞代碼s并在一起。
      nt 機構團體 "團"的聲母為t,名詞代碼n和t并在一起。
      nz 其他專名 "專"的聲母的第1個字母為z,名詞代碼n和z并在一起。
      o 擬聲詞 取英語擬聲詞onomatopoeia的第1個字母。
      p 介詞 取英語介詞prepositional的第1個字母。
      q 量詞 取英語quantity的第1個字母。
      r 代詞 取英語代詞pronoun的第2個字母,因p已用于介詞。
      s 處所詞 取英語space的第1個字母。
      Tg 時語素 時間詞性語素。時間詞代碼為t,在語素的代碼g前面置以T。
      t 時間詞 取英語time的第1個字母。
      u 助詞 取英語助詞auxiliary 的第2個字母,因a已用于形容詞。
      Vg 動語素 動詞性語素。動詞代碼為v。在語素的代碼g前面置以V。
      v 動詞 取英語動詞verb的第一個字母。
      vd 副動詞 直接作狀語的動詞。動詞和副詞的代碼并在一起。
      vn 名動詞 指具有名詞功能的動詞。動詞和名詞的代碼并在一起。
      w 標點符號  
      x 非語素字 非語素字只是一個符號,字母x通常用于代表未知數、符號。
      y 語氣詞 取漢字"語"的聲母。
      z 狀態詞 取漢字"狀"的聲母的前一個字母。

      下面我們自定義一個用戶詞典,來試試效果。編寫詞典文件,user.utf8。

      1.  
         
      2.  
        ~ notepad user.utf8
      3.  
         
      4.  
        R語言
      5.  
        R的極客理想
      6.  
        大數據
      7.  
        數據
      8.  
         

      使用我們的自定義的用戶詞典,對剛才的文本再進行分詞。

      1.  
         
      2.  
        > wk = worker(user='user.utf8')
      3.  
        > wk['./idea.txt']
      4.  
        [1] "./idea.segment.2016-07-21_11_14_24.txt"

      對比2次產生的分詞結果,idea.segment.2016-07-20_23_25_34.txt 和 idea.segment.2016-07-21_11_14_24.txt。

      jiebaR-cut

      在實際使用中,jiebaR默認提供的用戶詞典只有5個單詞,太簡單了,肯定是不夠用的。我們可以用搜狗詞典,來豐富用戶自己的詞庫。接下來,讓我們配置搜狗詞典。你需要安裝一個搜狗輸入法,具體的安裝過程不再解釋。

      我安裝的是搜狗五筆輸入法,找到搜狗的安裝目錄,并找到詞典文件。我的搜狗詞典,在下面的安裝位置。

      1.  
         
      2.  
        C:\Program Files (x86)\SogouWBInput\2.1.0.1288\scd\17960.scel

      把17960.scel文件復制到自己的項目目錄里,用文本編輯器打開文件,發現是二進制的。那么我需要用工具進行轉換,把二進制的詞典轉成我們可以使用的文本文件。jiebaR包的作者,同時開發了一個cidian項目,可以轉換搜狗的詞典,那么我們只需要安裝cidian包即可。

      安裝cidian項目

      1.  
         
      2.  
        > install.packages("devtools")
      3.  
        > install.packages("stringi")
      4.  
        > install.packages("pbapply")
      5.  
        > install.packages("Rcpp")
      6.  
        > install.packages("RcppProgress")
      7.  
        > library(devtools)
      8.  
        > install_github("qinwf/cidian")
      9.  
        > library(cidian)
        為確保安裝順利,建議首先下載Rtools,下載后直接雙擊進行安裝,安裝同一般軟件安裝,下載地址https://cran.r-project.org/bin/windows/Rtools/,注意選擇對應自己軟件版本的。然后打開Rstudio或者R,用install.packages()依次安裝devtools、stringi、pbapply、Rcpp、RcppProgress,然后加載devtools,然后用install_github("qinwf/cidian")安裝cidian,正常情況下就能順利安裝

      轉換二進制詞典到文本文件。

      1.  
         
      2.  
        # 轉換
      3.  
        > decode_scel(scel = "./17960.scel",cpp = TRUE)
      4.  
        output file: ./17960.scel_2016-07-21_00_22_11.dict
      5.  
         
      6.  
        # 查看生成的詞典文件
      7.  
        > scan(file="./17960.scel_2016-07-21_00_22_11.dict",
      8.  
        + what=character(),nlines=50,sep='\n',
      9.  
        + encoding='utf-8',fileEncoding='utf-8')
      10.  
        Read 50 items
      11.  
        [1] "阿壩州 n" "阿百川 n" "阿班 n"
      12.  
        [4] "阿賓 n" "阿波菲斯 n" "阿不都熱希提 n"
      13.  
        [7] "阿不都西庫爾 n" "阿不力克木 n" "阿爾姆格倫 n"
      14.  
        [10] "阿爾沙文 n" "阿肥星 n" "阿菲正傳 n"
      15.  
        [13] "阿密特 n" "阿穆 n" "阿穆隆 n"
      16.  
        [16] "阿帕魯薩鎮 n" "阿披實 n" "阿衰 n"
      17.  
        [19] "阿霞 n" "艾奧瓦 n" "愛不疚 n"
      18.  
        [22] "愛的錯位 n" "愛得得體 n" "愛的火焰 n"
      19.  
        [25] "愛的流刑地 n" "愛得起 n" "埃夫隆 n"
      20.  
        [28] "愛搞網 n" "愛國紅心 n" "愛呼 n"
      21.  
        [31] "愛就宅一起 n" "埃克希兒 n" "愛沒有錯 n"
      22.  
        [34] "埃蒙斯 n" "愛奴新傳 n" "愛起點 n"
      23.  
        [37] "愛情的牙齒 n" "愛情海濱 n" "愛情節 n"
      24.  
        [40] "愛情美的樣子 n" "愛情無限譜 n" "愛情占線 n"
      25.  
        [43] "愛情轉移 n" "愛情左燈右行 n" "愛上你是一個錯 n"
      26.  
        [46] "矮哨兵 n" "愛是妥協 n" "愛似水仙 n"
      27.  
        [49] "愛太痛 n" "愛無界 n"

      接下來,直接把搜狗詞典配置到我們的分詞庫中,就可以直接使用了。把搜狗詞典文件改名,從17960.scel_2016-07-21_00_22_11.dict到user.dict.utf8,然后替換D:\tool\R-3.2.3\library\jiebaRD\dict目錄下面的user.dict.utf8。這樣默認的用戶詞典,就是搜狗詞典了。很酷吧!

      如果使用txt文件作為詞典,需要將編碼改為utf-8,之后輸入命令:jieba.load_userdict("C:/Users/Lenovo/Desktop/dict.txt")#括號內可自行設置路徑

      5. 停止詞過濾

      停止詞就是分詞過程中,我們不需要作為結果的詞,像英文的語句中有很多的a,the,or,and等,中文語言中也有很多,比如 的,地,得,我,你,他。這些詞因為使用頻率過高,會大量出現在一段文本中,對于分詞后的結果,在統計詞頻的時候會增加很多的噪音,所以我們通常都會將這些詞進行過濾。

      在jiebaR中,過濾停止詞有2種方法,一種是通過配置stop_word文件,另一種是使用filter_segment()函數。

      首先我們先來看,通過配置stop_word文件的方法。新建一個stop_word.txt文件。

      1.  
         
      2.  
        ~ notepad stop_word.txt
      3.  
         
      4.  
      5.  
        我是
      6.  
         

      加載分詞引擎,并配置停止詞過濾。

      1.  
         
      2.  
        > wk = worker(stop_word='stop_word.txt')
      3.  
        > segment<-wk["我是《R的極客理想》圖書作者"]
      4.  
        > segment
      5.  
        [1] "R" "的" "極客" "理想" "圖書" "作者"

      上面的文本,我們把"我是"通過停止詞進行了過濾。如果還想過濾“作者”一詞,可以動態的調用filter_segment()函數。

      1.  
         
      2.  
        > filter<-c("作者")
      3.  
        > filter_segment(segment,filter)
      4.  
        [1] "R" "的" "極客" "理想" "圖書"

      6. 關鍵詞提取

      關鍵詞提取是文本處理非常重要的一個環節,一個經典算法是TF-IDF算法。其中,TF(Term Frequency)代表詞頻,IDF(Inverse Document Frequency)表示逆文檔頻率。如果某個詞在文章中多次出現,而且不是停止詞,那么它很可能就反應了這段文章的特性,這就是我們要找的關鍵詞。再通過IDF來算出每個詞的權重,不常見的詞出現的頻率越高,則權重越大。計算TF-IDF的公式為:

      TF-IDF = TF(詞頻) * 逆文檔頻率(IDF)

      對文檔中每個詞計算TF-IDF的值,把結果從大到小排序,就得到了這篇文檔的關鍵性排序列表。關于IF-IDF的解釋,參考了文章TF-IDF與余弦相似性的應用(一):自動提取關鍵詞

      jiebaR包的關鍵詞提取提取的實現,也是使用了TF-IDF的算法。在安裝目錄中的idf.utf8文件,為IDF的語料庫。查看idf.utf8內容。

      1.  
         
      2.  
        > scan(file="D:/tool/R-3.2.3/library/jiebaRD/dict/idf.utf8",
      3.  
        + what=character(),nlines=50,sep='\n',
      4.  
        + encoding='utf-8',fileEncoding='utf-8')
      5.  
        Read 50 items
      6.  
        [1] "勞動防護 13.900677652" "生化學 13.900677652"
      7.  
        [3] "奧薩貝爾 13.900677652" "考察隊員 13.900677652"
      8.  
        [5] "崗上 11.5027823792" "倒車檔 12.2912397395"
      9.  
        [7] "編譯 9.21854642485" "蝶泳 11.1926274509"
      10.  
        [9] "外委 11.8212361103" "故作高深 11.9547675029"
      11.  
        [11] "尉遂成 13.2075304714" "心源性 11.1926274509"
      12.  
        [13] "現役軍人 10.642581114" "杜勃留 13.2075304714"
      13.  
        [15] "包天笑 13.900677652" "賈政陪 13.2075304714"
      14.  
        [17] "托爾灣 13.900677652" "多瓦 12.5143832909"
      15.  
        [19] "多瓣 13.900677652" "巴斯特爾 11.598092559"
      16.  
        [21] "劉皇帝 12.8020653633" "亞歷山德羅夫 13.2075304714"
      17.  
        [23] "社會公眾 8.90346537821" "五百份 12.8020653633"
      18.  
        [25] "兩點閾 12.5143832909" "多瓶 13.900677652"
      19.  
        [27] "冰天 12.2912397395" "庫布齊 11.598092559"
      20.  
        [29] "龍川縣 12.8020653633" "銀燕 11.9547675029"
      21.  
        [31] "歷史風貌 11.8212361103" "信仰主義 13.2075304714"
      22.  
        [33] "好色 10.0088573539" "款款而行 12.5143832909"
      23.  
        [35] "凳子 8.36728816325" "二部 9.93038573842"
      24.  
        [37] "盧巴 12.1089181827" "五百五 13.2075304714"
      25.  
        [39] "暢敘 11.598092559" "吳柵子 13.2075304714"
      26.  
        [41] "智力競賽 13.900677652" "庫邦 13.2075304714"
      27.  
        [43] "非正義 11.3357282945" "編訂 10.2897597393"
      28.  
        [45] "悲號 12.8020653633" "陳莊搭 13.2075304714"
      29.  
        [47] "二郎 9.62401153296" "電光石火 11.8212361103"
      30.  
        [49] "搶球 11.9547675029" "南澳大利亞 10.9562386728"

      idf.utf8文件每一行有2列,第一列是詞項,第二列為權重。然后,我通過計算文檔的詞頻(TF),與語料庫的IDF值相乘,就可以得到TF-IDF值,從而提取文檔的關鍵詞。

      比如,我們對下面的文本內容進行關鍵詞的提取。

      1.  
         
      2.  
        > wk = worker()
      3.  
        > segment<-wk["R的極客理想系列文章,涵蓋了R的思想,使用,工具,創新等的一系列要點,以我個人的學習和體驗去詮釋R的強大。"]
      4.  
         
      5.  
        # 計算詞頻
      6.  
        > freq(segment)
      7.  
        char freq
      8.  
        1 創新 1
      9.  
        2 了 1
      10.  
        3 文章 1
      11.  
        4 強大 1
      12.  
        5 R 3
      13.  
        6 個人 1
      14.  
        7 的 5
      15.  
        8 詮釋 1
      16.  
        9 和 1
      17.  
        10 一系列 1
      18.  
        11 使用 1
      19.  
        12 以 1
      20.  
        13 等 1
      21.  
        14 極客 1
      22.  
        15 理想 1
      23.  
        16 思想 1
      24.  
        17 涵蓋 1
      25.  
        18 系列 1
      26.  
        19 去 1
      27.  
        20 我 1
      28.  
        21 工具 1
      29.  
        22 學習 1
      30.  
        23 體驗 1
      31.  
        24 要點 1
      32.  
         
      33.  
        # 取TF-IDF的前5的關鍵詞
      34.  
        > keys = worker("keywords",topn=5)
      35.  
         
      36.  
        # 計算關鍵詞
      37.  
        > vector_keywords(segment,keys)
      38.  
        11.7392 8.97342 8.23425 8.2137 7.43298
      39.  
        "極客" "詮釋" "要點" "涵蓋" "體驗"

      使用jiebaR包處理分詞確實簡單,幾行的代碼就能實現分詞的各種算法操作。有了這個工具,我們就可以文檔中,發現各種語言規則進行文本挖掘了。下篇文章讓我們挖掘一下上市公司的公告吧,說不定能發現什么市場規則。

      本文只是拋磚引玉地介紹了jiebaR包的使用方法,詳細使用操作,請參考包作者的官方介紹。再次感謝jiebaR作者@qinwenfeng,為R語言在中文分詞中提供了一套非常不錯的工具包!

      轉載請注明出處:
      http://blog.fens.me/r-word-jiebar/

      R-cidian將詞庫批量讀入

      用到cidian包中的decode_scel函數
      參數scel用來給出細胞詞庫的路徑(需要帶上擴展名)
      output給出輸出文件的路徑,我們在這里把他放到了和原細胞詞庫同一個路徑下面,并且將其擴展名改為.txt;
      cpp = TRUE表示采用Rcpp(速度會更快)
      progress = TRUE表示顯示轉換進度條。由于一般而言轉換速度非???,所以是否顯示進度條意義不大。


      ####此處詞庫為搜狗詞庫
      library(dplyr)
      library(stringr)
      library(devtools)
      library(data.table)
      library(cidian)
      #建立數據目錄
      data.dir <- sprintf("%s/data", getwd())
      #用來輸出結果的目錄
      results.dir <- sprintf("%s/results", getwd())
      #獲取所有搜狗詞庫的完整路徑
      cidian.dir <- sprintf("%s/搜狗細胞詞庫-201602", data.dir)
      scel.paths <- list.files(cidian.dir, pattern = ".scel$", full.names = T)
      #導入目錄下所有詞庫,并輸出成.txt文件
      lapply(seq_along(scel.paths), function(i) {
        decode_scel(scel = scel.paths[i],
          output = str_c(scel.paths[i], ".txt"),
          cpp = TRUE)}) %>%
        invisible()
      #將所有詞庫合并成一個詞庫(此處用到函數data.table的rbindlist函數)
      dict.paths <- list.files(cidian.dir, pattern = ".txt$", full.names = T)
      dict.list <- lapply(seq_along(dict.paths),function(i) fread(dict.paths[i], encoding = "UTF-8"))
      dict <- rbindlist(dict.list)
      # 去重
      dict <- unique(dict, by = names(dict))
      #將最后生成的詞庫導出成單一的txt文件,用于后續分詞
      write.table(dict, file = sprintf("%s/guba.use.dict.utf8", data.dir),
        quote = F,
        row.names = F,
        col.names = F,
        fileEncoding = "UTF-8")

       

      posted @ 2021-12-22 17:35  MRO物料采購服務  閱讀(981)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 国产美女裸身网站免费观看视频| 黑人av无码一区| 国产乱子伦视频在线播放| 久热这里只有精品12| 四虎国产精品免费久久久| 激情久久综合精品久久人妻| 久久激情影院| 国产又爽又黄又刺激的视频| 亚洲乱亚洲乱妇50p| 国产91麻豆视频免费看| 沁水县| 北岛玲亚洲一区二区三区| 午夜福利在线观看6080| 不卡AV中文字幕手机看| 水蜜桃av无码| 国产360激情盗摄全集| 欧美做受视频播放| 肇庆市| 亚洲欧美人成网站在线观看看| 国产欧美日韩亚洲一区二区三区| 国产好大好硬好爽免费不卡| 亚洲精品综合久中文字幕 | 麻豆久久天天躁夜夜狠狠躁| 亚洲第一无码专区天堂| 欧美乱码卡一卡二卡四卡免费| 西贡区| 久久精品一本到99热免费| 她也色tayese在线视频| 99在线精品免费视频九九视| 无码一区二区三区av在线播放| 久久精品亚洲精品国产色婷| 国产99久久精品一区二区| 好深好湿好硬顶到了好爽| 欧美熟妇乱子伦XX视频| 自慰无码一区二区三区| 天堂www在线中文| 国产一区二区三区精品久| 精品中文字幕人妻一二| 亚洲日韩久热中文字幕| 一本色道久久加勒比综合| 国产av最新一区二区|