-2
使用開源的Java自動機庫,例如:org.apache.lucene.util.automaton或dk.brics.automaton,如何構建用於前綴匹配的自動機?用於前綴匹配的自動機
例如:由字符串集合[「lucene」,「lucid」]創建的自動機,當給定「luc」或「luce」時將匹配,但當給出「lucy」或「lucid dream」 」。
使用開源的Java自動機庫,例如:org.apache.lucene.util.automaton或dk.brics.automaton,如何構建用於前綴匹配的自動機?用於前綴匹配的自動機
例如:由字符串集合[「lucene」,「lucid」]創建的自動機,當給定「luc」或「luce」時將匹配,但當給出「lucy」或「lucid dream」 」。
前綴匹配可能使用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);
}
這正是如何[特里結構(HTTPS://en.wikipedia。 org/wiki/Trie)的作品。類似的想法可以用來構造自動機。 「輸入結束」字符的使用可能也很有用 - 比如'$'。 – Obicere
我對嘗試很熟悉,儘管我在Java中找到的實現(例如:PatriciaTrie)實際上是Maps,並且會返回與前綴關聯的值。我只想檢查是否存在前綴。 – tukushan