Lucene之中文庖丁解牛(mmseg)分詞器-yellowcong
阿新 • • 發佈:2019-01-02
庖丁解牛分詞器,分詞器和Lucene的版本需要注意,有可能有衝突,報錯,我最開始是1.8.5的mmseg4j和一個lucene有衝突,後來,換了Mmseg4j版本後,就好了
下載地址
#這個是包含有字典的,我們要裡面的字典,不需要jar包
http://yellowcong.qiniudn.com/mmseg4j-1.8.5.zip
案例
演示了標準分詞器和中文分詞器處理後,詞彙的效果
package com.yellowcong.index;
import java.io.File;
import java.io.IOException;
import java.io.StringReader;
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.TokenStream;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.analysis.tokenattributes.CharTermAttribute;
import org.apache.lucene.util.Version;
import com.chenlb.mmseg4j.Dictionary;
import com.chenlb.mmseg4j.analysis.MMSegAnalyzer;
/**
* 建立使用者:狂飆的yellowcong<br/>
* 建立日期:2017年12月3日<br/>
* 建立時間:下午4:44:47<br/>
* 機能概要:
*/
public class Demo1 {
public static void main(String[] args) throws Exception {
String dicPath = getDicPath();
// 獲取到中文分詞了
MMSegAnalyzer analyzer = new MMSegAnalyzer(new File(dicPath));
String content = "我是中國人";
//中文分詞
System.out.println("-------------------中文分詞----------------------" );
dispalyToken(analyzer, content);
//標準分詞器
System.out.println("-------------------標準分詞器----------------------");
StandardAnalyzer stand = new StandardAnalyzer(Version.LUCENE_45);
dispalyToken(stand, content);;
}
/**
* 建立使用者:狂飆的yellowcong<br/>
* 建立日期:2017年12月3日<br/>
* 建立時間:下午9:20:13<br/>
* 機能概要: 檢視分詞資訊
* @param analyzer
* @param content 需要分詞的類容
* @throws Exception
*/
public static void dispalyToken(Analyzer analyzer, String content) throws Exception {
TokenStream stream = analyzer.tokenStream("content", new StringReader(content));
// 獲取分詞資訊
CharTermAttribute cta = stream.addAttribute(CharTermAttribute.class);
stream.reset();
while (stream.incrementToken()) {
System.out.println("[" + cta.toString() + "]");
}
}
/**
* 建立使用者:狂飆的yellowcong<br/>
* 建立日期:2017年12月3日<br/>
* 建立時間:下午4:50:16<br/>
* 機能概要:獲取字典的存放地址
*
* @return
*/
public static String getDicPath() {
//獲取data目錄,這樣就可以獲取到目錄下所有的字典了
String dicPath = Demo1.class.getClassLoader().getResource("data").getFile();
return dicPath;
}
}
執行結果
中文分詞就有不是一個 一個字元了,標準分詞器對於中問來說,完犢子
環境搭建
專案結構
其中wrods-my.dic是自己定義的分詞字典
pom.xml
對於mmseg的版本和lucene的版本有要求,不然,就有衝突
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>yellowcong</groupId>
<artifactId>day12_02</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>day12_02</name>
<url>http://maven.apache.org</url>
<!-- 配置國內比較快的 阿里雲的Maven倉庫 -->
<repositories>
<repository>
<id>aliyunmaven</id>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
</repository>
</repositories>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<lucene.version>4.5.1</lucene.version>
<mmseg4j.version>1.9.1</mmseg4j.version>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
<scope>test</scope>
</dependency>
<!-- lucene核心包 -->
<dependency>
<groupId>org.apache.lucene</groupId>
<artifactId>lucene-core</artifactId>
<version>${lucene.version}</version>
</dependency>
<!--QueryParser 查詢類-->
<dependency>
<groupId>org.apache.lucene</groupId>
<artifactId>lucene-queryparser</artifactId>
<version>${lucene.version}</version>
</dependency>
<!-- 分詞器 -->
<dependency>
<groupId>org.apache.lucene</groupId>
<artifactId>lucene-analyzers-common</artifactId>
<version>${lucene.version}</version>
</dependency>
<!-- 高亮顯示 -->
<dependency>
<groupId>org.apache.lucene</groupId>
<artifactId>lucene-highlighter</artifactId>
<version>${lucene.version}</version>
</dependency>
<!-- 庖丁解牛分詞器 -->
<dependency>
<groupId>com.chenlb.mmseg4j</groupId>
<artifactId>mmseg4j-core</artifactId>
<version>${mmseg4j.version}</version>
</dependency>
<dependency>
<groupId>com.chenlb.mmseg4j</groupId>
<artifactId>mmseg4j-analysis</artifactId>
<version>${mmseg4j.version}</version>
</dependency>
</dependencies>
</project>