Closed carl10086 closed 2 years ago
使用 BinTrie 的代码某些场景不能进行有效的完全切词
下面是 bug 演示:
import com.hankcs.hanlp.collection.AhoCorasick.AhoCorasickDoubleArrayTrie; import org.junit.Before; import org.junit.Test; public class BinTrieParseTextTest { private BinTrie<Integer> trie; @Before public void setup() { this.trie = new BinTrie<Integer>(); String[] words = new String[]{"溜", "儿", "溜儿", "一溜儿", "一溜"}; /*构建一个简单的词典, 从 core dict 文件中扣出的一部分*/ for (int i = 0; i < words.length; i++) { this.trie.put(words[i], i); } } @Test public void justForShowBugs() { showParseText("一溜儿"); /*我们在 一溜儿后面随便+一个字符,这里我们加一个空格 会完全不同*/ showParseText("一溜儿" + " "); } private void showParseText(final String text) { System.out.printf("========进行完全切词%s的演示======\n", text); this.trie.parseText(text, new AhoCorasickDoubleArrayTrie.IHit<Integer>() { @Override public void hit(int begin, int end, Integer value) { System.out.println(text.substring(begin, end)); } }); System.out.println("==========================="); } }
输出结果如下:
========进行完全切词一溜儿的演示====== 一溜 一溜儿 =========================== ========进行完全切词一溜儿 的演示====== 一溜 一溜儿 溜 溜儿 儿 ===========================
测试代码见 com.hankcs.hanlp.collection.trie.bintrie.BinTrieParseTextTest.java
com.hankcs.hanlp.collection.trie.bintrie.BinTrieParseTextTest.java
感谢指正!
bintrie 不能完全分词
Description
使用 BinTrie 的代码某些场景不能进行有效的完全切词
下面是 bug 演示:
输出结果如下:
How Has This Been Tested?
测试代码见
com.hankcs.hanlp.collection.trie.bintrie.BinTrieParseTextTest.java