Laden...

AutocompleteTextBox mit Unterstützung von Phonetischen Algorithmen

Erstellt von xxMUROxx vor 12 Jahren Letzter Beitrag vor 12 Jahren 5.767 Views
xxMUROxx Themenstarter:in
1.552 Beiträge seit 2010
vor 12 Jahren
AutocompleteTextBox mit Unterstützung von Phonetischen Algorithmen

Beschreibung:

Hiermit möchte ich euch meine AutocompleteTextBox vorstellen welche hier gewünscht wurde und welche die Vorschläge der autokompletierung anhand von Phonetischen Algorithmen trifft.

Zur Zeit sind folgende Algorithmen implementiert:*Soundex *Kölner Phonetic *Leveshtein Distanz *NYSISS *Metaphone *Caverphone

Code und Beispiel findet ihr im Anhang.
Ich möchte mich nur kurz zur Benutzung äussern.
Die WatermarkedTextBox, welche die Basisklasse der AutocompleteTextBox darstellt kann wie folgt benutzt werden.

<WPFToolkit:WatermarkedTextBox WatermarkText="WatermarkedTextBox" />

Falls die Textfarbe des Watermark-Text gewünscht wird, kann diese mit WatermarkForeground gesetzt werden.
Um dem Benutzer auch den Inhalt des Watermark-Textes nach Texteingabe zu ermöglichen kann IsWatermarkUsedForTooltip gesetzt werden. Dies ist jedoch nur möglich falls nicht explizit die Tooltip Eigenschaft gesetzt wurde.
Grundsätzlich wird der Watermark-Text gedimmt falls die WatermarkedTextBox den Fokus bekommt. Diese Opacity ist standardmäßig auf 0.5 eingestellt kann jedoch mit OpacityWatermarkSelection geändert werden.

Soviel zu der WatermerkedTextBox.
Nun möchte ich mich zur AutocompleteTextBox äussern. Diese erbt wie bereits gesagt von der WatermarkedTextBox, wesswegen ich die Eigenschaften dieser vorhin erklärte.
Die AutocompleteTextBox wird mit einem Phonetischen Algorythmus mit Daten gespeist mit welchem dann aufgrund des eingegebenen Textes mögliche ähnliche strings vorgeschlagen werden.
Die zu filternden Daten, als IEnumerable<string> werden einem von PhoneticFilter erbenden Klasse übergeben. Ich habe schon zwei Klassen implementiert. Einmal die PhoneticComparerFilter und dann die PhoneticEncodeFilter welche sich daran unterscheiden dass die erstere von Algorithmen abgeleited wird welche den direkten Vergleich von zwei Wörtern benötigt und immer wider neu berechnet werden muss (Leveshten Distanz) und die andere den eingegebenen Wert anhand des Algorithmus verschlüsselt und dann nur noch mit dem eingegebenen Text der TextBox verglichen werden muss.

Grundsätzlich funktioniert alles wie folgt:


public IPhoneticFilter FilteringList
{
    get
    {
        List<string> l = new List<string>();
        l.Add("Michale");
        l.Add("Mfchale");
        l.Add("Michfale");
        l.Add("Micghale");
        l.Add("Michaale");
        l.Add("Micahale");
        return new PhoneticEncodeFilter(new Metaphone(), l );
    }
}

Je nach dem welchen PhoneticFilter nimmt sind andere Phonetische Algorithmen erlaubt.

Die AutocompleteTextBox hat folgende DependencyProperties:

IsSearching: Zeigt an ob z.Z. gesucht wird oder nicht

SearchIndicatorDescription: Ein string welcher angezeigt wird sobald gesucht wird. Dieser ist nur sichtbar falls folgende Eigenschaft gesetzt wurde.

ShowSearchIndicator: Wenn TRUE wird der Text zur SearchIndicatorDescription angezeit

SearchDelay: Gibt an welche Zeit nach der letzten Tastatureingabe verstreichen muss damit mit der Suche begonnen wird.

Threshold: Gibt die Anzahl der Zeichen an welche eingegeben werden müssen damit die Suche startet.

MatchGranularity: Gibt die Genauigkeit an mit welcher der Algorithmus arbeitet. Man kann zwischen drei Werten wählen.
* Exact: Beide, der Wert der Liste und der der Eingabe muss genau übereinstimmen (Haus, Haus=> true) (flur, Hausflur=>false)
* StartMatch: Ein der beiden verschlüsselten Werte muss mit dem anderen starten. (Haus, Hausflur => true) (flur, Hausflur=>false)
* ContainsMatch: Ein der beiden verschlüsselten Werte muss im anderen vorhanden sein. (Haus, Hausflur => true) (flur, Hausflur=>true)
(Die Werte im Klammern sollen nur als Beispiel dienen. Normalerweise liefern die Algorithmen andere Werte)

Ich habe in der Beispielsdatei oben genannte Algorithmen implementiert. Es sollte je nach Anwendungsgebier der Algorithmus gewechselt werden.
Auch je nach Eingabesprache eignet sich der eine Algorithmus besser als ein anderer. Für meinen Bedarf hat sich der Metaphone etabliert.

Wenn die Benutzung unklar ist oder Verbesserungsvorschläge gewünscht werden lasst es mich wissen.

Lizenzierung: Ich bitte euch nur um Bedingung zur Benutzung des Codes: Es ist nicht gestattet den Copyrightheader zu entfernen. Falls ihr den Code ändert und anpasst würde ich mir wünschen wenn ich namentlich genannt werde.

Schlagwörter: AutocompleteTextBox, WatermarkedTextBox, Phonetik

Mein Blog
Meine WPF-Druckbibliothek: auf Wordpress, myCSharp

xxMUROxx Themenstarter:in
1.552 Beiträge seit 2010
vor 12 Jahren

Mein Blog
Meine WPF-Druckbibliothek: auf Wordpress, myCSharp

xxMUROxx Themenstarter:in
1.552 Beiträge seit 2010
vor 12 Jahren

Mein Blog
Meine WPF-Druckbibliothek: auf Wordpress, myCSharp