2017-02-11 73 views
-2

使用開源的Java自動機庫,例如:org.apache.lucene.util.automaton或dk.brics.automaton,如何構建用於前綴匹配的自動機?用於前綴匹配的自動機

例如:由字符串集合[「lucene」,「lucid」]創建的自動機,當給定「luc」或「luce」時將匹配,但當給出「lucy」或「lucid dream」 」。

+0

這正是如何[特里結構(HTTPS://en.wikipedia。 org/wiki/Trie)的作品。類似的想法可以用來構造自動機。 「輸入結束」字符的使用可能也很有用 - 比如'$'。 – Obicere

+0

我對嘗試很熟悉,儘管我在Java中找到的實現(例如:PatriciaTrie)實際上是Maps,並且會返回與前綴關聯的值。我只想檢查是否存在前綴。 – 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); 
    }