mayabot/mynlp

分词输出结果拼接后和原始句子不一致

Closed this issue · 3 comments

发现有个问题:分词输出结果拼接起来和原有的输入结果不一致,我看了一下,应该是归一化导致的,比如:“今年的2019年9月13日,中秋节快乐”中的中文逗号改成了英文逗号,“出现了一大批模糊主题”中的“糊”改成了“煳”,我感觉输出原始结果比较合适,或者如果用户想使用归一化或原始的结果,能否可以通过传入参数进行限定

的确是个问题。
词典分词里面应该不适用归一化,但是感知机分词必要经过归一化的过程。
我看一下API里面怎么保持原有输出。
“糊”改成了“煳”应该是归一化词典的问题

如果最后的长度一致的话,那可以做一个简单的封装,根据offset直接取原始query里面的词就可以了,如果长度不一致,可以构建一个结构:原始词、归一词,比如日期时间、数字、电话、网址等,原始词就是用户的输入,归一化的(time、number、phone、url)只是代号让感知机来训练的,这样最后输出取原始的即可,可以参见HanLP在这块的处理方案。

将在3.0.1中做出修改

val lerxer = Lexers.coreBuilder()
                .keepOriCharOutput()
                .build()
        Assert.assertEquals("看看 下面 这 中文 逗号 , Keep 大小写",
                lerxer.scan("看看下面这中文逗号,Keep 大小写").toPlainString()
        )

为Builder新增keepOriCharOutput()方法,开启保持字符串不变。默认不开启