ElasticSearch系列 - analyzer分詞

ElasticSearch系列 - analyzer分詞

什麼是Analyzer

ElasticSearch中數據的存儲是要經過分詞再存儲,Analyzer則爲分詞器,elasticSearch中內置了很多分詞器,除了在數據寫入的過程中,匹配Query語句時候也需要分詞。

Analyzer的組成

Analyzer由三部分組成

  • Character Filters 針對原始文本的處理,例如去除Html
  • Tokenizer 按規則切分爲單詞
  • Token Filter 將單詞進行加工,消協,刪除stopwords,增加同義詞

在這裏插入圖片描述

ElasticSearch 的內置分詞器
  • Standard Analyzer 默認分詞器,按詞切分,小寫處理
  • Simple Analyzer 按照非字母切分(符號被過濾),小寫處理
  • Stop Analyze 小寫處理,停用詞過濾(the,a,is)
  • Whitespace Analyzer 按空格切分,不轉小寫
  • Keyword Analyzer 不分詞 直接輸入當作輸出
  • Patter Analyzer 正則表達式,默認\W+(非字符分隔)
  • Language 提供了30多種常見語言分詞器
  • Customer Analyzer 自定義分詞器
ElasticSearch 使用分詞器
GET /_analyze
{
  "analyzer":"standard",
  "text":"I am a nice boy"
}

分詞結果
i;am;a;nice;boy;
中文分詞的難點

中文語句,切分一個一個的詞,而不是一個一個的字,英文中單詞有空格區分

一句話,不同的上下文,切分單詞也是不一樣的

在國內IK與THULAC兩款開源中文分詞器使用較多

中文分詞的原理

現有的分詞方法可分爲三大類:基於字符串匹配的分詞方法基於理解的分詞方法基於統計的分詞方法

基於字符串匹配

這個之前我使用DFA做敏感詞過濾,也需要從句子中找到詞語,原理類似,同樣需要維護一個字典,根據一定的算法去匹配。按照掃描方向的不同,字符串匹配分詞方法可以分爲正向匹配逆向匹配;按照不同長度優先匹配的情況,可以分爲最大(最長)匹配最小(最短)匹配。例如:字典中含有【中國】【隊長】【中國隊長】三個詞語,輸入:"中國隊長"這個字符串,如果按最短匹配,【中國】【隊長】,如果按最長匹配則爲【中國隊長】

這類算法的優點是速度快,時間複雜度可以保持在O(n),實現簡單,效果尚可;但對歧義未登錄詞處理效果不佳。

基於理解的分詞方法

基於理解的分詞方法是通過讓計算機模擬人對句子的理解,達到識別詞的效果。其基本思想就是在分詞的同時進行句法、語義分析,利用句法信息和語義信息來處理歧義現象。它通常包括三個部分:分詞子系統、句法語義子系統、總控部分。在總控部分的協調下,分詞子系統可以獲得有關詞、句子等的句法和語義信息來對分詞歧義進行判斷,即它模擬了人對句子的理解過程。這種分詞方法需要使用大量的語言知識和信息。由於漢語語言知識的籠統、複雜性,難以將各種語言信息組織成機器可直接讀取的形式,因此目前基於理解的分詞系統還處在試驗階段。

基於統計的分詞方法

一句話概括:機器學習訓練,NLP

例如上述的THULAC爲使用統計的分詞方法。

總結來看,中文分詞目前機器學習是主流。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章