2017-02-11 4 views
-2

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

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

+0

Это именно то, как [Trie] (https: //en.wikipedia. org/wiki/Trie). Аналогичную идею можно использовать для построения автомата. Использование символа «конец ввода» также может быть полезно, например, '$'. – Obicere

+0

Я знаком с попытками, хотя реализации, которые я нашел в Java (например: PatriciaTrie), на самом деле являются Картами и возвратят значение, связанное с префиксом. Я просто хочу проверить наличие префикса. – tukushan

ответ

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); 
    }