From 9873489ba7f00b3dc1d2c83aa8dc6e5692e9e5e9 Mon Sep 17 00:00:00 2001 From: pengcong90 Date: Wed, 21 Nov 2018 11:00:29 +0800 Subject: [PATCH] Update AnalyzeContext.java MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 使用ik_smart切分 金力泰合同审批 切分的结果是(金 力 泰 合同 审批)但是使用ik_max_word切分结果是(金 力 泰合 合同 审批 批),这样就存在搜索(金力泰 金力泰合同审批) 搜索不到的情况,查看源码发现泰未在字典中,泰合 合同在字典中,导致smart切分消歧的时候按照逆向概率高的规则忽略了泰合,输出结果泰就单独切分了,可以在输出结果时判断下 字典中无单字,但是词元冲突了,切分出相交词元的前一个词元中的单字,这样就能解决这个问题 --- .../java/org/wltea/analyzer/core/AnalyzeContext.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/main/java/org/wltea/analyzer/core/AnalyzeContext.java b/src/main/java/org/wltea/analyzer/core/AnalyzeContext.java index 982882e..5bf1ac9 100644 --- a/src/main/java/org/wltea/analyzer/core/AnalyzeContext.java +++ b/src/main/java/org/wltea/analyzer/core/AnalyzeContext.java @@ -267,6 +267,15 @@ class AnalyzeContext { Lexeme l = path.pollFirst(); while(l != null){ this.results.add(l); + //字典中无单字,但是词元冲突了,切分出相交词元的前一个词元中的单字 + int innerIndex = index + 1; + for (; innerIndex < index + l.getLength(); innerIndex++) { + Lexeme innerL = path.peekFirst(); + if (innerL != null && innerIndex == innerL.getBegin()) { + this.outputSingleCJK(innerIndex - 1); + } + } + //将index移至lexeme后 index = l.getBegin() + l.getLength(); l = path.pollFirst(); -- GitLab