中文斷詞

文章推薦指數: 80 %
投票人數:10人

目前繁體中文斷詞系統有中研院CKIP 以及jieba,在一些舊的文章中都提到jieba 無法適當地處理繁體中文,而有替換繁體中文字典的改進作法,不過 ... 2020/08/03 中文斷詞 在中文自然語言處理NLP中,要對一堆文字詞語組成的文章進行分析,分析前要先拆解文章,也就是斷詞,我們要分析的對象是詞語,而不是一個一個中文字,這跟英文完全不同,因為英文的斷詞就直接用標點符號、空白去區隔即可。

目前繁體中文斷詞系統有中研院CKIP以及jieba,在一些舊的文章中都提到jieba無法適當地處理繁體中文,而有替換繁體中文字典的改進作法,不過目前jieba已經到了0.42版,以下先了解官方的套件的功能,再看看需不需要修改繁體中文字典。

jieba演算法 基於前綴詞典實現高效的詞圖掃描,生成句子中漢字所有可能成詞情況所構成的有向無環圖(DAG) 採用了動態規劃查找最大概率路徑,找出基於詞頻的最大切分組合 對於未登錄詞,採用了基於漢字成詞能力的HMM模型,使用了Viterbi算法 安裝 可直接用pip安裝,或是將jiebasourcecode的jieba目錄放在目前的工作目錄,或是site-packages目錄中 如果要使用paddle的分詞語詞性標注功能,必須安裝paddlepaddle-tiny pip3installpaddlepaddle-tiny==1.6.1 先直接下載sourcecode試試看 wgethttps://github.com/fxsjy/jieba/archive/v0.42.1.tar.gz-Ojieba-0.41.1.tgz tarzxvfjieba-0.41.1.tgz virtualenvironemnt virtualenv--system-site-packages/root/venv-jieba source/root/venv-jieba/bin/activate ##如果不使用paddlepaddle,這兩個套件也可以不安裝 pip3installnumpy==1.16.4 pip3installpaddlepaddle-tiny==1.6.1 #把sorucecode中的jieba目錄移動到工作目錄中 mv~/temp/download/jieba-0.41.1/jieba~/temp 斷詞 有四種斷詞模式 精確模式,試圖將句子最精確地切開,適合文本分析 完整模式,把句子中所有的可以成詞的詞語都掃描出來,速度非常快,但是不能解決歧義; 搜索引擎模式,在精確模式的基礎上,對長詞再次切分,提高召回率,適合用於搜索引擎分詞。

paddle模式,利用PaddlePaddle深度學習框架,訓練序列標注(雙向GRU)網絡模型實現分詞。

同時支持詞性標注。

paddle模式使用需安裝paddlepaddle-tiny 函式 jieba.cut方法接受四個輸入參數:需要分詞的字符串;cutall參數用來控制是否採用全模式;HMM參數用來控制是否使用HMM模型;usepaddle參數用來控制是否使用paddle模式下的分詞模式,paddle模式採用延遲加載方式,通過enable_paddle接口安裝paddlepaddle-tiny,並且import相關代碼 jieba.cutforsearch方法接受兩個參數:需要分詞的字符串;是否使用HMM模型。

該方法適合用於搜索引擎構建倒排索引的分詞,粒度比較細 待分詞的字符串可以是unicode或UTF-8字符串、GBK字符串。

注意:不建議直接輸入GBK字符串,可能無法預料地錯誤解碼成UTF-8 jieba.cut以及jieba.cutforsearch返回的結構都是一個可迭代的generator,可以使用for循環來獲得分詞後得到的每一個詞語(unicode),或者用 jieba.lcut以及jieba.lcutforsearch直接返回list jieba.Tokenizer(dictionary=DEFAULT_DICT)新建自定義分詞器,可用於同時使用不同詞典。

jieba.dt為默認分詞器,所有全局分詞相關函數都是該分詞器的映射。

#encoding=utf-8 importjieba print() print("完整模式:") seg_list=jieba.cut("肺炎疫情的挑戰日益嚴峻,新竹清華大學自農曆年起陸續已採取了量測體溫等全面的防疫措施。

",cut_all=True) print("FullMode:"+"/".join(seg_list))#全模式 print() print("精確模式:") seg_list=jieba.cut("肺炎疫情的挑戰日益嚴峻,新竹清華大學自農曆年起陸續已採取了量測體溫等全面的防疫措施。

