實訓中的天然語言處理部分,首先就是要分詞了,學習一下!正則表達式
使用jiebaR的第一步固然是安裝jiabaR包並加載咯算法
安裝: install.packages("jiebaR") 加載: library(jiebaR) app
三種分詞語句的寫法:函數
wk = worker() #方法1 wk["我但願將來會很好"] #方法2 wk<="我但願將來會很好" #此處用=的話可不行喲 #方法3 segment("我但願將來會很好",wk)
結果都是同樣的,以下
[1] "我" "但願" "將來" "會" "很" "好" 學習
固然也可對文本文件進行分詞:當前目錄下建立文本文件like.txtui
##like.txt 新的一學年開始了,結束了大一的驕傲和浮躁以後,橋川、鍾白、任逸帆等人順利進入了大二。肖海洋也經過了大一的考試,如願以償沒有留級。大一的同學情誼依舊繼續。過了一個假期,大二伊始,舊同窗的離開和新同窗的加入,讓他們之間的關係也發生了微妙變化。顧一心隨家人去了美國上學, 畢十三把這份牽掛變成了學習上奮進的動力。轉學生許連翹新轉入電攝班並貌似帶着神祕的任務。原班主任的離開,讓本來散漫的電攝班開始團結。 人物的新舊交替,和大二課業的豐富與繁重,2015級電攝班大二的同學故事更加精彩。這時的他們褪去了大一的青澀,迎來大學中成長速度最快的一年。九我的開啓了各自的夢想,並在跌跌撞撞中實現本身的夢想。又是一年大學時光的流逝,九位同學好友之間的情誼愈來愈濃。
而後,輸入 wk['like.txt'] ,此時同等價於 segment('like.txt',wk) , wk<='like.txt' 編碼
返回 [1] "like.segment.2018-01-08_16_13_17.txt" ,即在同目錄下生成了分好詞的文件,以下:spa
##like.segment.2018-01-08_16_13_17.txt 新 的 一 學年 開始 了 結束 了 大 一 的 驕傲 和 浮躁 以後 橋川 鍾 白 任 逸 帆 等 人 順利 進入 了 大二 肖 海洋 也 經過 了 大 一 的 考試 如願以償 沒有 留級 大一 的 同學 情誼 依舊 繼續 過 了 一個 假期 大二 伊始 舊 同窗 的 離開 和 新 同窗 的 加入 讓 他們 之間 的 關係 也 發生 了 微妙 變化 顧 一心 隨 家人 去 了 美國 上學 畢 十三 把 這份 牽掛 變成 了 學習 上 奮進 的 動力 轉 學生 許 連翹 新 轉入 電攝 班 並 貌似 帶 着 神祕 的 任務 原 班主任 的 離開 讓 本來 散漫 的 電 攝班 開始 團結 人物 的 新舊交替 和 大二 課業 的 豐富 與 繁重 2015 級 電 攝班 大二 的 同學 故事 更加 精彩 這時 的 他們 褪去 了 大 一 的 青澀 迎來 大學 中 成長 速度 最快 的 一年 九個 人 開啓 了 各自 的 夢想 並 在 跌跌撞撞 中 實現 本身 的 夢想 又 是 一年 大學 時光 的 流逝 九位 同學好友 之間 的 情誼 愈來愈 濃
so easy 吧,如今讓咱們看一下剛剛到底發生了些什麼.net
在調用worker()函數時,咱們實際是在加載jiebaR庫的分詞引擎。jiebaR庫提供了7種分詞引擎。3d
通常狀況下,使用默認引擎(混合模型)就足夠了。
下面讓咱們仔細研究如下work()函數
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")
各參數的含義以下:
work()函數的默認配置:
若是咱們想改變分詞引擎的配置項,能夠在調用worker()建立分詞引擎時,也能夠經過wk$XX來進行設置
編寫自定義的詞典文件,mydict.utf8
而後,在調用worker時設置自定義的用戶詞典 wk=worker(user="mydict.utf8")
再次對like.txt執行分詞,獲得的結果以下:
【自定義詞典結果】
【默認詞典結果】
duang,是否是頗有效果
此外,過濾中止詞的本質與自定義詞典是同樣的啦,只要把中止詞的默認文件換成本身的中止詞文件就好啦
例如將參數改成: stop_word="stop.txt"
此外此外,還可能須要去除數據字母,可用正則表達式,用stringr包去除空格等
jiabaR包中有自動計算獲取詞頻的函數,freq()
那文件怎麼辦呢???那就須要讀取分詞後的文件處理一下,再統計詞頻了
其實也就是一句代碼的事情,啊不,兩句。以上面like.txt分詞後的文件like_segment.txt爲例
out=file("like_segment.txt")
freq(strsplit(readLines(out,encoding="UTF-8")," ")[[1]])
注意:freq的參數是向量。此外,統計詞頻還能夠用table()函數
詞性標註可使用worker函數的type參數,type默認爲mix,僅需將它設置爲tag便可
jiebaR包關於詞典詞性標記,採用ictclas的標記方法。ICTCLAS 漢語詞性標註集。標註及含義:
標註 | 詞性 | 標註 | 詞性 |
a | 形容詞 | Ag | 形容詞素 |
n | 名詞 | Ng | 名詞詞素 |
nr | 人名 | m | 數詞 |
d | 副詞 | Dg | 副詞詞素 |
c | 連詞 | e | 嘆詞 |
nr | 人名 | ns | 地名 |
t | 時間詞 | nt | 機構團體 |
更多的詞性標記對應請見:點擊
此時,文件操做與此相同。 wk<="like.txt" 便可
依舊能夠經過改變worker()的type參數便可
其中,keywords時, wk<=words 等同於 vector_keywords(words,wk) , keywords(words,wk)
simhash與之類似。
此外,文件分詞操做與此相似。
此外,jiebaR中還有可能會用到的函數:
一、在默認用戶詞典的基礎上,添加新的用戶詞 new_user_word ,但僅做用於當前分詞引擎
二、停用詞過濾函數:filter_segment(分詞後的向量,過濾詞向量)
三、顯示詞典路徑: show_dictpath()
四、分詞的快速模式 qseg (quick segmentation) qseg<=text
五、在線jiebaR分詞:https://qinwf.shinyapps.io/jiebaR-shiny/
六、get_tuple() 返回分詞結果中 n 個連續的字符串組合的頻率狀況,能夠做爲自定義詞典的參考