天天看點

Solr+MMSEG4J的簡單學習目錄三,準備工具(不用tomcat)

目錄

  • solr介紹
  • MMSEG4J介紹
  • 準備工具
  • solr環境搭建
  • 分詞方法與效果分析
  • 分詞結果送出
  • 詞雲分析
  • 參考連結

一,solr介紹

Apache Solr 是一個開源的搜尋伺服器。Solr 使用 Java 語言開發,主要基于 HTTP 和 Apache Lucene 實作。Apache Solr 中存儲的資源是以 Document 為對象進行存儲的。每個文檔由一系列的 Field 構成,每個 Field 表示資源的一個屬性。Solr 中的每個 Document 需要有能唯一辨別其自身的屬性,預設情況下這個屬性的名字是 id,在 Schema 配置檔案中使用:id進行描述。

二,MMSEG4J介紹

mmseg4j 是用 Chih-Hao Tsai 的 MMSeg 算法實作的中文分詞器。并實作了 lucene 的 analyzer 和 solr 的 TokenizerFactory 以友善在 Lucene 和 Solr 中使用。

對 lucene 來說 ,mmseg4j 有以下四個 analyzer:SimpleAnalyzer、ComplexAnalyzer、MaxWordAnalyzer、MMSegAnalyzer。前面三個都是繼承 MMSegAnalyzer,MMSegAnalyzer 預設使用 max-word 方式分詞。四個分次類涉及到了三個分詞方法:Simple、Complex、max-word。

三,準備工具(不用tomcat)

(1)

solr安裝包。官方下載下傳位址 http://www.apache.org/dyn/closer.lua/lucene/solr/6.5.1 。solr下載下傳有三個包,不同系統下載下傳不同的包,我是windows本地搭建進行分詞,用的是jetty容器 ,在本地運作,下的是solr-6.5.1 .zip檔案。

Solr 程式包 的目錄結構

  • build :在solr 建構過程中放置已編譯檔案的目錄。
  • client :包含了一些特定語言調用Solr 的API 用戶端程式,目前隻有Ruby 可供選擇,Java 用戶端叫SolrJ 在src/solrj 中可以找到。
  • dist :存放Solr 建構完成的JAR 檔案、WAR 檔案和Solr 依賴的JAR 檔案。
  • example :是一個安裝好的Jetty 中間件,其中包括一些樣本資料和Solr 的配置資訊。
  • example/etc :Jetty 的配置檔案。
  • example/multicore :當安裝Slor multicore 時,用來放置多個Solr 主目錄。
  • example/solr :預設安裝時一個Solr 的主目錄。
  • example/webapps :Solr 的WAR 檔案部署在這裡。
  • src :Solr 相關源碼。
  • src/java :Slor 的Java 源碼。
  • src/scripts :一些在大型産品釋出時一些有用的Unix bash shell 腳本。
  • src/solrj :Solr 的Java 用戶端。
  • src/test :Solr 的測試源碼和測試檔案。
  • src/webapp :Solr web 管理界面。管理界面的Jsp 檔案都放在web/admin/ 下面,可以根據你的需要修改這些檔案。

(2)MMSEG4J分詞工具包下載下傳解壓,我用的是mmseg4j 2.3.0版本

(3)目錄安裝:将solr安裝在F:/solr/solr-6.5.1目錄下,将MMSEG4J安裝在F:/MMSEG4J目錄下

F:/solr/solr-6.5.1

F:/MMSEG4J

注意:solr版本與mmseg4j版本一定要對應,否則易出問題。我這裡用的都是最新的版本。

四,solr環境搭建

(1)在tomcat伺服器下運作

tomcat9.0下載下傳并解壓 http://tomcat.apache.org/download-90.cgi, 按安裝過程一步一步,我預設使用給定的端口号8080。

