ansj 2.0.7 错误例子分析

我在做一个solr的项目,分词选定了ansj分词。

选择ansj的原因:

1)身边若干朋友的念叨,说是效果不错

2)网上看了若干评论,说是不错

3)自己尝试了一些case,觉得确实不错。

好了,项目中选择了ansj2.0.7-min.jar作为实际使用的版本。

结果。。。愿望是美好的,现实是残酷的。

碰到了若干case,效果不好(使用IndexAnalysis):

1)上海马勒别墅

切分结果:(上/海马/勒/别墅)

预期结果:(上海/马勒/别墅)

调试了一下,在构建Graph的时候没有问题,问题出现在Merger阶段的

            @Override
            public List<Term> merger() {
                graph.walkPath();//上海马勒别墅的问题在这里// 数字发现
                if (MyStaticValue.isNumRecognition && graph.hasNum) {
                    NumRecognition.recognition(graph.terms);
                }

                // 姓名识别
                if (graph.hasPerson && MyStaticValue.isNameRecognition) {
                    // 亚洲人名识别
                    new AsianPersonRecognition(graph.terms).recognition();
                    graph.walkPathByScore();
                    NameFix.nameAmbiguity(graph.terms);
                    // 外国人名识别
                    new ForeignPersonRecognition(graph.terms).recognition();
                    graph.walkPathByScore();
                }

                // 用户自定义词典的识别
                userDefineRecognition(graph, forests);

                return result();
            }

2)电话卡+周杰伦摩天轮巡演(开启人名识别)

切分结果:(电话/卡+周/杰伦摩/天轮/巡演)

期望结果: (电话卡/+/周杰伦/摩天轮/巡演)

结果发现, 卡+周 居然被识别成了一个名词。进一步debug发现,“+” 的PersonNatureAttr 属性值不太正常,因为"+"的TermNatures 是TermNatures.NULL.

最终debug发现, TermNatures.NULL 这个常量被修改过。

最终的最终发现,作者在AnsjItem中定义了成员变量引用到了 TermNatures.NULL,并对其进行了修改。

问题发现,并修复掉。

---------------------------------------------------------------------------------------------------------------------------------最终将bug反馈给作者。打完收工

后记,发现人名识别效果分析。

下期再谈论Ansj的人名识别话题。

转载于:https://www.cnblogs.com/lykm02/p/4091832.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值