dromara / hutool

🍬A set of tools that keep Java sweet.
https://hutool.cn
Other
28.91k stars 7.48k forks source link

DFA组件里对于特殊字符无法处理 #3639

Closed LinkDisapear closed 2 months ago

LinkDisapear commented 2 months ago

版本情况

JDK版本: openjdk_8_201 hutool版本: 5.8.27

问题描述(包括截图)

  1. 复现代码
    public static void main(String[] args) {
        WordTree wordTree = new WordTree();
        wordTree.addWord("≡国");
//        wordTree.addWord("∫国");
        String text = "春秋战国五代十国";
        System.out.println(wordTree.match(text));
    }
  1. 堆栈信息 国 Process finished with exit code 0

  2. 测试涉及到的文件(注意脱密) 无

说明:DFA组件处理敏感词等业务时,如果敏感词是由一些特殊字符开始的,比如上面代码里的≡和∫等等,那么词汇的判断就发生混乱,无法把整词当成敏感词。这个场景下很多网站会用特殊符号来代替汉字,比如上面的”≡“可以代替汉字”三“来发出一些敏感的词。

looly commented 2 months ago

StopChar类中定义了一些特殊字符会自动过滤,因此特殊字符不会匹配。

如果你想匹配特殊字符,使用WordTree.setCharFilter自定义字符过滤即可。