tomcat和solr的具體配置過程:

  • 将solr-6.5.1\server\solr-webapp下的webapp檔案夾拷貝到tomcat\webapps目錄下,并将webapp重命名為solr(可以重命名為取任意名稱)。
  • 将solr-6.5.1\server\lib\ext下的所有jar包拷貝到tomcat\webapps\solr\WEB-INF\lib下
  • 在WEB-INF下建立一個classses檔案夾,并将solr-6.5.1\server\resources下的log4j.properties配置檔案拷貝到classes檔案夾下
  • 在tomcat\webapps\solr下建立檔案夾solrhome(可任意取名),将solr-6.5.1\server\solr下的所有内容拷貝到solrhome下面,此時tomcat\webapps\solr和tomcat\webapps\solr\solrhome檔案夾目錄結構如圖
Solr+MMSEG4J的簡單學習目錄三,準備工具(不用tomcat)
Solr+MMSEG4J的簡單學習目錄三,準備工具(不用tomcat)

修改tomcat\webapps\solr\WEB-INF\web.xml,找到圖示代碼進行修改(注釋掉),箭頭所指的地方改成自己定義的solrhome所在的路徑。

Solr+MMSEG4J的簡單學習目錄三,準備工具(不用tomcat)

運作tomcat,通路http://localhost:8080/solr/index.html ,出現404錯誤。

Solr+MMSEG4J的簡單學習目錄三,準備工具(不用tomcat)

這個問題改了許久沒有成功,是以采用了第二種方法基于jetty容器的運作。

(2)solr基于jetty容器的運作

  1. 在指令提示視窗定位到solr安裝路徑并且使用solr start指令背景啟動solr
Solr+MMSEG4J的簡單學習目錄三,準備工具(不用tomcat)

我們還可以輸入指令

solr start -help

來檢視更多指令操作

Solr+MMSEG4J的簡單學習目錄三,準備工具(不用tomcat)
Solr+MMSEG4J的簡單學習目錄三,準備工具(不用tomcat)

輸入start solr之後,如果成功出現solr首頁面(如下圖),則說明solr安裝配置沒有沒有問題,可以進行下一步操作。由于使用了自帶的Jetty Server,是以啟動後的預設端口就是8983。注意,在solr頁面操作過程當中,要一直開着dos視窗。

Solr+MMSEG4J的簡單學習目錄三,準備工具(不用tomcat)
Solr+MMSEG4J的簡單學習目錄三,準備工具(不用tomcat)

2.接着建立一個core

在dos輸入指令 solr create -c mycore,建立一個mycore的索引庫

Solr+MMSEG4J的簡單學習目錄三,準備工具(不用tomcat)

出現如下圖所示則說明建立成功:

Solr+MMSEG4J的簡單學習目錄三,準備工具(不用tomcat)

3.接着我們可以在F:\solr\solr-6.5.1\server\solr 下面看到剛剛建立的core包

Solr+MMSEG4J的簡單學習目錄三,準備工具(不用tomcat)

點開mycore->conf->managed-schema(在5.0前,該檔案是shcema.xml檔案),點開并添加如下代碼,dicPath改成自己managed-schema的路徑:

<!-- mmseg4j-->
     <field name="mmseg4j_complex_name" type="text_mmseg4j_complex" indexed="true" stored="true"/>
     <field name="mmseg4j_maxword_name" type="text_mmseg4j_maxword" indexed="true" stored="true"/>
     <field name="mmseg4j_simple_name" type="text_mmseg4j_simple" indexed="true" stored="true"/>

     <fieldType name="text_mmseg4j_complex" class="solr.TextField" positionIncrementGap="100" >
        <analyzer>
           <tokenizer class="com.chenlb.mmseg4j.solr.MMSegTokenizerFactory" mode="complex" dicPath="F:\solr\solr-6.5.1\server\solr\mycore\conf"/>
           <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
         </analyzer>
     </fieldType>
     <fieldType name="text_mmseg4j_maxword" class="solr.TextField" positionIncrementGap="100" >
          <analyzer>
            <tokenizer class="com.chenlb.mmseg4j.solr.MMSegTokenizerFactory" mode="max-word" dicPath="F:\solr\solr-6.5.1\server\solr\mycore\conf"/>
            <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
          </analyzer>
      </fieldType>
      <fieldType name="text_mmseg4j_simple" class="solr.TextField" positionIncrementGap="100" >
          <analyzer>
            <tokenizer class="com.chenlb.mmseg4j.solr.MMSegTokenizerFactory" mode="simple" dicPath="F:\solr\solr-6.5.1\server\solr\mycore\conf"/>
            <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
          </analyzer>
      </fieldType>
