1. 程式人生 > >Solr 7.2.1 配置中文分詞器 IK Analyzer

Solr 7.2.1 配置中文分詞器 IK Analyzer

一、什麼是中文分詞器?

為什麼不來個英文分詞器呢? “嘿,小夥子,就是你,說的就是你,你那麼有才咋不上天呢!” 首先我們來拽一句英文:“He is my favorite NBA star” 然後我們再來一句中文:“他是我最喜歡的NBA球星”
從英文的結構我們很容易區分每個單詞,因為,每個單詞之間都是空格隔開的,你肯定不會這樣寫英文的吧 "HeismyfavoriteNBAstar",我去,你如果這麼寫,你要翻譯軟體如何是好
但是,中文就不一樣了了,上一篇我們講到solr的配置,我們知道solr是做搜尋的,做搜尋可不是全字串匹配啊,而是關鍵字匹配,還拿這句中文來說
“他是我最喜歡的NBA球星” 針對這句話,我們把其拆分成多個我們已知的且具有實際意義的中文單詞,每個單詞之間空格隔開以示區分 比如,上面這句經過我們拆分後就成了 “他  是  我 最 最喜歡  喜歡 喜歡的 NBA球星  球  球星 星” 沒毛病吧,比如“我最喜歡的”,就包含了多種單詞組合,因為搜尋不是全字匹配(再次強調一遍)因此,使用者在搜尋框中可能只輸入了一個 “星”字,就會搜尋到整句話 ----->  “他是我最喜歡的NBA球星” 當然,中國人對自家的中文是OK的,再比如 "門把手"這三個字,可以拆分為“門把手 門  把手 手”四個不同的詞義 你要老外去拆,估計你會急死,如果,你換成讓計算機去拆,什麼?
“拆個毛線喲,沒規律而言,你讓我計算機乾瞪眼嗎???” 哈哈哈哈哈哈,於是,林先生(林良益)便開發了一款開源中文分詞器的工具包IK Analyzer 注:林先生在2012年就停止了對IK Analyzer的維護和更新,不過,利用現有的網路資源下載下來的IK包,還是可以滿足我們高版本的Solr的

二、什麼是停用詞(Stop Words)?


       停用詞(Stop Words) ,詞典譯為“電腦檢索中的虛字、非檢索用字”。在SEO中,為節省儲存空間和提高搜尋效率,搜尋引擎在索引頁面或處理搜尋請求時會自動忽略某些字或詞,這些字或詞即被稱為Stop Words(停用詞)。
       停用詞一定程度上相當於過濾詞(Filter Words),不過過濾詞的範圍更大一些,包含黃色、政治等敏感資訊的關鍵詞都會被視做過濾詞加以處理,停用詞本身則沒有這個限制。通常意義上,停用詞(Stop Words)大致可分為如下兩類:

1、使用十分廣泛,甚至是過於頻繁的一些單詞。比如英文的“i”、“is”、“what”,中文的“我”、“就”之類詞幾乎在每個文件上均會出現,查詢這樣的詞搜尋引擎就無法保證能夠給出真正相關的搜尋結果,難於縮小搜尋範圍提高搜尋結果的準確性,同時還會降低搜尋的效率。因此,在真正的工作中,Google和百度等搜尋引擎會忽略掉特定的常用詞,在搜尋的時候,如果我們使用了太多的停用詞,也同樣有可能無法得到非常精確的結果,甚至是可能大量毫不相關的搜尋結果。

2、文字中出現頻率很高,但實際意義又不大的詞。這一類主要包括了語氣助詞、副詞、介詞、連詞等,通常自身並無明確意義,只有將其放入一個完整的句子中才有一定作用的詞語。如常見的“的”、“在”、“和”、“接著”之類,比如“SEO研究院是原創的SEO部落格”這句話中的“是”、“的”就是兩個停用詞。
下載上面提供的中文分詞器的資源,我們可以開啟其中的stopword.dic檔案進行檢視
當然,這裡面的內容你是可以進行修改的,如果不夠你用,你甚至可以在擴充套件一個stopword.dic 我們再來看一下ext.dic分詞器字典裡面都藏了些什麼(將原來的內容改為如下)
如果我們的ext.dic不夠我們用了,或者我們想擴充套件其他詞庫,我們可以開啟IKAnalyzer.cfg.xml進行配置
而剩下的那兩個jar包,我們從名字上就知道,這是IK打通solr的“通道啊”
三、Solr配置IK Analyzer
(1)拷貝兩個jar包至:C:\tomcat-8\webapps\solr\WEB-INF\lib  資料夾下 (2)拷貝剩餘三個資原始檔至:C:\tomcat-8\webapps\solr\WEB-INF\classes資料夾下
(3)定位到目錄:D:\solr_home\newcore\conf下  (%SOLR_HOME%)
修改managed-schema檔案,在檔案內容的最後新增IK分詞filed,名稱為“text_ik”(也可以自己定義)
<!-- 新增IK分詞 -->
<fieldType name="text_ik" class="solr.TextField">
	<analyzer class="org.wltea.analyzer.lucene.IKAnalyzer"/>
</fieldType>
<field name="text_ik" type="text_ik" indexed="true" stored="true" multiValued="false"/>



四、重啟tomcat,訪問Solr,驗證IK分詞器
(1)
(2)有了text_ik,我們要怎麼用呢? 我們先來看一下,stopword.dic是怎麼影響中文分詞的
圖中,我們看到,對於“除此之外你們說的都對”這句話,IK分詞後的效果按理說應該是 "除此之外 此之外 之外"   而有了stopword停用詞“除此之外”後,IK分析的結果就成了“此之外 之外” 如果們把停用詞從stopword.dic裡面刪除掉,重啟tomcat後,再次訪問solr,我們會發現
現在,我們來看一下ext.dic是怎麼作用到中文語句上分詞的
如果去掉ext.dic裡面的部分內,重啟tomcat,再次訪問solr,會發現
好吧,只能說低估了IK的分詞能力(自身的詞庫),我們可以用下面的例子進行演示
這個例子可行,至此,IK中文分詞器成功配置到Solr 7.2.1中