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 }

猜你喜欢

转载自www.cnblogs.com/bestlmc/p/12304393.html
今日推荐