1. 程式人生 > >Solr與開源中文分詞(ansj)整合

Solr與開源中文分詞(ansj)整合

1. ansj分詞原始碼及jar包下載地址

原始碼:
https://github.com/NLPchina/ansj_seg

jar包:
http://maven.nlpcn.org/org/ansj/
http://maven.nlpcn.org/org/nlpcn/nlp-lang

2. 在solr使用ansj分詞

(1) ansj的solr擴充套件及編譯


ansj支援了lucene的擴充套件,使用下面幾個jar包:
ansj_lucene4_plug-2.0.2.jar
ansj_seg-2.0.8-min.jar 
nlp-lang-0.3.jar

要在solr中使用ansj,可以在lucene外掛的原始碼上做一下擴充套件:
外掛的程式碼目錄(maven工程)為ansj_seg/plug/ansj_lucene4_plug,匯入此maven工程,配置好依賴關係,增加一個solr擴充套件類AnsjTokenizerFactory.
編譯後生成一個新的ansj_lucene4_plug-2.0.2.jar包,重新命名為ansj_lucene4_plug-2.0.2-solr.jar.

package org.ansj.solr;
 
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.Reader;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;


import org.ansj.lucene.util.AnsjTokenizer;
import org.ansj.splitWord.analysis.IndexAnalysis;
import org.ansj.splitWord.analysis.ToAnalysis;
import org.apache.lucene.analysis.Tokenizer;
import org.apache.lucene.analysis.util.TokenizerFactory;
import org.apache.lucene.util.AttributeFactory;
 
public class AnsjTokenizerFactory extends TokenizerFactory{
    boolean pstemming;
    boolean isQuery;
    private String stopwordsDir;
    public Set<String> filter; 
 
    public AnsjTokenizerFactory(Map<String, String> args) {
        super(args);
        assureMatchVersion();
        isQuery = getBoolean(args, "isQuery", true);
        pstemming = getBoolean(args, "pstemming", false);
        stopwordsDir = get(args,"stopwords");
        addStopwords(stopwordsDir);
    }
    
    //add stopwords list to filter
    private void addStopwords(String dir) {
        if (dir == null){
            System.out.println("no stopwords dir");
            return;
        }
        //read stoplist
        System.out.println("stopwords: " + dir);
        filter = new HashSet<String>();
        File file = new File(dir);
        InputStreamReader reader;
        try {
            reader = new InputStreamReader(new FileInputStream(file),"UTF-8");
            BufferedReader br = new BufferedReader(reader);
            String word = br.readLine(); 
            while (word != null) {
                filter.add(word);
                word = br.readLine();
            } 
        } catch (FileNotFoundException e) {
            System.out.println("No stopword file found");
        } catch (IOException e) {
            System.out.println("stopword file io exception");
        }
    }
    
    @Override
    public Tokenizer create(AttributeFactory factory, Reader input) {
        if(isQuery == true){
            //query
            return new AnsjTokenizer(new ToAnalysis(new BufferedReader(input)), input, filter, pstemming);
        } else {
            //index
            return new AnsjTokenizer(new IndexAnalysis(new BufferedReader(input)), input, filter, pstemming);
        }
    }
}
(2) 在tomcat+solr中使用ansj分詞擴充套件並進行配置

將下列jar包放在${tomcat}/webapps/solr/WEB-INF/lib/目錄下:
ansj_lucene4_plug-2.0.2-solr.jar
ansj_seg-2.0.8-min.jar
nlp-lang-0.3.jar

solr資料集的schema.xml中增加text_ansj分詞配置:
    <fieldType name="text_ansj" class="solr.TextField" positionIncrementGap="100">
      <analyzer type="index">
         <tokenizer class="org.ansj.solr.AnsjTokenizerFactory"  isQuery="false" stopwords="/xxx/tomcat/apache-tomcat-8.0.9/webapps/solr/WEB-INF/classes/stopwords.dic"/>
      </analyzer>
      <analyzer type="query">
        <tokenizer class="org.ansj.solr.AnsjTokenizerFactory" stopwords="/xxx/tomcat/apache-tomcat-8.0.9/webapps/solr/WEB-INF/classes/stopwords.dic"/>
      </analyzer>
    </fieldType>

