elasticsearch教程--中文分詞器作用和使用
概述
本文都是基於 elasticsearch安裝教程 中的elasticsearch安裝目錄(/opt/environment/elasticsearch-6.4.0)為範例
環境準備
· 全新最小化安裝的 centos 7.5
· elasticsearch 6.4.0
認識中文分詞器
在博文 elasticsearch分詞器中提到elasticsearch能夠快速的透過搜尋詞檢索出對應的文章歸功於倒排索引,下面透過中文舉例看看倒排索引。
中文分詞器作用以及效果
中文分詞器是做什麼的呢 ? what? 透過名字就知道了啊,為什麼還要問。。。下面透過三個文件示例,看看它是如何分詞的
文件 1: 我愛偉大的祖國
文件 2: 祝福祖國強大繁
文件 3: 我愛藍天白雲
經過中文分詞器 ,以上文件均會根據分詞規則,將文件進行分詞後的結果如下:
注意 :不同的分詞規則,分詞結果不一樣,選擇根據分詞器提供的分詞規則找到適合的分詞規則
文件 1分詞結果: [我,愛,偉大,的,祖國]
文件 2分詞結果: [祝福,祖國,強大,繁盛]
文件 3分詞結果: [我,愛,藍天白雲,藍天,白雲]
透過上面的分詞結果,發現拆分的每個詞都是我們熟知的詞語, 但是如果不使用中文分詞,就會發現上面的文件把每個字拆分成了一個詞,對我們中文檢索很不友好。
再看倒排索引
看到上面中文分詞器結果 ,就會有新的疑問,使用中文分詞器那樣分詞效果有什麼好處呢? 答案就是根據分詞建立詞彙與文件關係的倒排索引。這步都是es幫我們做的,下面透過"我","愛","祖國"三個詞看看倒排索引,如下圖:
透過上圖中的倒排索引 ,我們搜尋"祖國"時,es透過倒排索引可以快速的檢索出文件1和文件3。如果沒有中文分詞器,搜尋"祖國"就會被拆分"祖""國"兩個詞的倒排索引, 就會把包含"祖"的文件都檢索出來,很明顯就會和我們想要的結果大相徑庭。
常用的中文分詞器
Smart Chinese Analysis: 官方提供的中文分詞器,
IKAnalyzer: 免費開源的java分詞器,目前比較流行的中文分詞器之一,簡單,穩定,想要特別好的效果,需要自行維護詞庫,支援自定義詞典
結巴分詞 : 開源的python分詞器,github有對應的java版本,有自行識別新詞的功能,支援自定義詞典
Ansj中文分詞: 基於n-Gram+CRF+HMM的中文分詞的java實現,免費開源,支援應用自然語言處理
hanlp: 免費開源,國人自然處理語言牛人無私風險的
個人對以上分詞器進行了一個粗略對比 ,如下圖:
截止到目前為止 ,他們的分詞準確性從高到低依次是:
hanlp> ansj >結巴>IK>Smart Chinese Analysis
結合準確性來看 ,選用中文分詞器基於以下考慮:
官方的 Smart Chinese Analysis直接可以不考慮了
對搜尋要求不高的建議選用 IK 學習成本低,使用教程多,還支援遠端詞典
對新詞識別要求高的選用結巴分詞
Ansj和hanlp均基於自然處理語言,分詞準確度高,活躍度來講hanlp略勝一籌
博主選用的 hanlp分詞器,目前線上執行結果來看準確性滿足需求
下面就寫一下博主對 IKAnalyzer 和 hanlp分詞器的使用
IK Analyzer
截止目前 ,IK分詞器外掛的優勢是支援自定義熱更新遠端詞典。
安裝 ik分詞器外掛
es外掛安裝教程參考這裡
ik的es外掛地址:
博主使用的 es版本是6.4.0,下載時要注意對應es版本
線上安裝 ik es外掛 命令:
# /opt/apps/elasticsearch-6.4.0/bin/elasticsearch-plugin install /download/v6.4.0/elasticsearch-analysis-ik-6.4.0.zip
檢視外掛安裝列表
# sudo /opt/apps/elasticsearch-6.4.0/bin/elasticsearch-plugin list
IK配置
ik安裝完畢後配置檔案在 {ES_HOME}/config目錄下, 本例目錄是 /opt/apps/elasticsearch-6.4.0/config/analysis-ik/IKAnalyzer.cfg.xml
IK自定義詞典維護
文字詞典
ik文字詞典均是以dic結尾,換行符作為分隔,示例如下:
重啟 es,注意一定要重啟es
透過前面教程中 ,我們發現短語"我愛祖國",會被分詞為, "我","愛","祖國"三個詞, 如果按照上面詞典定義後, "我愛祖國"會被當成一個詞語不被分詞。
熱更新遠端詞典
熱更新遠端詞典的優勢是 ,修改詞典後無需重啟es。每分鐘載入一次
修改 IK配置檔案如下:
其中 location 是指一個 url,比如 ,該請求只需滿足以下兩點即可完成分詞熱更新。
1· 該 http 請求需要返回兩個頭部(header),一個是 Last-Modified,一個是 ETag,這兩者都是字串型別,只要有一個發生變化,該外掛就會去抓取新的分詞進而更新詞庫。
2· 該 http 請求返回的內容格式是一行一個分詞,換行符用 \n 即可。
滿足上面兩點要求就可以實現熱更新分詞了,不需要重啟 ES 例項。
可以將需自動更新的熱詞放在一個 UTF-8 編碼的 .txt 檔案裡,放在 nginx 或其他簡易 http server 下,當 .txt 檔案修改時,http server 會在客戶端請求該檔案時自動返回相應的 Last-Modified 和 ETag。可以另外做一個工具來從業務系統提取相關詞彙,並更新這個 .txt 檔案。
本文將遠端詞典存入資料庫,示例如下:
hanlp 中文分詞器
截止目前, hanlp詞庫是最大,分詞效果是最好。使用hanlp分詞外掛之前,建議先點選此處學習一下hanlp
安裝 hanlp中文分詞器外掛
hanlp的elasticsearch外掛眾多,這裡選用了這個,這個外掛支援的分詞模式要多一些,截止現在此外掛最新支援6.3.2,由於外掛中包含很大的詞典檔案,建議此外掛採用離線安裝
檢視外掛安裝列表
注意 : 這裡有一個hanlp的警告,es版本是6.4.0, 但是外掛允許的es版本是6.3.2
上面的警告需要修改一下外掛配置 , 本方法僅限於博主對應的版本喲,其他版本沒去試驗
# sudo vim /opt/apps/elasticsearch-6.4.0/plugins/analysis-hanlp/plugin-descriptor.properties
將 elasticsearch.version=6.3.2 修改為 elasticsearch.version=6.4.0,再次檢視外掛列表
ok,安裝成功,安裝完畢後必須重啟es喲必須重啟es喲必須重啟es喲
hanlp配置
hanlp自定義詞典
hanlp語料庫詞典
hanlp語料庫地址為: 本文截止目前最新版本為1.6.8
1· 下載資料包 hanlp.linrunsoft.com/release/data-for-1.6.8.zip
2· 解壓到配置檔案中 key為root的值對應目錄下
3· 根據詞典名調整 hanlp配置中的詞典配置,尤其注意CustomDictionaryPath的配置,以前採用的應用名,現在採用的中文名稱
4· 刪除二進位制快取檔案 rm -r /opt/apps/elasticsearch-6.4.0/plugins/analysis-hanlp/data/dictionary/custom/CustomDictionary.txt.bin, 如果自定義詞典變更了,一點要執行這一步,否則詞典不生效
5· 一定要重啟 es!!!一定要重啟es!!!一定要重啟es!!!
hanlp自定義熱更新詞典
1· 在配置檔案中 key為root的值對應目錄下找到目錄custom,進入此目錄
2· 建立一個 txt檔案,示例: myDic.txt
3· 在 myDic.txt檔案中新增詞,分隔符為換行符, 詞典格式為: [單詞] [詞性A] [A的頻次] ,如圖:
4· 刪除二進位制快取檔案 rm -r /opt/apps/elasticsearch-6.4.0/plugins/analysis-hanlp/data/dictionary/custom/CustomDictionary.txt.bin, 如果自定義詞典變更了,一點要執行這一步,否則詞典不生效
一定要重啟 es!!!一定要重啟es!!!一定要重啟es!!!
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31524777/viewspace-2647360/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- #Elasticsearch中文分詞器 #IK分詞器 @FDDLCElasticsearch中文分詞
- ElasticSearch-IK分詞器和整合使用Elasticsearch分詞
- elasticsearch安裝和使用ik分詞器Elasticsearch分詞
- Elasticsearch 分詞器Elasticsearch分詞
- ElasticSearch5.6.1 + 中文分詞(IK)ElasticsearchH5中文分詞
- Elasticsearch IK分詞器Elasticsearch分詞
- ElasticSearch中使用ik分詞器進行實現分詞操作Elasticsearch分詞
- ElasticSearch之ICU分詞器Elasticsearch分詞
- Elasticsearch整合HanLP分詞器ElasticsearchHanLP分詞
- elasticsearch之ik分詞器和自定義詞庫實現Elasticsearch分詞
- ElasticSearch安裝中文分詞外掛IKElasticsearch中文分詞
- ElasticSearch(三) ElasticSearch中文分詞外掛IK的安裝Elasticsearch中文分詞
- ElasticSearch7.3學習(十五)----中文分詞器(IK Analyzer)及自定義詞庫Elasticsearch中文分詞
- ElasticSearch(四) ElasticSearch中文分詞外掛IK的簡單測試Elasticsearch中文分詞
- Elasticsearch學習系列一(部署和配置IK分詞器)Elasticsearch分詞
- [教程一] 寫一個搜尋:使用 Laravel Scout,Elasticsearch,ik 分詞LaravelElasticsearch分詞
- 分享IKAnalyzer 3.0 中文分詞器中文分詞
- 中文分詞器,整理自Ai中文分詞AI
- [教程三] 寫一個搜尋:自定義詞庫;使用 Laravel Scout,Elasticsearch,ik 分詞LaravelElasticsearch分詞
- Elasticsearch(ES)分詞器的那些事兒Elasticsearch分詞
- 使用Docker快速安裝部署ES和Kibana並配置IK中文分詞器以及自定義分詞擴充詞庫Docker中文分詞
- elastcisearch中文分詞器各個版本AST中文分詞
- python使用jieba實現中文文件分詞和去停用詞PythonJieba分詞
- 11個Java開源中文分詞器使用方法和分詞效果對比Java中文分詞
- Lucene中文分析器的中文分詞準確性和效能比較中文分詞
- 中文分詞研究難點-詞語劃分和語言規範中文分詞
- 中文分詞原理及常用Python中文分詞庫介紹中文分詞Python
- Elasticsearch從入門到放棄:分詞器初印象Elasticsearch分詞
- ElasticSearch7.3 學習之定製分詞器(Analyzer)Elasticsearch分詞
- 使用cjieba(結巴分詞庫)實現php擴充套件中文分詞JiebaPHP套件中文分詞
- 中文分詞技術中文分詞
- Python分詞模組推薦:jieba中文分詞PythonJieba中文分詞
- 使用Spring Boot和Elasticsearch教程Spring BootElasticsearch
- ElasticSearch安裝ik分詞外掛Elasticsearch分詞
- Elasticsearch使用系列-ES增刪查改基本操作+ik分詞Elasticsearch分詞
- elasticsearch之使用正規表示式自定義分詞邏輯Elasticsearch分詞
- Hanlp在java中文分詞中的使用介紹HanLPJava中文分詞
- 自己動手製作elasticsearch的ik分詞器的Docker映象Elasticsearch分詞Docker