admin 管理员组文章数量: 888526
Lucene提供的几种分词器
1、几种lucene提供的分词器
下面是几种分词器的代码实现示例。
import org.apache.lucene.analysis.*;
import org.apache.lucene.analysis.cjk.CJKAnalyzer;
import org.apache.lucene.analysis.core.KeywordAnalyzer;
import org.apache.lucene.analysis.core.SimpleAnalyzer;
import org.apache.lucene.analysis.core.StopAnalyzer;
import org.apache.lucene.analysis.core.WhitespaceAnalyzer;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.analysis.tokenattributes.CharTermAttribute;
import org.apache.lucene.document.Document;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.IndexWriterConfig;
import org.apache.lucene.store.FSDirectory;import java.io.IOException;
import java.io.StringReader;
import java.nio.file.Paths;/*** Created by grant on 2019/9/18.*/
public class VariousAnalyzer{private static String str = "中华人民共和国简称中国, 是一个有13亿人口的国家";public static void main(String[] args) throws IOException {//标准分词器Analyzer analyzer = null;analyzer = new StandardAnalyzer();System.out.println("标准分词:" + analyzer.getClass());printAnalyzer(analyzer);//空格分词analyzer = new WhitespaceAnalyzer();System.out.println("空格分词:" + analyzer.getClass());printAnalyzer(analyzer);//简单分词analyzer = new SimpleAnalyzer();System.out.println("简单分词:" + analyzer.getClass());printAnalyzer(analyzer);//二分法分词analyzer = new CJKAnalyzer();System.out.println("二分法分词:" + analyzer.getClass());printAnalyzer(analyzer);//关键词分词analyzer = new KeywordAnalyzer();System.out.println("关键词分词:"+ analyzer.getClass());printAnalyzer(analyzer);//停用词分词analyzer = new StopAnalyzer();System.out.println("停用词分词:"+ analyzer.getClass());printAnalyzer(analyzer);}public static void printAnalyzer(Analyzer analyzer) throws IOException {StringReader reader = new StringReader(str);TokenStream toStream = analyzer.tokenStream(str,reader);toStream.reset();//清空流CharTermAttribute teAttribute = toStream.getAttribute(CharTermAttribute.class);while (toStream.incrementToken()){System.out.print(teAttribute.toString() +"|");}System.out.println("\n");analyzer.close();}
}
分词结果
标准分词:class org.apache.lucene.analysis.standard.StandardAnalyzer
中|华|人|民|共|和|国|简|称|中|国|是|一|个|有|13|亿|人|口|的|国|家|空格分词:class org.apache.lucene.analysis.core.WhitespaceAnalyzer
中华人民共和国简称中国,|是一个有13亿人口的国家|简单分词:class org.apache.lucene.analysis.core.SimpleAnalyzer
中华人民共和国简称中国|是一个有|亿人口的国家|二分法分词:class org.apache.lucene.analysis.cjk.CJKAnalyzer
中华|华人|人民|民共|共和|和国|国简|简称|称中|中国|是一|一个|个有|13|亿人|人口|口的|的国|国家|关键词分词:class org.apache.lucene.analysis.core.KeywordAnalyzer
中华人民共和国简称中国, 是一个有13亿人口的国家|停用词分词:class org.apache.lucene.analysis.core.StopAnalyzer
中华人民共和国简称中国|是一个有|亿人口的国家|
2、两种典型应用广泛的中文分词器
public class IKvsSmartAnalyzer {private static String str1 = "公路局正在治理解放大道路面积水问题";private static String str2 = "IKAnalyzer是一个开源的,基于java语言开发的轻量级的中文分词工具包";public static void main(String[] args) throws IOException {Analyzer analyzer = null;System.out.println("句子一:"+str1);System.out.println("SmartChineseAnalyzer分词结果:");analyzer = new SmartChineseAnalyzer();printAnalyzer(analyzer,str1);System.out.println("IKAnalyzer分词结果:");analyzer = new IKAnalyzer(true);printAnalyzer(analyzer,str1);System.out.println("------------------");System.out.println("句子二 "+ str1);System.out.println("SmartChineseAnalyzer分词结果:");analyzer = new SmartChineseAnalyzer();printAnalyzer(analyzer,str2);System.out.println("IKAnalyzer分词结果:");analyzer = new IKAnalyzer(true);printAnalyzer(analyzer,str2);analyzer.close();}public static void printAnalyzer(Analyzer analyzer,String str) throws IOException {StringReader reader = new StringReader(str);TokenStream toStream = analyzer.tokenStream(str,reader);toStream.reset();//清空流CharTermAttribute teAttribute = toStream.getAttribute(CharTermAttribute.class);while (toStream.incrementToken()){System.out.print(teAttribute.toString() +"|");}System.out.println("\n");analyzer.close();}
}
句子一:公路局正在治理解放大道路面积水问题
SmartChineseAnalyzer分词结果:
公路局|正|在|治理|解放|大|道路|面积|水|问题|IKAnalyzer分词结果:
公路局|正在|治理|大道|路面|积水|问题|------------------
句子二 IKAnalyzer是一个开源的,基于java语言开发的轻量级的中文分词工具包
SmartChineseAnalyzer分词结果:
ikanalyz|是|一个|开|源|的|基于|java|语言|开发|的|轻量级|的|中文|分词|工具包|IKAnalyzer分词结果:
ikanalyzer|是|一个|开源|的|基于|java|语言|开发|的|轻量级|中文|分词|工具包|
本文标签: Lucene提供的几种分词器
版权声明:本文标题:Lucene提供的几种分词器 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/jishu/1693586509h230801.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论