前缀匹配自动机
Automaton for prefix matching
使用开源Java自动机库,例如:org.apache.lucene.util.automaton或dk.brics.automaton,我如何构建前缀匹配自动机?
例如:从字符串集 ["lucene"、"lucid"] 创建的自动机,在给定 "luc" 或 "luce" 时匹配,但不匹配当给定 "lucy" 或 "lucid dream".
通过将所有状态设置为接受,使用 org.apache.lucene.util.automaton 可以进行前缀匹配,例如:
String[] strings = new String[]{"lucene", "lucid dream"};
final List<BytesRef> terms = new ArrayList<>();
for(String s : strings) {
terms.add(new BytesRef(s));
}
Collections.sort(terms);
final Automaton a = DaciukMihovAutomatonBuilder.build(terms);
for (int i = 0; i < a.getNumStates(); i++) {
a.setAccept(i, true);
}
使用开源Java自动机库,例如:org.apache.lucene.util.automaton或dk.brics.automaton,我如何构建前缀匹配自动机?
例如:从字符串集 ["lucene"、"lucid"] 创建的自动机,在给定 "luc" 或 "luce" 时匹配,但不匹配当给定 "lucy" 或 "lucid dream".
通过将所有状态设置为接受,使用 org.apache.lucene.util.automaton 可以进行前缀匹配,例如:
String[] strings = new String[]{"lucene", "lucid dream"};
final List<BytesRef> terms = new ArrayList<>();
for(String s : strings) {
terms.add(new BytesRef(s));
}
Collections.sort(terms);
final Automaton a = DaciukMihovAutomatonBuilder.build(terms);
for (int i = 0; i < a.getNumStates(); i++) {
a.setAccept(i, true);
}