(3) 使用ansj分詞配置及自定義詞典

將下列檔案放在${tomcat}/webapps/solr/WEB-INF/classes目錄下:
ansj_seg/library
ansj_seg/train_file

ansj_seg/library.properties  

注意library.properties中的配置路徑,通常需要使用絕對路徑,相對路徑是相對於tomcat的啟動目錄而言的。

------

相對ik分詞,ansj準確度更高。

IK分詞在細粒度模式下有些錯誤的詞被分出來,英文分詞時會將單詞切割開:如javascript可能會分成ja,java,javascript; nagios可能被切分成nagios,ios, 檢索時會出現問題。

相關推薦

Solr開源中文(ansj)整合

1. ansj分詞原始碼及jar包下載地址 原始碼: https://github.com/NLPchina/ansj_seg jar包: http://maven.nlpcn.org/org/ansj/ http://maven.nlpcn.org/org/nlpcn/n

solrik中文的配置,以及新增Core(Add Core)的方式

在下用的版本是solr7.2.1與ikanalyzer-solr6.5: 說明:在solr版本5之後就可以不用依賴tomcat進行啟動,可以自行啟動,啟動方式下面會進行講解。 需要注意的是:對於solr6以下的版本可用jdk7,從solr6開始只能使用jdk8了。 so

開源中文工具探析(三):Ansj

Ansj是由孫健(ansjsun)開源的一箇中文分詞器,為ICTLAS的Java版本,也採用了Bigram + HMM分詞模型(可參考我之前寫的文章):在Bigram分詞的基礎上,識別未登入詞,以提高分詞準確度。雖然基本分詞原理與ICTLAS的一樣,但是Ansj做了一些工程上的優化,比如:用DAT高效地實現檢

開源中文工具探析(六):Stanford CoreNLP

