Hallo Holger,
erstmal vielen lieben Dank für deine ausführliche und offene Antwort.
HBuick schrieb:
Angefangen habe ich mit "Kölner Phonetik", dann habe ich Levenshtein dazugenommen, dann nur noch Levenshtein.
Das bekomme ich irgendwie nicht zusammen
Begriffe/Wörter mit der Kölner Phonetic codiert und darauf dann Levenshtein loslassen?
Oder meinst du viel mehr: Die Eingabe wird mit der Kölner Phonetic codiert und mit einer Liste codierter Wörter verglichen. Wenn kein Treffer wird der Klartext via Levenshtein mit einer Wortliste verglichen und dann anhand des Wertes entsprechend reagiert?
HBuick schrieb:
<snip>Gib mal einen Vertipper ein, oder nur einen Wortanfang, dann die Leertaste, und du wirst merken, dass du das erste Wort nicht weiterschreiben musst und trotzdem weiterkommst in der Eingabe mit den vorgeschlagenen weiteren Labels zur Eingrenzung der Suche. Ich habe mich da von der Google-Eingabe inspirieren lassen.
Nennt sich Autosuggest
Ich löse solche Aufgaben gerne mit einer binären Suche in einer Wortliste, die dynamisch im Backend nachgeladen und dann via WebService vom Client abgefragt wird.
HBuick schrieb:
Am Anfang dachte ich auch, ich müsste erstmal eine Liste aller wichtigen Wörter haben, habe z.B. aus "Esperanto Vortaro" oder repo.or.cz/w/wortliste.git versucht die wichtigsten Wörter herauszuholen.
Ohne eine Stammwortliste wird das ganze Konzept aber nicht funktionieren. Woher soll der Algorithmus sonnst sinnvolle Wörter aus einem Domänennamen extrahieren? Z.B. dasistmeinesuperdomaene.de
Entweder du hast eine Stammwortliste anhand der sprachspezifisch die einzelnen Begriffe, Füllwörter udgl. extrahiert werden, oder du arbeitest mit einem WordBoundary Algorithmus aus der Linguistik. Diese Algorithmen sind AFAIK aber sehr unzuverlässig, wenn etwa "denglisch" verwendet wird.
HBuick schrieb:
Dann habe ich gemerkt, dass es besser ist, die Liste mit den eingegebenen Links wachsen zu lassen. Wird ein Link neu eingegeben und dabei ein neuer Label, dann kann im Backend dieser Label eingeordnet werden.
- Entweder als Synonym dann verschwindet dieser Label als eigenständiger Datensatz, oder
- hirarchisch, also Oberbegriffe, dann wird dieser Label bei dem "Elternlabel" eingetragen. Dabei wird bestimmt, ob die Weiterleitung in eine oder beide Richtungen gehen soll.
Alle Synonyme, die zusammengehören werden unter einem dieser Wörter in einen Datensatz gepackt.
Hirarchisch bezogene Wörter bleiben als eigenständige Datensätze bestehen.
Das ist alles so in die Struktur der Datenbank und Tabellen integriert, dass es auf Geschwindigkeit optimiert ist, also die Daten sind mehrfach vorhanden, werden also aus den Ausgangstabellen in Tabellen kopiert, wo der Zugriff einfacher wird.
Hier beschreibst du, wenn ich dich richtig verstehe, exakt den Aufbau eines Thesaurus, der nur mit Erweiterungen arbeitet.
<extension>
<syn>JavaScript</syn>
<syn>JS</syn>
<syn>JScript</syn>
</extension>
[/quote]
Mich interessiert diese Thematik deshalb so brennende, weil ich gerade für ein Projekt ganz ähnliche Anforderungen im Backend habe. Dort werden Domänennamen, sprachunabhängig, in Begriffe zerlegt und in einen Wortkatalog eingeordnet. Dabei bleiben immer "Wortreste" aus noch unbekannten Begriffen und Silben übrig. Für diese "Wortreste" habe ich noch keine funktionierende Lösung. Daher verarbeite ich diese "Wortreste" im Moment noch manuell.
Dieser Katalog ist der Teil einer Heuristik, der mittels des Bayestheorem die Wahrscheinlichkeit eines Zustandes bestimmt. Es sind zwar noch andere heuristische Methode enthalten, aber dieser Bereich stellt die Kernfunktionalität.
Servus,
Klaus
klaus_b@.NET über alles was an .NET und C# Spass macht.
Beitrag erstellen
EinloggenKostenlos registrieren