Автомат для сопоставления префиксов

Используя библиотеку Java-автоматов с открытым исходным кодом, например: org.apache.lucene.util.automaton или dk.brics.automaton, как я могу создать автомат для сопоставления префиксов?

Например: автомат, созданный из набора строк ["lucene", "lucid"], который будет совпадать, когда ему дано "luc" или "luce", но не совпадает, когда ему дано "lucy" или "lucid dream".

1 ответ

Решение

Сопоставление префиксов возможно с использованием 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);
    }
Другие вопросы по тегам