R | 教程 jiebaR中文分詞

2021-02-06 社會科學中的機器學習
導言jiebaR是"結巴"中文分詞的R語言版本,支持最大概率法(Maximum Probability),隱式馬爾科夫模型(Hidden Markov Model),索引模型(QuerySegment),混合模型(MixSegment),共四種分詞模式。本次推送將介紹R中jiebaR程序包關於中文分詞的具體方法。安裝軟體包

install.packages("jiebaR")

默認引擎分詞jiebaR默認使用混合模型(MixSegment)進行分詞,可對語句(變量)和文檔(路徑)分詞。對語句進行分詞

library(jiebaR) 

engine1 = worker()
words="我希望未來會很好"

engine1[words]            #方法1
engine1<=words               #方法2
segment(words",engine1)   #方法3

[1] "我"   "希望" "未來" "會"   "很"   "好"

對文本文件進行分詞like.txt新的一學年開始了,結束了大一的驕傲和浮躁之後,橋川、鍾白、任逸帆等人順利進入了大二。肖海洋也通過了大一的考試,如願以償沒有留級。大一的同窗情誼依舊繼續。過了一個假期,大二伊始,舊同學的離開和新同學的加入,讓他們之間的關係也發生了微妙變化。顧一心隨家人去了美國上學, 畢十三把這份牽掛變成了學習上奮進的動力。轉學生許連翹新轉入電攝班並貌似帶著神秘的任務。原班主任的離開,讓原本散漫的電攝班開始團結。
人物的新舊交替,和大二課業的豐富與繁重,2015級電攝班大二的同窗故事更加精彩。這時的他們褪去了大一的青澀,迎來大學中成長速度最快的一年。九個人開啟了各自的夢想,並在跌跌撞撞中實現自己的夢想。又是一年大學時光的流逝,九位同窗好友之間的情誼越來越濃。

library(jiebaR) 

engine1 = worker()
segment['like.txt',engine1]

[1] "C:/Users/Li/Documents/RData/like.segment.2020-08-12_22_09_29.txt"

新 的 一 學年 開始 了 結束 了 大 一 的 驕傲 和 浮躁 之後 橋川 鍾 白 任 逸 帆 等 人 順利 進入 了 大二 肖 海洋 也 通過 了 大 一 的 考試 如願以償 沒有 留級 大一 的 同窗 情誼 依舊 繼續 過 了 一個 假期 大二 伊始 舊 同學 的 離開 和 新 同學 的 加入 讓 他們 之間 的 關係 也 發生 了 微妙 變化 顧 一心 隨 家人 去 了 美國 上學 畢 十三 把 這份 牽掛 變成 了 學習 上 奮進 的 動力 轉 學生 許 連翹 新 轉入 電攝 班 並 貌似 帶 著 神秘 的 任務 原 班主任 的 離開 讓 原本 散漫 的 電 攝班 開始 團結 人物 的 新舊交替 和 大二 課業 的 豐富 與 繁重 2015 級 電 攝班 大二 的 同窗 故事 更加 精彩 這時 的 他們 褪去 了 大 一 的 青澀 迎來 大學 中 成長 速度 最快 的 一年 九個 人 開啟 了 各自 的 夢想 並 在 跌跌撞撞 中 實現 自己 的 夢想 又 是 一年 大學 時光 的 流逝 九位 同窗好友 之間 的 情誼 越來越 濃更多分詞引擎在調用worker()函數時,我們實際是在加載jiebaR庫的分詞引擎。jiebaR庫中提供了8種分詞引擎。混合模型(MixSegment):默認引擎。四個分詞引擎裡面分詞效果較好,結合使用最大概率法和隱式馬爾科夫模型。最大概率法(MPSegment) :負責根據Trie樹構建有向無環圖和進行動態規划算法,是分詞算法的核心。全分詞模型(FullSegment):將枚舉字典中所有可能的單詞隱式馬爾科夫模型(HMMSegment):是根據基於人民日報等語料庫構建的HMM模型來進行分詞,主要算法思路是根據(B,E,M,S)四個狀態來代表每個字的隱藏狀態。HMM模型由dict/hmm_model.utf8提供。分詞算法即viterbi算法。索引模型(QuerySegment):先使用混合模型進行切詞,再對於切出來的較長的詞,枚舉句子中所有可能成詞的情況,找出詞庫裡存在。標記模型(tag):先使用混合模型進行切詞,並在切分後使用與ictclas兼容的標籤對詞進行詞性標註。Simhash模型(simhash):使用關鍵字提取worker查找關鍵字,並使用Simhash算法計算Simhash值。參數解釋

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

type, 引擎類型,包括 mix, mp,hmm,full, query,tag, simhash, 和keywords.write, 是將輸出寫入文件,還是在對象中返回結果。僅在輸入為文件路徑使用。默認TRUE。encoding, 輸入文件的編碼,默認UTF-8lines, 每次讀取文件的最大行數,用於控制讀取文件的長度。大文件則會分次讀取。更改分詞引擎配置項可以在調用worker()創建分詞引擎時改變分詞引擎的配置項,也可以通過WorkerName$symbol = T的形式來進行設置
以下為幫助手冊中的例子:

engine2 = worker("hmm")                    #創建時更改配置項
segment("./temp.txt", engine2)        

engine2$write = T                        #通過$更改配置項
segment("./temp.txt", engine2)

engine3 = worker(type = "mix", dict = "dict_path",symbol = T)        #指定系統詞典,並保留符號
segment("./temp.txt", engine3)

#關鍵詞模式,篩選1個關鍵詞
engine = worker("keywords", topn = 1)        #關鍵詞模式,篩選1個關鍵詞
keywords(words, engine)

#標記模式,對分好後的每個詞標記詞性
tagger = worker("tag")
tagging("我愛廈門", tagger)
#     r      v     ns 
#  "我"   "愛" "廈門" 
#    r:代詞 v:動詞  ns:地名

### Simhash模型,篩選一個關鍵詞
simhasher = worker("simhash", topn = 1)
simhash(words, simhasher)                   #計算關鍵詞和原文的simhash值
distance("hello world" , "hello world!" , simhasher)        #該函數使用Simhash引擎進行關鍵字提取,從兩個輸入中找到關鍵字,然後計算它們之間的Hamming距離。

自定義用戶詞典自定義用戶詞典mydict.utf8包括:一學年 大一 鍾白 任逸帆 肖海洋

engine=worker(user="mydict.utf8") 
segment['like.txt',engine]

輸出結果:在同目錄下生成分詞結果的文本文件,第一行內容如下:新 的 一學年 開始 了 結束 了 大一 的 驕傲 和 浮躁 之後 橋川 鍾 白 任逸帆 等 人 順利 進入 了 大二 肖海洋 也 通過 了 大 一 的 考試停止詞處理「的」,「哦」,「哎呦」,「而且」,「了」,「是」等一般被視為停用詞。在jiebaR 中,可以通過詞性標註去除停用詞,也可通過指定停用詞詞典去除停用詞。詞性標註法:

stop=c('r','p')
sentence=worker(type = "tag") 
sentence_words<-sentence<="脫貧攻堅是我們黨對全國各族人民的莊嚴承諾,事關全面小康、家國夢想" 
sentence_words[!(names(sentence_words) %in% stop)]#去除停止詞是代詞,介詞

        v         vn          v          n          n          l         uj          a          v 
    "脫貧"     "攻堅"       "是"       "黨"     "全國" "各族人民"       "的"     "莊嚴"     "承諾" 
         n          n         nr          q          n          n 
    "事關"     "全面"     "小康"       "家"       "國"     "夢想" 

指定停止詞詞典假設停止詞詞典文本文件(可以用記事本打開,並另存為UFT-8編碼格式),如下:
是     我們  對   的

註:停止詞詞典txt文件一定要放在R語言的工作目錄下才行,而且txt文件的第一行需為空行否則無法導入停用詞典,當前工作目錄路徑採用getwd()得知。

sentence=worker(stop_word='stop.txt') 
sentence_words<-sentence<="脫貧攻堅是我們黨對全國各族人民的莊嚴承諾,事關全面小康、家國夢想"
sentence_words

[1] "脫貧"     "攻堅"     "黨"      "全國"     "各族人民"    "莊嚴"     "承諾"     "事關"     "全面"     
[10] "小康"     "家"       "國"       "夢想" 

註:操作平臺為R Studio (R 4.0.2)文章來源:https://www.cnblogs.com/Hyacinth-Yuan/p/8243476.html,更多請點擊「閱讀原文」

相關焦點

  • R語言 | jiebaR中文分詞包
    jiebaR中文與英文做文本分析很多時候會多一個分詞步驟,因為默認情況下,文本分析軟體會默認用空格作為分隔符處理文本,所以很多軟體需要先將中文文本分詞,整理成像英文那樣用空格間隔單詞的數據形式。在R中有一個jiebaR中文分詞包,可以幫我們做分詞操作~安裝install.packages("jiebaR")分詞jiebaR::segment(code, jiebar)jiebar: 老闆segment
  • jiebaR 0.1 發布,R語言中文分詞
    通過Rcpp Modules實現同時加載多個分詞系統,可以分別使用不同的分詞模式和詞庫。支持多種分詞模式、中文姓名識別、關鍵詞提取、詞性標註以及文本Simhash相似度比較等功能。支持加載自定義用戶詞庫,設置詞頻、詞性。
  • jiebaR 0.3 發布,R語言中文分詞
    jiebaR 中文分詞 0.3 版本發布,此版本更新內容如下: 編譯改進 Bugs 修正
  • R語言怎麼給中文分詞?
    作者:王亨 ,R語言中文社區專欄作者,跟著菜鳥一起一步步學習R語言,爭做R語言高手。
  • 分詞|Python最好的中文分詞庫
    jieba庫最出名的功能就是中文分詞,在jieba中提供了三種常用的分詞模式:精確模式:將句子按照最精確的方法進行切分,適合用於進行文本分析;全模式:將句子當中所有可以成詞的詞語都掃描出來,分詞速度很快但容易產生歧義;搜尋引擎模式:在精確模式分詞的基礎上,將長的句子再次進行切分,提高召回率,適用於搜尋引擎的分詞。
  • 為什麼中文分詞比英文分詞更難?有哪些常用算法?(附代碼)
    如在以下例子中,兩種分拆方式代表的語義都有可能:南京市|長江|大橋南京|市長|江大橋為了解決分詞中的歧義性,許多相關算法被提出並在實踐中取得了很好的效果。下面將對中文分詞和英文分詞進行介紹。01 中文分詞在漢語中,句子是單詞的組合。
  • 如何用Python做中文分詞?
    打算繪製中文詞雲圖?那你得先學會如何做中文文本分詞。跟著我們的教程,一步步用Python來動手實踐吧。(由於微信公眾號外部連結的限制,文中的部分連結可能無法正確打開。如有需要,請點擊文末的「閱讀原文」按鈕,訪問可以正常顯示外鏈的版本。)需求在《如何用Python做詞雲》一文中,我們介紹了英文文本的詞雲製作方法。大家玩兒得可還高興?
  • 【NLP】為什麼中文分詞比英文分詞更難?有哪些常用算法?(附代碼)
    如在以下例子中,兩種分拆方式代表的語義都有可能:南京市|長江|大橋南京|市長|江大橋為了解決分詞中的歧義性,許多相關算法被提出並在實踐中取得了很好的效果。下面將對中文分詞和英文分詞進行介紹。01 中文分詞在漢語中,句子是單詞的組合。
  • 中文分詞工具評估:chinese-segmentation-evaluation
    這裡有一個Java開源項目cws_evaluation,對中文分詞做了評比,但有幾點不足:(1). 只有java版本,但是機器學習主要是基於python的 (2).效果指標為行完美率和字完美率,該指標不妥,特別是句子越長,越無意義,(3). 每種分詞工具評測的算法太多了,這裡僅評比了默認的分詞算法。
  • 一文詳解如何用 python 做中文分詞
    打算繪製中文詞雲圖?那你得先學會如何做中文文本分詞。跟著我們的教程,一步步用 Python 來動手實踐吧。你的問題應該是:如何用電腦把中文文本正確拆分為一個個的單詞呢?這種工作,專業術語叫做分詞。在介紹分詞工具及其安裝之前,請確認你已經閱讀過《從零開始教你用 Python 做詞雲》一文,並且按照其中的步驟做了相關的準備工作,然後再繼續依照本文的介紹一步步實踐。  分詞中文分詞的工具有很多種。
  • NLP快速入門:手把手教你用HanLP做中文分詞
    中文分詞技術作為中文自然語言處理的第一項核心技術,是眾多上層任務的首要基礎工作,同時在日常的工作中起著基礎性的作用。本文將講解如何在Python環境下調用HanLP包進行分詞,並結合Python語言簡約的特性,實現一行代碼完成中文分詞。
  • 【分詞】中文分詞的古今中外,你想知道的都在這裡
    中的"Hey"和"you"是需要與身後的標點分隔開的為什麼需要分詞?能不能不分詞?中文分詞難在哪?從古至今的分詞算法:詞典到預訓練從中到外的分詞工具對於中文來說,如果不進行分詞,那麼神經網絡將直接基於原始的漢字序列進行處理和學習。
  • 中文分詞文章索引和分詞數據資源分享
    ,除了基於深度學習的分詞方法還沒有探討外,「古典」機器學習時代的中文分詞方法都有涉及,從基於詞典的中文分詞(最大匹配法),到基於統計的分詞方法(HMM、最大熵模型、條件隨機場模型CRF),再到Mecab、NLTK中文分詞,都有所涉及。
  • NLP的中文分詞面試指南
    在NLP領域裡,中文分詞對於處在中文語言環境的我們來說,是基礎中的基礎,核心中的核心,涉及到的知識點覆蓋面很廣。所以很多關於NLP的面試中都會問到中文分詞的問題,很多NLP任務都依賴中文分詞的結果,同時中文分詞所使用的技術可以很好的應用到其它領域,比如:語音識別、實體識別等等。
  • 中文分詞工具測評
    引言分詞對於研究和應用中文自然語言處理的童鞋來說,都是一個非常非常基礎的部件,分詞的質量直接影響到後續詞性標註、命名實體識別、句法分析等部件的準確性
  • 用TensorFlow構建一個中文分詞模型需要幾個步驟
    這裡面我們主要以後者為參考。中文分詞往往有兩個直接目標,一個是把詞彙分開,另一個給每個詞以詞性,例如動詞、名詞,或者更細分的地點名詞、機構名詞等等。如果只是分詞,是中文分詞任務(SEG,Chinese Segmentation),如果需要詞性,也可以被稱為詞性標註任務(POS,Part os Speech)任務。
  • 常見中文分詞包比較
    2 snownlpSnowNLP是一個python寫的類庫,可以方便地處理中文文本內容,是受到了TextBlob的啟發而寫的,由於現在大部分的自然語言處理庫基本都是針對英文的,於是寫了一個方便處理中文的類庫,並且和TextBlob不同的是,這裡沒有用NLTK,所有的算法都是自己實現的,並且自帶了一些訓練好的字典
  • 探索小米開源分詞MiNLP基於深度學習的分詞工作
    MiNLP-Tokenizer中文分詞工具經過不斷優化和實戰打磨,已於2020年11月正式對外開源。MiNLP團隊計劃在2021年Q2完成所有詞法工具(詞性標註和命名實體識別)的開源,從2021年Q3開始,MiNLP團隊將逐步開源句法分析和部分語義分析工具,和開發者一起打造功能強大、效果領先的NLP平臺。內部的兩套分詞方案都是基於深度學習的分詞方案。
  • 【分詞】從why到how的中文分詞詳解,從算法原理到開源工具
    中的"Hey"和"you"是需要與身後的標點分隔開的為什麼需要分詞?能不能不分詞?中文分詞難在哪?從古至今的分詞算法:詞典到預訓練從中到外的分詞工具對於中文來說,如果不進行分詞,那麼神經網絡將直接基於原始的漢字序列進行處理和學習。
  • PHP 實現中文分詞搜索功能
    中文分詞介紹眾所周知,英文是以詞為單位的,詞和詞之間是靠空格隔開,而中文是以字為單位,句子中所有的字連起來才能描述一個意思。例如,英文句子I am a student,用中文則為:「我是一個學生」。計算機可以很簡單通過空格知道student是一個單詞,但是不能很容易明白「學」、「生」兩個字合起來才表示一個詞。