inf git deb seq 效果 analysis stream fix sps CoreNLP是由斯坦福大學開源的一套Java NLP工具,提供諸如:詞性標註(part-of-speech (POS) tagger)、命名實體識別(named entity recog

7個優秀的開源中文庫推薦

中文分詞是中文文字處理的基礎步驟,也是中文人機自然語言互動的基礎模組。由於中文句子中沒有詞的界限,因此在進行中文自然語言處理時,通常需要先進行分詞。 縱觀整個開源領域,陸陸續續做中文分詞的也有不少,不過目前仍在維護的且質量較高的並不多。下面整理了一些個人認為比較優秀的中文分詞庫,以供大家

Hanlp等七種優秀的開源中文庫推薦

中文分詞是中文文字處理的基礎步驟,也是中文人機自然語言互動的基礎模組。由於中文句子中沒有詞的界限,因此在進行中文自然語言處理時,通常需要先進行分詞。 縱觀整個開源領域,陸陸續續做中文分詞的也有不少,不過目前仍在維護的且質量較高的並不多。下面整理了一些個人認為比較優秀的中文分

學習筆記:從0開始學習大資料-29. solr增加ik中文器並匯入doc,pdf文件全文檢索

環境 centos7,solr7.5.0 1. 新建core 從  solr-7.5.0/example/files/conf 作為配置檔案模板,建立core,名為mycore 2.下載分詞器 從https://search.maven.org/search?q=g:com

Solr安裝及中文器配置

1、上傳並解壓Solr、Tomcat 2、複製Solr到Tomcat cp -r solr-7.3.1/server/solr-webapp/webapp /home/tomcat/webapps/solr 3、複製jar包到Tomcat下的Solr cp -

10大Java開源中文器的使用方法和效果對比

原文地址:http://my.oschina.net/apdplat/blog/412921 本文的目標有兩個: 1、學會使用10大Java開源中文分詞器 2、對比分析10 大Java開源中文分詞器的分詞效果 本文給出了10大Java開源中文分詞的使用方法以及分詞

【NLP】11大Java開源中文器的使用方法和效果對比

本文的目標有兩個: 1、學會使用11大Java開源中文分詞器 2、對比分析11大Java開源中文分詞器的分詞效果 本文給出了11大Java開源中文分詞的使用方法以及分詞結果對比程式碼,至於效果哪個好,那要用的人結合自己的應用場景自己來判斷。 11大Java開源中文分詞器,不同的分詞器

開源中文工具探析(七):LTP

LTP是哈工大開源的一套中文語言處理系統,涵蓋了基本功能:分詞、詞性標註、命名實體識別、依存句法分析、語義角色標註、語義依存分析等。 【開源中文分詞工具探析】系列: 1. 前言 同THULAC一樣,LTP也是基於結構化感知器(Structured Perceptron, SP),以最大熵準則建模標註序列

開源中文工具探析(四):THULAC

THULAC是一款相當不錯的中文分詞工具,準確率高、分詞速度蠻快的;並且在工程上做了很多優化,比如:用DAT儲存訓練特徵(壓縮訓練模型),加入了標點符號的特徵(提高分詞準確率)等。 【開源中文分詞工具探析】系列: 1. 前言 THULAC所採用的分詞模型為結構化感知器(Structured Percep

開源中文工具探析(五):FNLP

FNLP是由Fudan NLP實驗室的邱錫鵬老師開源的一套Java寫就的中文NLP工具包,提供諸如分詞、詞性標註、文字分類、依存句法分析等功能。 【開源中文分詞工具探析】系列: 1. 前言 類似於THULAC,FNLP也是採用線性模型(linear model)分詞。較於對數線性模型(log-linea

SolrCloud-5.5.1配置中文ansj-3.4.6

今天分享一下這兩天倒持的給solr5.5.1配置中文分詞的一些事項,本人剛剛開始研究SolrCloud,比照網上的教程與自己親身試驗的總結一下,通過這兩天的折騰覺得找對匹配的版本是頂頂重要的一件事。 首先按照網上的教程來: 第一步,下載ansj的

Solr之配置中文

1、使用solr自帶分詞器 1.1、拷貝Jar包 cp /opt/solr/solr-7.3.1/contrib/analysis-extras/lucene-libs/lucene-ana

solr6.4+拼音ik中文

整理一下前端時間用的solr結合拼音分詞與ik中文分詞。solr比lucene封裝較好,可以直接在配置檔案中配置這些分詞就可以直接用。 主要工具包: pinyinAnalyzer.jar ik-analyzer-solr6.x.jar pinyin4j-2.5.0

solr 7+tomcat 8 + mysql實現solr 7基本使用(安裝、整合中文器、定時同步資料庫資料以及專案整合)

基本說明 Solr是一個開源專案,基於Lucene的搜尋伺服器,一般用於高階的搜尋功能; solr還支援各種外掛(如中文分詞器等),便於做多樣化功能的整合; 提供頁面操作,檢視日誌和配置資訊,功能全面。 solr 7 + tomcat 8實現solr 7的安裝 Sol

solr 中文mmeseg4jik analyzer效果對比

摘要: 之前用solr6成功集成了中文分詞mmeseg4j,也順利整合了ik analyzer,對比一下他們分詞的效果。 1884年,中法戰爭時被派福建會辦海疆事務。 ik analyzer:18

Solr之——整合mmseg4j中文

在上一篇博文《Solr之——整合Tomcat》中,我們介紹了Solr與Tomcat的整合方式,還沒有閱讀上一篇博文的朋友,請先閱讀上一篇博文《Solr之——整合Tomcat》,本文是在上一篇博文的基礎上整合mmseg4j中文分詞詞庫的。下面我們一起來實現Solr與mmse

開源 Java 中文Ansj 作者孫健專訪

Ansj 是一個開源的 Java 中文分詞工具,基於中科院的 ictclas 中文分詞演算法,比其他常用的開源分詞工具(如mmseg4j)的分詞準確率更高。  線上演示:http://ansj.sdapp.cn/demo/seg.jsp  官網地址:http://www.