• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

DB-Suche mit errechneten Ergebnissen ergänzen

Degers

Mitglied
Hallo zusammen,

ich stehe vor einem konzeptionellen Problem, wo mir die Erfahrung fehl, um gangbare Wege zur Umsetzung einer Idee zu finden und möchte daher um Anstöße bitten.

Zur Situation. Es geht um ein Sprachlernportal, wer sich die Sache live angucken möchte ist auf crovoc.de herzlich willkommen. Es ist ein Lernportal zur kroatischen Sprache, der Verständlichkeit halber werde ich meine Frage an einem deutschen Beispiel aufziehen.
Auf CroVoc lassen sich Vokabeln suchen. Dazu wird die Vokabeldatenbank ganz normal per MySQL durchsucht. Bei Adjektiven gibt eine Funktion auch noch Deklinationen zu dem Adjektiv aus, im Deutschen also z. B. schön- schöne- schönes- schöne etc. Das sieht dann folgendermaßen aus:

svnelkva.png
Nun möchte ich auch diese Begriffe "durchsuchen" können, sucht also ein Besucher nach dem kroatischen Wort für Schön, allerdings dekliniert, z. B. schönes, soll er trotzdem bei schön landen. Wie durchsuche ich aber etwas, was nicht in der Datenbank steht, sondern nur durch einen Funktion erstellt wird?

Mein erster Gedanke war, die Anfangsbuchstaben abzugleichen, die stets gleich oder ähnlich sind. Das gibt jedoch einen Haufen falsche Treffer. Eine andere Alternative wäre, alles in eine Datenbank zu übertragen. Das möchte ich allerdings, wenn möglich, vermeiden, da das den Pflegeaufwand massiv erhöhen würde.

Ich freue mich auf Hinweis! Danke schonmal. :)

Björn
 
Werbung:
Wenn du die Deklinationen die angezeigt werden automatisch aus dem Stammwort erzeugst, ist das dann nicht auch umgekehrt möglich? Ich habe keine Ahnung von kroatisch, aber das wäre der einzige Weg.

Wenn nicht, führt an zusätzlichen Datenbankspalten vermutlich kein Weg vorbei. Zusätzlicher Pflegeaufwand würde dir aber kaum entstehen, denn die kannst du automatisch füllen lassen. So wie jetzt in der Ausgabe die Deklinationen erzeugt werden, kann dies ja auch problemlos beim Anlegen und Updaten eines Stammworts in der Datenbank gemacht werden.
 
Werbung:
Important
When using SOUNDEX(), you should be aware of the following limitations:

  • This function, as currently implemented, is intended to work well with strings that are in the English language only. Strings in other languages may not produce reliable results.

  • This function is not guaranteed to provide consistent results with strings that use multibyte character sets, including utf-8.

Ich glaub für Kroatisch wirds dafür auch in ein paar Jahren noch keinen Support geben.
 
"May not" Wobei ich dir zustimmen muss, dass die Chance gering ist, da schon bei Deutsch Probleme auftreten und da wären es wenigstens die selben Zeichen.

Deswegen auch noch der Verweis auf Lucene.

Wenn ich jedoch die Frage falsch verstanden habe und er einfach "umgekehrt" suchen könnte wäre das natürlich viel einfacher.
 
Guten Mittag,

Wenn du die Deklinationen die angezeigt werden automatisch aus dem Stammwort erzeugst, ist das dann nicht auch umgekehrt möglich? Ich habe keine Ahnung von kroatisch, aber das wäre der einzige Weg.
Das geht leider nicht, da ich für die Funktion die Info brauche, was der Stamm ist.

Nochmal zur Klärung, dafür können wir ruhig ganz weg von der kroatischen Sprache bleiben: Sucht jemand nach „schönen„ (im Sinne von Wem gab sie einen Kuss? Dem schönen Mann) soll „schön“ der angezeigte Treffer sein. In der Datenbank ist schön als Vokabel eingetragen, schönen und die anderen Deklination allerdings nicht.

Soundex ist eine interessante Sache, aber außerhalb des Englischen absolut nicht im produktiven Einsatz zu gebrauchen. Beim kroatischen ist es spätestens vorbei wenn es um diakritische Zeichen wie Č, Š, Ž oder Đ geht.
Mein Weg, ähnliche Begriffe zu finden, ist derzeit über levensthein(). Darüber läuft die „Meintest du vielleicht xxx“-Ausgabe in der CroVoc-Suche.

Indirekt lässt sich das natürlich nutzen. Eine andere Überlegung meinerseits war, alle Deklinationen bei jeder Suche erstellen und durchsuchen zu lassen, was aber unnötige Rechenarbeit wäre. Über einen Ähnlichkeitsabgleich könnte man den Kreis der Adjektive, die zu durchsuchen sind, aber erheblich reduzieren.

Die andere mögliche Variante wäre eine Datenbanklösung, ja. Ich sehe durchaus den Sinn dahinter, sträube mich aber ein wenig dagegen, eine so gut arbeitende Lösung durch Datenbankeinträge zur Statik verkommen zu lassen.
 
Werbung:
Eine andere Überlegung meinerseits war, alle Deklinationen bei jeder Suche erstellen und durchsuchen zu lassen

Warum denn nur? Das fändest ok, aber das genau EINMAL zu machen und die Ergebnisse zu speichern und somit suchbar zu machen lehnst du ab?

eine so gut arbeitende Lösung durch Datenbankeinträge zur Statik verkommen zu lassen
Das klingt 'n bissl albern. Mitgefühl mit Programmlogik ist völlig unnötig. jedenfalls in diesem Jahrzehnt noch ;)
Alle Deklinationen speichern und dafür jeweils EINMAL die Funktion zu nutzen ist deutlich effizienter als bei jeder Webanfrage immer wieder neu zu rechnen. UND es löst außerdem dein Problem.
 
Zurück
Oben