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爲使用統計的分詞方法。
總結來看,中文分詞目前機器學習是主流。