",cut_all=False) print("DefaultMode:"+"/".join(seg_list))#精確模式 print() print("預設是精確模式:") seg_list=jieba.cut("肺炎疫情的挑戰日益嚴峻,新竹清華大學自農曆年起陸續已採取了量測體溫等全面的防疫措施。

")#預設是精確模式 print(",".join(seg_list)) print() print("搜索引擎模式:") seg_list=jieba.cut_for_search("肺炎疫情的挑戰日益嚴峻,新竹清華大學自農曆年起陸續已採取了量測體溫等全面的防疫措施。

")# print(",".join(seg_list)) print() print("PaddleMode:") jieba.enable_paddle()#啓動paddle模式。

0.40版之後開始支持,早期版本不支持 strs=["肺炎疫情的挑戰日益嚴峻,新竹清華大學自農曆年起陸續已採取了量測體溫等全面的防疫措施。

","乒乓球拍賣完了","新竹清華大學"] forstrinstrs: seg_list=jieba.cut(str,use_paddle=True)#使用paddle模式 print("PaddleMode:"+'/'.join(list(seg_list))) 執行結果 完整模式: Buildingprefixdictfromthedefaultdictionary... Loadingmodelfromcache/tmp/jieba.cache Loadingmodelcost0.433seconds. Prefixdicthasbeenbuiltsuccessfully. FullMode:肺炎/疫情/的/挑/戰/日益/嚴/峻/,/新竹/清/華/大/學/自/農/曆/年/起/陸/續/已/採/取/了/量/測/體/溫/等/全面/的/防疫/措施/。

精確模式: DefaultMode:肺炎/疫情/的/挑戰/日益/嚴峻/,/新竹/清華大學/自農/曆/年/起/陸續/已/採取/了/量/測體/溫/等/全面/的/防疫/措施/。

預設是精確模式: 肺炎,疫情,的,挑戰,日益,嚴峻,,,新竹,清華大學,自農,曆,年,起,陸續,已,採取,了,量,測體,溫,等,全面,的,防疫,措施,。

搜索引擎模式: 肺炎,疫情,的,挑戰,日益,嚴峻,,,新竹,清華大學,自農,曆,年,起,陸續,已,採取,了,量,測體,溫,等,全面,的,防疫,措施,。

PaddleMode: W032711:45:31.17975221561init.cc:157]AVXisavailable,Pleasere-compileonlocalmachine Paddleenabledsuccessfully...... PaddleMode:肺炎/疫情/的/挑戰/日益/嚴/峻,新竹清華大學自農曆年起陸續/已/採取/了/量測體溫/等/全面/的/防疫/措施/。

PaddleMode:乒乓/球拍/賣/完/了 PaddleMode:新竹/清華大學 jieba.lcut()lcut(),意思跟cut()是一樣的,只是返回的型態變成list #encoding=utf-8 importjieba print() print("完整模式:") seg_list=jieba.lcut("肺炎疫情的挑戰日益嚴峻,新竹清華大學自農曆年起陸續已採取了量測體溫等全面的防疫措施。

",cut_all=True) print("FullMode:",seg_list)#全模式 print() print("精確模式:") seg_list=jieba.lcut("肺炎疫情的挑戰日益嚴峻,新竹清華大學自農曆年起陸續已採取了量測體溫等全面的防疫措施。

",cut_all=False) print("DefaultMode:",seg_list)#精確模式 print() print("預設是精確模式:") seg_list=jieba.lcut("肺炎疫情的挑戰日益嚴峻,新竹清華大學自農曆年起陸續已採取了量測體溫等全面的防疫措施。

")#預設是精確模式 print(seg_list) print() print("搜索引擎模式:") seg_list=jieba.lcut_for_search("肺炎疫情的挑戰日益嚴峻,新竹清華大學自農曆年起陸續已採取了量測體溫等全面的防疫措施。

")# print(seg_list) print() print("PaddleMode:") jieba.enable_paddle()#啓動paddle模式。

