1. 程式人生 > >Es學習第五課, 分詞器介紹和中文分詞器配置

Es學習第五課, 分詞器介紹和中文分詞器配置

 上課我們介紹了倒排索引,在裡面提到了分詞的概念,分詞器就是用來分詞的。

分詞器是ES中專門處理分詞的元件,英文為Analyzer,定義為:從一串文字中切分出一個一個的詞條,並對每個詞條進行標準化。它由三部分組成,

  • Character Filters:分詞之前進行預處理,比如去除html標籤
  • Tokenizer:將原始文字按照一定規則切分為單詞
  • Token Filters:針對Tokenizer處理的單詞進行再加工,比如轉小寫、刪除或增新等處理,也就是標準化

 

預定義的分詞器

ES自帶的分詞器有如下:

  • Standard Analyzer
    • 預設分詞器
    • 按詞切分,支援多語言
    • 小寫處理
    • 支援中文采用的方法為單字切分
  • Simple Analyzer
    • 按照非字母切分
    • 小寫處理
  • Whitespace Analyzer
    • 空白字元作為分隔符
  • Stop Analyzer
    • 相比Simple Analyzer多了去除請用詞處理
    • 停用詞指語氣助詞等修飾性詞語,如the, an, 的, 這等
  • Keyword Analyzer
    • 不分詞,直接將輸入作為一個單詞輸出
  • Pattern Analyzer
    • 通過正則表示式自定義分隔符
    • 預設是\W+,即非字詞的符號作為分隔符

ES預設對中文分詞是一個一個字來解析,這種情況會導致解析過於複雜,效率低下,所以目前有幾個開源的中文分詞器,來專門解決中文分詞,其中常用的叫IK

中文分詞

  • 難點
    • 中文分詞指的是將一個漢字序列切分為一個一個的單獨的詞。在英文中,單詞之間以空格作為自然分界詞,漢語中詞沒有一個形式上的分界符
    • 上下文不同,分詞結果迥異,比如交叉歧義問題
  • 常見分詞系統
    • IK:實現中英文單詞的切分,可自定義詞庫,支援熱更新分詞詞典
    • jieba:支援分詞和詞性標註,支援繁體分詞,自定義詞典,並行分詞等
    • Hanlp:由一系列模型與演算法組成的Java工具包,目標是普及自然語言處理在生產環境中的應用
    • THUAC:中文分詞和詞性標註

 

安裝配置ik中文分詞外掛

# 在Elasticsearch安裝目錄下執行命令,然後重啟es
bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v6.3.0/elasticsearch-analysis-ik-6.3.0.zip

# 如果由於網路慢,安裝失敗,可以先下載好zip壓縮包,將下面命令改為實際的路徑,執行,然後重啟es
bin/elasticsearch-plugin install file:///path/to/elasticsearch-analysis-ik-6.3.0.zip
ik兩種分詞模式ik_max_word 和 ik_smart 什麼區別?
  • ik_max_word: 會將文字做最細粒度的拆分,比如會將“中華人民共和國國歌”拆分為“中華人民共和國,中華人民,中華,華人,人民共和國,人民,人,民,共和國,共和,和,國國,國歌”,會窮盡各種可能的組合;

  • ik_smart: 會做最粗粒度的拆分,比如會將“中華人民共和國國歌”拆分為“中華人民共和國,國歌”。

你也可以直接上IK的github的教程來配置,https://github.com/medcl/elasticsearch-analysis-ik

安裝完後,修改elasticsearch.yml檔案,把ik分詞器設定為es的預設分詞器

index.analysis.analyzer.default.type:ik

重啟es,注意es中的每個節點都要進行上述配置。