enhance dfa

This commit is contained in:
Looly 2019-09-05 08:30:52 +08:00
parent 32337a52a6
commit b988996874
2 changed files with 26 additions and 23 deletions

View File

@ -1,8 +1,9 @@
package cn.hutool.dfa; package cn.hutool.dfa;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set; import java.util.Set;
import cn.hutool.core.collection.CollUtil;
/** /**
* 过滤词及一些简单处理 * 过滤词及一些简单处理
* *
@ -10,26 +11,25 @@ import java.util.Set;
*/ */
public class StopChar { public class StopChar {
/** 不需要处理的词,如标点符号、空格等 */ /** 不需要处理的词,如标点符号、空格等 */
public static final Set<Character> STOP_WORD = new HashSet<>(Arrays.asList(new Character[] { ' ', '\'', '、', '。', public static final Set<Character> STOP_WORD = CollUtil.newHashSet(new Character[] { ' ', '\'', '、', '。', //
'·', 'ˉ', 'ˇ', '々', '—', '', '‖', '…', '', '', '“', '”', '', '', '〈', '〉', '《', '》', '「', '」', '『', '·', 'ˉ', 'ˇ', '々', '—', '', '‖', '…', '', '', '“', '”', '', '', '〈', '〉', '《', '》', '「', '」', '『', //
'』', '〖', '〗', '【', '】', '±', '', '', '×', '÷', '∧', '', '∑', '∏', '', '∩', '∈', '√', '⊥', '⊙', '∫', '』', '〖', '〗', '【', '】', '±', '', '', '×', '÷', '∧', '', '∑', '∏', '', '∩', '∈', '√', '⊥', '⊙', '∫', //
'∮', '≡', '≌', '≈', '∽', '∝', '≠', '≮', '≯', '≤', '≥', '∞', '', '∵', '∴', '∷', '♂', '♀', '°', '', '〃', '∮', '≡', '≌', '≈', '∽', '∝', '≠', '≮', '≯', '≤', '≥', '∞', '', '∵', '∴', '∷', '♂', '♀', '°', '', '〃', //
'℃', '', '¤', '¢', '£', '‰', '§', '☆', '★', '', '○', '●', '◎', '◇', '◆', '□', '■', '△', '▽', '⊿', '▲', '℃', '', '¤', '¢', '£', '‰', '§', '☆', '★', '', '○', '●', '◎', '◇', '◆', '□', '■', '△', '▽', '⊿', '▲', //
'▼', '◣', '◤', '◢', '◥', '▁', '▂', '▃', '▄', '▅', '▆', '▇', '█', '▉', '▊', '▋', '▌', '▍', '▎', '▏', '▓', '▼', '◣', '◤', '◢', '◥', '▁', '▂', '▃', '▄', '▅', '▆', '▇', '█', '▉', '▊', '▋', '▌', '▍', '▎', '▏', '▓', //
'※', '→', '←', '↑', '↓', '↖', '↗', '↘', '↙', '〓', '', 'ⅱ', 'ⅲ', 'ⅳ', '', 'ⅵ', 'ⅶ', 'ⅷ', 'ⅸ', '', '①', '※', '→', '←', '↑', '↓', '↖', '↗', '↘', '↙', '〓', '', 'ⅱ', 'ⅲ', 'ⅳ', '', 'ⅵ', 'ⅶ', 'ⅷ', 'ⅸ', '', '①', //
'②', '③', '④', '⑤', '⑥', '⑦', '⑧', '⑨', '⑩', '⒈', '⒉', '⒊', '⒋', '⒌', '⒍', '⒎', '⒏', '⒐', '⒑', '⒒', '⒓', '②', '③', '④', '⑤', '⑥', '⑦', '⑧', '⑨', '⑩', '⒈', '⒉', '⒊', '⒋', '⒌', '⒍', '⒎', '⒏', '⒐', '⒑', '⒒', '⒓', //
'⒔', '⒕', '⒖', '⒗', '⒘', '⒙', '⒚', '⒛', '⑴', '⑵', '⑶', '⑷', '⑸', '⑹', '⑺', '⑻', '⑼', '⑽', '⑾', '⑿', '⒀', '⒔', '⒕', '⒖', '⒗', '⒘', '⒙', '⒚', '⒛', '⑴', '⑵', '⑶', '⑷', '⑸', '⑹', '⑺', '⑻', '⑼', '⑽', '⑾', '⑿', '⒀', //
'⒁', '⒂', '⒃', '⒄', '⒅', '⒆', '⒇', '', 'Ⅱ', 'Ⅲ', 'Ⅳ', '', 'Ⅵ', 'Ⅶ', 'Ⅷ', 'Ⅸ', '', 'Ⅺ', 'Ⅻ', '', '”', '⒁', '⒂', '⒃', '⒄', '⒅', '⒆', '⒇', '', 'Ⅱ', 'Ⅲ', 'Ⅳ', '', 'Ⅵ', 'Ⅶ', 'Ⅷ', 'Ⅸ', '', 'Ⅺ', 'Ⅻ', '', '”', //
'', '¥', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '¥', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', //
'', '', '', '', '', '', '', '', '', '', '', '', '', '_', '', '', '', '', '∏', 'Ρ', '∑', '', '', '', '', '', '', '', '', '', '', '', '', '', '_', '', '', '', '', '∏', 'Ρ', '∑', //
'Υ', 'Φ', 'Χ', 'Ψ', 'Ω', 'α', 'β', 'γ', 'δ', 'ε', 'ζ', 'η', 'θ', 'ι', 'κ', 'λ', 'μ', 'ν', 'ξ', 'ο', 'π', 'Υ', 'Φ', 'Χ', 'Ψ', 'Ω', 'α', 'β', 'γ', 'δ', 'ε', 'ζ', 'η', 'θ', 'ι', 'κ', 'λ', 'μ', 'ν', 'ξ', 'ο', 'π', //
'ρ', 'σ', 'τ', 'υ', 'φ', 'χ', 'ψ', 'ω', '', '', '', '', '', '﹊', '', '╭', '╮', '╰', '╯', '', '_', 'ρ', 'σ', 'τ', 'υ', 'φ', 'χ', 'ψ', 'ω', '', '', '', '', '', '﹊', '', '╭', '╮', '╰', '╯', '', '_', //
'', '^', '', '^', '', '', '/', '\\', '\"', '<', '>', '`', '·', '。', '{', '}', '~', '', '(', ')', '-', '', '^', '', '^', '', '', '/', '\\', '\"', '<', '>', '`', '·', '。', '{', '}', '~', '', '(', ')', '-', //
'√', '$', '@', '*', '&', '#', '卐', '㎎', '㎏', '㎜', '㎝', '㎞', '㎡', '㏄', '㏎', '㏑', '㏒', '㏕' })); '√', '$', '@', '*', '&', '#', '卐', '㎎', '㎏', '㎜', '㎝', '㎞', '㎡', '㏄', '㏎', '㏑', '㏒', '㏕' });
/** /**
* 判断指定的词是否是不处理的词 * 判断指定的词是否是不处理的词 如果参数为空则返回true因为空也属于不处理的字符
* 如果参数为空则返回true因为空也属于不处理的字符
* *
* @param ch 指定的词 * @param ch 指定的词
* @return 是否是不处理的词 * @return 是否是不处理的词
@ -40,6 +40,7 @@ public class StopChar {
/** /**
* 是否为合法字符待处理字符 * 是否为合法字符待处理字符
*
* @param ch 指定的词 * @param ch 指定的词
* @return 是否为合法字符待处理字符 * @return 是否为合法字符待处理字符
*/ */

View File

@ -7,6 +7,7 @@ import java.util.List;
import java.util.Set; import java.util.Set;
import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.text.StrBuilder;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
/** /**
@ -162,10 +163,11 @@ public class WordTree extends HashMap<Character, WordTree>{
List<String> findedWords = new ArrayList<String>(); List<String> findedWords = new ArrayList<String>();
WordTree current = this; WordTree current = this;
int length = text.length(); int length = text.length();
StringBuilder wordBuffer;//存放查找到的字符缓存完整出现一个词时加到findedWords中否则清空 //存放查找到的字符缓存完整出现一个词时加到findedWords中否则清空
final StrBuilder wordBuffer = StrUtil.strBuilder();
char currentChar; char currentChar;
for (int i = 0; i < length; i++) { for (int i = 0; i < length; i++) {
wordBuffer = StrUtil.builder(); wordBuffer.reset();
for (int j = i; j < length; j++) { for (int j = i; j < length; j++) {
currentChar = text.charAt(j); currentChar = text.charAt(j);
// Console.log("i: {}, j: {}, currentChar: {}", i, j, currentChar); // Console.log("i: {}, j: {}, currentChar: {}", i, j, currentChar);