2010-09-11 3 views
15

Textmates 'Fuzzy-Suche "ist wirklich großartig.Was ist der unscharfe Fuzzy-Suchalgorithmus von 'text to mat'?

Wincents Command-T Plugin für vim macht etwas ähnliches und es rockt auch.

Kann jemand erklären, wie diese funktionieren? Gibt es einen allgemeinen Begriff für die Methode, die sie verwenden?

Edit: ich wenig mehr Details über das, was diese Werkzeuge tun

Die Werkzeuge können Sie eine Liste von Optionen verengen (in diesem Fall Dateipfade) angezeigt werden.

Zum Beispiel, wenn ich die folgenden Dateien hatte:

/app/models/people.rb 
/app/models/address.rb 
/app/person.rb 
/person.rb 

zu erhalten, die Liste zu /app/models/people.rb verengen ich die alle folgenden geben könnte:

amp 
peo 
mp 
modelsp 

es ist sehr flexibel und ich finde meine Ich vermisse selbst diese "Listeneinschränkung", wenn die App, die ich verwende, sie nicht hat. Ich würde gerne mehr darüber erfahren, damit ich meine eigenen Plugins implementieren kann, wenn ich das Bedürfnis verspüre. Wünsche ich es besser erklären könnte, aber das ist, warum ich hier bin :)

Um es in Aktion zu sehen, Wincent der demo of command-t

+2

Pflege zu erklären, was genau diese Werkzeuge tun? –

+0

Es ist wie die Firefox awesomebar aber für die Dateien in Ihrem derzeit geöffneten Projekt. Es "verengt" die Datei, die Sie während der Eingabe benötigen. Ich finde diese Funktion großartig, aber ich habe nie viel darüber nachgedacht. –

+1

http: // Stapelüberlauf.com/questions/2891514/algoritms-for-fuzzy-matching-strings – ergosys

Antwort

3

Es scheint, eine Wildcard-Suche zwischen jedem Buchstaben zu tun.

Wenn es nur ein Element in der Liste der Optionen entspricht, würde es das als die beabsichtigte Option zurückgeben.

+0

Ich glaube, dass es auch die Buchstaben in der Nähe eines Direps stärker belastet. – kniteli

2

Es sieht zu sehen wie Befehl-T eine Art auf einem double Punkte tut gegeben durch die recursive_match Funktion in match.c, um die unscharfe Suche zu tun. Die Quelle von Command-T ist vom Autor urheberrechtlich geschützt, aber die Quelle kann durch Öffnen des Vimballs in einem Texteditor (Download am Ende von this page) gefunden werden und könnte wahrscheinlich als Inspiration für einen allgemeineren unscharfen Suchalgorithmus (von jemandem, der liest C besser als ich zumindest).

0

Als eine Nebenbemerkung: Werfen Sie einen Blick auf (Apache Solr) und die Art, wie es Indizes generiert. Ich benutze es ziemlich oft, wenn ich versuche, etwas ähnliches wie Textmates Command-T im Web zu implementieren.

Überprüfen Sie speziell die EdgeNGramFilterFactory. Ich glaube, irgendwo könnte es irgendwo einen Quellcode geben. (Es ist in Java obwohl ...)