<!-- mmseg4j-->
           

4.儲存,重新開機solr

solr restart -p 8983
Solr+MMSEG4J的簡單學習目錄三,準備工具(不用tomcat)

之後重新整理我們的solr界面,mycore->analysis->select,可以看到成功的新增的Field

Solr+MMSEG4J的簡單學習目錄三,準備工具(不用tomcat)

在Field Value中輸入内容,選擇FieldType,點選Analyse Values即可,結果如圖:

Solr+MMSEG4J的簡單學習目錄三,準備工具(不用tomcat)

五,分詞方法與效果分析

經濟學博士四川大學公共管理學院教授博士生導師副院長全國政治學類專業教學指導委員會委員四川省政治學會常務理事四川省人民政府職能轉變專家組組長成都市人民政府職能轉變專家組組長西藏自治區人民政府咨詢委員四川社會治理與公共安全研究智庫首席專家四川大學社會發展與社會風險控制研究中心四川省社會科學重點研究基地副主任四川大學地方政府創新中心副主任

對這一段話采用不同的分詞方法進行分詞,比較他們的效果:

(1)mmseg4j_complex_name,分詞效果如圖。重點看對“西藏自治區人民政府”的分詞

Solr+MMSEG4J的簡單學習目錄三,準備工具(不用tomcat)

分析:Complex:在一串字元中,找到是以可能的三字快開始比對,尋找最大長度的字塊。

(2)mmseg4j_maxword_name,分詞效果如圖

Solr+MMSEG4J的簡單學習目錄三,準備工具(不用tomcat)

分析:maxword是在complex分詞後的結果去掉或保留單字。

(3)mmseg4j_simple_name

Solr+MMSEG4J的簡單學習目錄三,準備工具(不用tomcat)

分析:simple:在一串字元串中從開頭比對子串,找到所有可能的比對。

六,分詞結果送出

這裡我借用jieba分詞來實作最終的分詞結果。因為目前我還沒有找到直接在solr界面對一個檔案中的内容進行分詞,但是jieba可以實作。

生成一個teacher.txt檔案,存放四川大學教師簡介資訊。打開jupyter notebook界面(具體操作可以參考我上一篇部落格),上傳teacher.txt檔案,編寫如下代碼,則可以達到分詞效果如圖:

Solr+MMSEG4J的簡單學習目錄三,準備工具(不用tomcat)
Solr+MMSEG4J的簡單學習目錄三,準備工具(不用tomcat)

将結果導出,并借助Tika工具,轉換成xml檔案。

Solr+MMSEG4J的簡單學習目錄三,準備工具(不用tomcat)

七,詞頻統計

同樣利用jupyter notebook+jieba,來實作詞頻統計,代碼和結果如下圖,我們統計前200個出現頻率最高的詞和他們的次數:

Solr+MMSEG4J的簡單學習目錄三,準備工具(不用tomcat)

用Tika格式轉換可以更明了的看到詞頻統計

Solr+MMSEG4J的簡單學習目錄三,準備工具(不用tomcat)

參考連結:

1 . http://www.cnblogs.com/sainaxingxing/p/6065882.html

2 . http://m.blog.csdn.net/article/details?id=52065562

3 . http://blog.csdn.net/qq_38425619/article/details/72486596

繼續閱讀