-2

使用开源 Java 自动机库,例如:org.apache.lucene.util.automaton 或 dk.brics.automaton,如何构建自动机进行前缀匹配?

例如:从字符串集 ["lucene", "lucid"] 创建的自动机,在给定 "luc" 或 "luce" 时将匹配,但在给定 "lucy" 或 "lucid dream" 时不匹配。

4

1 回答 1

0

通过将所有状态设置为接受,可以使用 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);
    }
于 2017-02-22T00:18:07.077 回答