概述html
環境準備mysql
什麼是分詞正則表達式
彩蛋算法
關於elasticsearch教程寫了關於安裝和安裝踩坑記兩篇博文, 如今就來寫點項目中使用中文分詞器的歷程。sql
本文旨在分局項目es中使用中文分詞器的心得,對es分詞器作初步講解,若有錯誤和不當之處,歡迎批評指正。apache
分詞這個詞代表的意思已經很明瞭,就是將一句話分紅多個詞語, 好比: 「我愛祖國」 會被拆分爲 【我,愛,祖國】。centos
那麼爲何須要拆分紅這樣呢? 這就要從全文檢索數據存儲結構提及,深刻的存儲結構我就不深刻講解了,由於我也不知道具體的[/奸笑]。正式開始,es內部基於apache lucene作了進一步的封裝,若是直接使用lucene作全文檢索,相信用過的前輩們頓感頭頂涼意,有了es封裝,小輩們至少能夠省一瓶霸王洗髮水。elasticsearch
es能夠從千萬級別數據量快速檢索出對應的文檔,要歸功於一個叫倒排索引的傢伙, 經過詞彙找到對應的文檔,既然有倒排索引,那麼一樣出現了一個正向索引的東東,下面就來認識一下倒排索引ide
先來講說正向索引,在搜索引擎中,每一個文檔(每條數據)都會被分詞,獲得每一個詞出現的頻率以及位置,示例:ui
當搜索 詞1 時,搜索引擎就要將全部的文檔遍歷獲取到在哪些文檔中存在, 相似mysql作查詢, 經過文檔去找詞,當數據量千萬級別以上而且多個詞進行搜索,想一想都好可怕啊!!!
倒排索引反向正向索引,經過詞去找文檔,經過倒排索引文件,創建詞與文檔的關係。以下圖所示:
官方解釋: 分詞是將文本(如任何電子郵件的正文或者一篇文章)轉換爲標記或術語的過程,這些標記或術語被添加到倒排索引中便於搜索。分析由分析器執行,它能夠是內置的分析器,也能夠是定義每一個索引的自定義分析器。
言而總之,分詞器做用就是將文檔(文章內容等)進行分詞,將詞語和文檔的關係存入倒排索引便於搜索,舉例:
elasticsearch內置的英文分詞器效果以下:
"The QUICK brown foxes jumped over the lazy dog!"
英文分詞器會將以上語句分紅不一樣的詞彙。它將小寫每一個詞彙,除去衆多的停用詞(the)和減小詞彙複意(foxes → fox, jumped → jump, lazy → lazi)。最後,在倒排索引中加入如下詞彙:
[ quick, brown, fox, jump, over, lazi, dog ]
elasticsearch內置分詞器有standard analyzer,simple analyzer,whitespace analyzer,stop analyzer,Keyword analyzer,pattern analyzer,language analyzers,fingerprint analyzer這8種
注意: 這些內置的分詞器對中文支持效果都不好
默認分詞器,它提供了基於語法的分詞(基於Unicode文本分割算法,如Unicode® Standard Annex #29所指定的),適用於大多數語言,對中文分詞效果不好。
分詞示例:
分詞效果以下:
[ the, 2, quick, brown, foxes, jumped, over, the, lazy, dog's, bone ]
它提供了基於字母的分詞,若是遇到不是字母時直接分詞,全部字母均置爲小寫
分詞示例:
分詞效果以下:
[ the, quick, brown, foxes, jumped, over, the, lazy, dog, s, bone ]
它提供了基於空格的分詞,若是遇到空格時直接分詞
分詞示例:
分詞效果以下:
[ The, 2, QUICK, Brown-Foxes, jumped, over, the, lazy, dog's, bone. ]
它與simple analyzer相同,可是支持刪除停用詞。它默認使用_english_stop單詞。
分詞示例:
分詞效果以下:
[ quick, brown, foxes, jumped, over, lazy, dog, s, bone ]
它提供的是無操做分詞,它將整個輸入字符串做爲一個詞返回,即不分詞。
分詞示例:
分詞效果以下:
[ The 2 QUICK Brown-Foxes jumped over the lazy dog's bone. ]
它提供了基於正則表達式將文本分詞。正則表達式應該匹配詞語分隔符,而不是詞語自己。正則表達式默認爲\W+(或全部非單詞字符)。
分詞示例:
分詞效果以下:
[ the, 2, quick, brown, foxes, jumped, over, the, lazy, dog, s, bone ]
它提供了一組語言的分詞,旨在處理特定語言.它包含了一下語言的分詞:
阿拉伯語,亞美尼亞語,巴斯克語,巴西語,保加利亞語,加泰羅尼亞語,cjk,捷克語,丹麥語,荷蘭語,英語,芬蘭語,法語,加利西亞語,德語,希臘語,印度語,匈牙利語,愛爾蘭語,意大利語,拉脫維亞語,立陶宛語,挪威語,波斯語,葡萄牙語,羅馬尼亞語,俄羅斯語,索拉尼語,西班牙語,瑞典語,土耳其語,泰國語。
它提供了了一種fingerprinting算法,該算法被OpenRefine項目用於幫助集羣。
輸入文本是模式化語言,通過規範的刪除擴展字符、排序、刪除索引到分詞中。若是配置了停用詞列表,也將刪除停用詞。
分詞示例:
分詞效果以下:
[ and consistent godel is said sentence this yes ]
下一篇將寫關於es插件安裝以及中文分詞器使用的相關教程以及踩坑記,歡迎關注和收藏