2017-02-11 4 views
-2

Par exemple: un automate créé à partir de l'ensemble des chaînes ["lucene", "lucide"], qui correspondra quand donné "luc", ou "luce", mais ne correspond pas quand donné "lucy" ou "rêve lucide ".Automate pour la correspondance des préfixes

+0

C'est exactement comment un ([Trie] https: //en.wikipedia. org/wiki/Trie) fonctionne. Une idée similaire peut être utilisée pour construire l'automate. L'utilisation d'un caractère "fin d'entrée" peut aussi être utile - comme '$'. – Obicere

+0

Je suis familier avec les essais, bien que les implémentations que j'ai trouvées dans Java (par exemple: PatriciaTrie) sont en fait des cartes, et retourneront une valeur associée à un préfixe. Je veux juste vérifier la présence d'un préfixe. – tukushan

Répondre

0

correspondant Prefix est possible à l'aide org.apache.lucene.util.automaton en réglant tous les Etats à accepter, par exemple:

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