0.40版之後開始支持,早期版本不支持 strs=["肺炎疫情的挑戰日益嚴峻,新竹清華大學自農曆年起陸續已採取了量測體溫等全面的防疫措施。

","乒乓球拍賣完了","新竹清華大學"] forstrinstrs: seg_list=jieba.lcut(str,use_paddle=True)#使用paddle模式 print("PaddleMode:",seg_list) 自訂詞典 雖然jieba有新詞識別能力,但是自行添加新詞可以保證更高的正確率 用法:jieba.loaduserdict(filename) file_name為文件類對象或自定義詞典的路徑 詞典格式和dict.txt一樣,一個詞佔一行;每一行分三部分:詞語、詞頻(可省略)、詞性(可省略),用空格隔開,順序不可顛倒。

file_name若為路徑或二進制方式打開的文件,則文件必須為UTF-8編碼。

詞頻省略時使用自動計算的方式處理,能保證分出該詞的詞頻。

使用addword(word,freq=None,tag=None)和delword(word)可在程序中動態修改詞典。

使用suggest_freq(segment,tune=True)可調節單個詞語的詞頻,使其能(或不能)被分出來。

注意:自動計算的詞頻在使用HMM新詞發現功能時可能無效。

在專案路徑下新增一個檔案叫做:userdict.txt 內容如下: 農曆年 量測 體溫 日益嚴峻 可在程式一開始,就載入自訂詞典 jieba.load_userdict('userdict.txt') 執行結果 精確模式: DefaultMode:['肺炎','疫情','的','挑戰','日益嚴峻',',','新竹','清華大學','自','農曆年','起陸續','已','採取','了','量測','體溫','等','全面','的','防疫','措施','。

'] 可動態調整詞語的頻率 jieba.suggest_freq(('陸續'),True) print() print("精確模式2:") seg_list=jieba.lcut("肺炎疫情的挑戰日益嚴峻,新竹清華大學自農曆年起陸續已採取了量測體溫等全面的防疫措施。

",cut_all=False) print("DefaultMode:",seg_list)#精確模式 執行結果 精確模式2: DefaultMode:['肺炎','疫情','的','挑戰','日益嚴峻',',','新竹','清華大學','自','農曆年','起','陸續','已','採取','了','量測','體溫','等','全面','的','防疫','措施','。

'] 也可以直接替換詞典 ithomeironman/day16NLP_Chinese/可下載一個繁體中文的字典dict.txt.big #encoding=utf-8 importjieba jieba.set_dictionary('dict.txt.big') #withopen('stops.txt','r',encoding='utf8')asf: #stops=f.read().split('\n') print() print("精確模式:") seg_list=jieba.lcut("肺炎疫情的挑戰日益嚴峻,新竹清華大學自農曆年起陸續已採取了量測體溫等全面的防疫措施。

",cut_all=False) print("DefaultMode:",seg_list) 關鍵詞抽取 TF-IDF方法 #jieba.analyse.extract_tags(sentence,topK=20,withWeight=False,allowPOS=()) #sentence為待提取的文本 #topK為返回幾個TF/IDF權重最大的關鍵詞,默認值為20 #withWeight為是否一並返回關鍵詞權重值,默認值為False #allowPOS僅包括指定詞性的詞,默認值為空,即不篩選 #jieba.analyse.TFIDF(idf_path=None)新建TFIDF實例,idf_path為IDF頻率文件 TextRank方法 jieba.analyse.textrank(sentence,topK=20,withWeight=False,allowPOS=('ns','n','vn','v'))直接使用,接口相同,注意默認過濾詞性。

jieba.analyse.TextRank()新建自定義TextRank實例 #-*-coding:utf-8-*- importjieba importjieba.analyse jieba.set_dictionary('dict.txt.big') print() text='肺炎疫情的挑戰日益嚴峻,新竹清華大學自農曆年起陸續已採取了量測體溫等全面的防疫措施。

' tags=jieba.analyse.extract_tags(text,topK=10) print(tags) #['挑戰','嚴峻','清華大學','農曆年','陸續','採取','測體溫','防疫','新竹','肺炎'] print() print('textrank:') forx,winjieba.analyse.textrank(text,withWeight=True): print('%s%s'%(x,w)) #textrank: #日益1.0 #全面1.0 #肺炎0.6631715416020616 #防疫0.6631715416020616 #疫情0.6605033585768562 #措施0.6605033585768562 #新竹0.3607120276929184 #了量0.3607120276929184 詞性標注 ref:彙整中文與英文的詞性標註代號:結巴斷詞器與FastTag/IdentifythePartofSpeechinChineseandEnglish 結巴預設會將標點符號標示為「x」,而不是「w」。

而且英文會被標示為「eng」 #-*-coding:utf-8-*- importjieba importjieba.possegaspseg text='肺炎疫情的挑戰日益嚴峻,新竹清華大學自農曆年起陸續已採取了量測體溫等全面的防疫措施。

' seg_list=pseg.lcut(text) #print("DefaultMode:",seg_list) forword,flaginseg_list: print("",word,":",flag) 執行結果 肺炎:n 疫情:n 的:uj 挑戰:vn 日益:n 嚴峻:a ,:x 新竹:ns 清華大學:nt 自:p 農:ng 曆:zg 年:q 起:v 陸:nr 續:v 已:d 採:v 取:v 了:ul 量:n 測:v 體:ng 溫:v 等:u 全面:n 的:uj 防疫:vn 措施:n 。

:x wordcloud 參考這篇文章中文自然語言處理基礎以及資源 下載檔案: cloud_mask7.png sumsun.ttf stops.txt 安裝其它套件 pip3installcollections pip3installwordcloud pip3installmatplotlib yum-yinstallpython-imaging importjieba jieba.set_dictionary('dict.txt.big')#如果是使用繁體文字,請記得去下載繁體字典來使用 withopen('stops.txt','r',encoding='utf8')asf: stops=f.read().split('\n') text="肺炎疫情的挑戰日益嚴峻,新竹清華大學自農曆年起陸續已採取了量測體溫等全面的防疫措施。

" fromcollectionsimportCounter fromwordcloudimportWordCloud frommatplotlibimportpyplotasplt stops.append('\n')##換行符號,加入停用字中,可以把它拿掉 stops.append('\n\n') terms=[tfortinjieba.cut(text,cut_all=True)iftnotinstops] sorted(Counter(terms).items(),key=lambdax:x[1],reverse=True)##這個寫法很常出現在Counter中,他可以排序,list每個item出現的次數。

plt.clf() wordcloud=WordCloud(font_path="simsun.ttf")##做中文時務必加上字形檔 wordcloud.generate_from_frequencies(frequencies=Counter(terms)) plt.figure(figsize=(15,15)) plt.imshow(wordcloud,interpolation="bilinear") plt.axis("off") plt.savefig('cloud1.png') fromPILimportImage importnumpyasnp alice_mask=np.array(Image.open("cloud_mask7.png"))##請更改cloud_mask7.png路徑 wc=WordCloud(background_color="white",max_words=2000,mask=alice_mask,font_path="simsun.ttf") wc.generate_from_frequencies(Counter(terms))##請更改Counter(terms) wc.to_file("cloud2.png")##如果要存檔,可以使用 #plt.clf() #plt.imshow(wc,interpolation='bilinear') #plt.axis("off") #plt.figure() #plt.imshow(alice_mask,cmap=plt.cm.gray,interpolation='bilinear') #plt.axis("off") #plt.savefig('cloud2.png') References pypijieba jieba原始github python-11-利用jieba實現中文斷詞 NLP中文斷詞最方便的開源工具之一——Jieba Python-知名Jieba中文斷詞工具教學 2017 結巴中文斷詞台灣繁體版本APCLab 結巴中文斷詞台灣繁體版本ldkrsi 張貼者: maxkit 於 09:05 以電子郵件傳送這篇文章BlogThis!分享至Twitter分享至Facebook分享到Pinterest 標籤: ASR 沒有留言: 張貼留言 較新的文章 較舊的文章 首頁 訂閱: 張貼留言(Atom) PopularPosts MQTT(一)簡介 前言會知道MQTT協定,要先回憶起兩年前,當初想找找Android的PushNotification的解決方案,先是找到了當時GCM的前身C2DM,以為Google已經提供了此服務,測試了一下code也蠻容易上手的,結果發現到他有quota限制,不適合拿來當成產品,因... python函數的可變參數*args和**kwargs 一般函數的參數個數都是固定的,但如果遇到參數數量不固定的狀況,通常會將某些參數填上預設值,在pythonfunction可以支援兩種可變數量的參數*args和**kwargs。

以下例子中的fun雖然定義了三個參數,但是後面兩個填上預設值,呼叫該函數時,... DockerCompose初步閱讀與學習記錄 上次在看Dockerfile時,有注意到一個工具,DockerCompose。

透過這個工具,可以先寫一份檔案,預先定義好多個service,然後透過單一命令來啟動多個container執行你定義的service,讓他們組成一個你想要的應用服務。

直覺這是個docke... 在iOS應用程式中使用推播通知(PushNotification)功能-Provider以Java-apns實作 前言開發iOS應用程式時,我們常常需要連上自己的平台或伺服器建立連線,取得資料。

然而,當應用程式尚未開啟,或是已經被退到背景時,此時就無法讓使用者即時看到自己的伺服器送來的新資料了。

推播通知(ApplePushNotificationService,... 如何在Markdown輸入數學公式及符號 使用latex語法在Markdown輸入數學公式及符號數學公式1.如何插入公式有行內公式與獨立公式兩種$行內公式$$$獨立公式$$ex:行內公式\(F=ma\)獨立公式\[F=ma\]2.上下標上... pushnotification-androidclient以GCM實現(一) app發布後,想要從server發訊息給client時,該怎麼做呢?一直保持server與client間的連線?若server只是偶而或幾天才發送一次訊息,這樣做不僅耗電還浪費資源,重點是很可能被使用者移除!但是不保持連線,那要如何讓server主... AndroidNotification的基本用法,顯示通知列圖片、播放音效、振動 AndroidNotification的基本用法,顯示通知列圖片、播放音效、振動我們會發現,越來越多的手機軟體,都會使用「通知Notification」這項功能,主要用來提醒新訊息、公告或是提示訊息等...如圖片所示: 寫法其實很簡單,我們寫一個測... MQTT(二)MessageTypeandFlows MessageType在MQTT協定裡,當Client要連上MQTTServer時,需要發送一個type為"CONNECT"的訊息到MQTTServer,才能開始建立起連線;當Client想發佈訊息時,則要發送一個type為"PUBLIS... iBeacon偵測範例-androidclient 去年七月在一個講座上第一次聽到ibeacon這個名詞,那時候還不是這麼熱門google到的第一個就是 estimote 這間公司的產品,不過因為訂購過海關還會被NCC攔截...所以後面就沒再繼續追蹤。

不過今年跟朋友借到estimote的Beacon,終... 如何使用ApachePOI處理Excel檔案 ApachePOI是PoorObfuscationImplementation的縮寫,其目的是建立與讀取OfficeOpenXML(OOXML)標準和微軟的OLE2復合文檔格式(OLE2)的JavaAPI。

主要的元件有:Excel(SS=H... 網誌存檔 ►  2022 (19) ►  六月 (1) ►  五月 (4) ►  四月 (3) ►  三月 (4) ►  二月 (3) ►  一月 (4) ►  2021 (41) ►  十二月 (3) ►  十一月 (5) ►  十月 (3) ►  九月 (3) ►  八月 (3) ►  七月 (4) ►  六月 (3) ►  五月 (4) ►  四月 (4) ►  三月 (4) ►  二月 (2) ►  一月 (3) ▼  2020 (48) ►  十二月 (4) ►  十一月 (5) ►  十月 (4) ►  九月 (4) ▼  八月 (4) 8D問題解決法EightDisciplinesProblemSolving 判斷點是否在多邊形內的方法 詞向量WordEmbedding 中文斷詞 ►  七月 (3) ►  六月 (4) ►  五月 (4) ►  四月 (4) ►  三月 (5) ►  二月 (4) ►  一月 (3) ►  2019 (54) ►  十二月 (5) ►  十一月 (4) ►  十月 (4) ►  九月 (4) ►  八月 (4) ►  七月 (5) ►  六月 (5) ►  五月 (5) ►  四月 (6) ►  三月 (5) ►  二月 (3) ►  一月 (4) ►  2018 (44) ►  十二月 (3) ►  十一月 (4) ►  十月 (5) ►  九月 (3) ►  八月 (4) ►  七月 (3) ►  六月 (3) ►  五月 (4) ►  四月 (5) ►  三月 (4) ►  二月 (2) ►  一月 (4) ►  2017 (54) ►  十二月 (5) ►  十一月 (4) ►  十月 (4) ►  九月 (4) ►  八月 (4) ►  七月 (4) ►  六月 (6) ►  五月 (3) ►  四月 (6) ►  三月 (6) ►  二月 (5) ►  一月 (3) ►  2016 (47) ►  十二月 (4) ►  十一月 (4) ►  十月 (4) ►  九月 (4) ►  八月 (5) ►  七月 (2) ►  六月 (4) ►  五月 (4) ►  四月 (3) ►  三月 (6) ►  二月 (3) ►  一月 (4) ►  2015 (60) ►  十二月 (4) ►  十一月 (8) ►  十月 (4) ►  九月 (3) ►  八月 (6) ►  七月 (3) ►  六月 (5) ►  五月 (4) ►  四月 (5) ►  三月 (6) ►  二月 (3) ►  一月 (9) ►  2014 (140) ►  十二月 (7) ►  十一月 (6) ►  十月 (4) ►  九月 (10) ►  八月 (7) ►  七月 (9) ►  六月 (8) ►  五月 (10) ►  四月 (17) ►  三月 (21) ►  二月 (19) ►  一月 (22) ►  2013 (6) ►  十二月 (6)



請為這篇文章評分?