Lucene:IKanalyzer与jcseg分词器
IKanalyzer
IKanalyzer分词器,有两种分词模式:
l 细粒度切分
l 智能分词
1 /** 2 * 使用分词器对字符串分词 3 */ 4 private static void IKanalyzer8() throws ParseException, IOException { 5 String words = "五月天创建的人生有限公司举报了一场演唱会,唱了一首do you ever shine"; 6 // 细粒度切分 7 try (Analyzer ik = new IKAnalyzer8();) { 8 TokenStream ts = ik.tokenStream("content", words); 9 System.out.println("IKAnalyzer中文分词器 智能切分,英文分词效果:"); 10 doToken(ts); 11 ts = ik.tokenStream("content", words); 12 System.out.println("IKAnalyzer中文分词器 智能切分,中文分词效果:"); 13 doToken(ts); 14 } 15 16 // IKAnalyzer 智能切分 17 try (Analyzer ik = new IKAnalyzer8(true);) { 18 TokenStream ts = ik.tokenStream("content", words); 19 System.out.println("IKAnalyzer中文分词器 智能切分,英文分词效果:"); 20 doToken(ts); 21 ts = ik.tokenStream("content", words); 22 System.out.println("IKAnalyzer中文分词器 智能切分,中文分词效果:"); 23 doToken(ts); 24 } 25 }
运行结果如下:
加载扩展词典:ext.dic
加载扩展停止词典:stopword.dic
IKAnalyzer中文分词器 智能切分,英文分词效果:
五月天|五月|五|月|天|创建|的人|人生|有限公司|有限|有|限|公司|举报|报了|一场|一|场|演唱会|演唱|会|唱了|一首|一|首|do|you|ever|shine|
IKAnalyzer中文分词器 智能切分,中文分词效果:
五月天|五月|五|月|天|创建|的人|人生|有限公司|有限|有|限|公司|举报|报了|一场|一|场|演唱会|演唱|会|唱了|一首|一|首|do|you|ever|shine|
IKAnalyzer中文分词器 智能切分,英文分词效果:
五月天|创建|人生|有限公司|举|报了|一场|演唱会|唱了|一首|do|you|ever|shine|
IKAnalyzer中文分词器 智能切分,中文分词效果:
五月天|创建|人生|有限公司|举|报了|一场|演唱会|唱了|一首|do|you|ever|shine|
Process finished with exit code 0
jcseg分词器
导入jar包
jcseg-analyzer-2.5.0.jar
jcseg-core-2.5.0.jar
maven配置
<dependency>
<groupId>org.lionsoul</groupId>
<artifactId>jcseg-core</artifactId>
<version>2.5.0</version>
</dependency>
<dependency>
<groupId>org.lionsoul</groupId>
<artifactId>jcseg-analyzer</artifactId>
<version>2.5.0</version>
</dependency>
代码测试
1 import org.apache.lucene.analysis.Analyzer; 2 import org.apache.lucene.queryparser.classic.QueryParser; 3 import org.apache.lucene.search.Query; 4 import org.lionsoul.jcseg.analyzer.JcsegAnalyzer; 5 import org.lionsoul.jcseg.tokenizer.core.JcsegTaskConfig; 6 7 /** 8 * JcsegAnalyzerTest 9 * 1.JcsegTaskConfig.COMPLEX_MODE 为复杂模式: 10 * 特点:四种过滤算法。 11 * 2.JcsegTaskConfig.SIMPLE_MODE 为简易模式 特点:只使用了最大化过滤算法,其他的同复杂模式。 12 * @author limingcheng 13 * @Date 2019/11/26 14 */ 15 public class JcsegAnalyzerTest { 16 17 public static void main(String[] args) throws Exception { 18 Analyzer analyzer = new JcsegAnalyzer(JcsegTaskConfig.NLP_MODE); 19 //available constructor: 20 //1, JcsegAnalyzer(int mode) 21 //2, JcsegAnalyzer(int mode, String proFile) 22 //3, JcsegAnalyzer(int mode, JcsegTaskConfig config) 23 //4, JcsegAnalyzer(int mode, JcsegTaskConfig config, ADictionary dic) 24 25 // 非必须(用于修改默认配置): 获取分词任务配置实例 26 JcsegAnalyzer jcseg = (JcsegAnalyzer) analyzer; 27 JcsegTaskConfig config = jcseg.getTaskConfig(); 28 // 追加同义词到分词结果中, 需要在 jcseg.properties 中配置 jcseg.loadsyn=1 29 config.setAppendCJKSyn(true); 30 // 追加拼音到分词结果中, 需要在 jcseg.properties 中配置 jcseg.loadpinyin=1 31 config.setAppendCJKPinyin(true); 32 // 更多配置, 请查看 com.webssky.jcseg.core.JcsegTaskConfig 类 33 config.setICnName(true); 34 // 分词内容 35 String keyword = "孙悟空,杨超越"; 36 37 // 使用QueryParser查询分析器构造Query对象 38 QueryParser qp = new QueryParser("text", analyzer); 39 qp.setDefaultOperator(QueryParser.AND_OPERATOR); 40 Query query = qp.parse(keyword); 41 System.out.println("Query = " + query); 42 } 43 44 45 46 }
Jcseg切分模式
jcseg分词器支持六种切分模式:
- (1).简易模式:FMM算法,适合速度要求场合。
- (2).复杂模式:MMSEG四种过滤算法,具有较高的歧义去除,分词准确率达到了98.41%。
- (3).检测模式:只返回词库中已有的词条,很适合某些应用场合。
- (4).最多模式:细粒度切分,专为检索而生,除了中文处理外(不具备中文的人名,数字识别等智能功能)其他与复杂模式一致(英文,组合词等)。
- (5).分隔符模式:按照给定的字符切分词条,默认是空格,特定场合的应用。
- (6).NLP模式:继承自复杂模式,更改了数字,单位等词条的组合方式,增加电子邮件,大陆手机号码,网址,人名,地名,货币等以及无限种自定义实体的识别与返回。
- (7).n-gram模式:CJK和拉丁系字符的通用n-gram切分实现。
1 import org.apache.lucene.analysis.Analyzer; 2 import org.apache.lucene.queryparser.classic.QueryParser; 3 import org.apache.lucene.search.Query; 4 import org.lionsoul.jcseg.analyzer.JcsegAnalyzer; 5 import org.lionsoul.jcseg.tokenizer.core.JcsegTaskConfig; 6 7 /** 8 * JcsegAnalyzerTest 9 * 1.JcsegTaskConfig.COMPLEX_MODE 为复杂模式: 10 * 特点:四种过滤算法。 11 * 2.JcsegTaskConfig.SIMPLE_MODE 为简易模式 特点:只使用了最大化过滤算法,其他的同复杂模式。 12 * @author limingcheng 13 * @Date 2019/11/26 14 */ 15 public class JcsegAnalyzerTest { 16 17 public static void main(String[] args) throws Exception { 18 Analyzer analyzer = new JcsegAnalyzer(JcsegTaskConfig.NLP_MODE); 19 //available constructor: 20 //1, JcsegAnalyzer(int mode) 21 //2, JcsegAnalyzer(int mode, String proFile) 22 //3, JcsegAnalyzer(int mode, JcsegTaskConfig config) 23 //4, JcsegAnalyzer(int mode, JcsegTaskConfig config, ADictionary dic) 24 25 // 非必须(用于修改默认配置): 获取分词任务配置实例 26 JcsegAnalyzer jcseg = (JcsegAnalyzer) analyzer; 27 JcsegTaskConfig config = jcseg.getTaskConfig(); 28 // 追加同义词到分词结果中, 需要在 jcseg.properties 中配置 jcseg.loadsyn=1 29 config.setAppendCJKSyn(true); 30 // 追加拼音到分词结果中, 需要在 jcseg.properties 中配置 jcseg.loadpinyin=1 31 config.setAppendCJKPinyin(true); 32 // 更多配置, 请查看 com.webssky.jcseg.core.JcsegTaskConfig 类 33 config.setICnName(true); 34 // 分词内容 35 String keyword = "华为腾讯阿里巴巴 0101304471127J"; 36 37 // 使用QueryParser查询分析器构造Query对象 38 QueryParser qp = new QueryParser("text", analyzer); 39 qp.setDefaultOperator(QueryParser.AND_OPERATOR); 40 Query query = qp.parse(keyword); 41 System.out.println("Query = " + query); 42 } 43 44 45 46 }