![]() |
|
|
Themen-Optionen |
|
|
Nach oben #1 |
|
Neuer Benutzer
Registriert seit: 21.05.2006
Beiträge: 12
|
Guten Abend allerseits!
Auf der Suche nach einer Lösung zu folgendem Problem bin ich (auch in diesem Forum) leider noch nicht fündig geworden: Für eine SQL-Suchanfrage möchte ich für 1 Wort mit beliebig vielen Umlauten ein Array erzeugen, in dem alle möglichen Kombinationen von Umlaut-Schreibweisen drinstehen. Bsp.: Für Suchbegriff "Moep" soll im Array (Moep, Möp) drinstehen. 2. Bsp.: Für Suchbegriff "Moepü" soll demenstprechend (Moepue, Moepü, Möpue, Möpü) drinstehen. Hat jemand sowas schonmal gebaut oder gibt es sowas (vielleicht auch bei pear o.ä.) in irgendeiner form? Wie gesagt, auf Anhieb bin ich über die Suche nicht fündig geworden, also reisst mir bitte nicht den Kopf ab, wenn es dazu schon einen Thread gibt Gruß der buddy |
|
|
|
|
|
Nach oben #2 | |
|
Erfahrener Benutzer
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.619
|
Hi und willkommen im Forum
Zitat:
Zum Problem. Eigentlich könntest du dir doch die SQL-Abfrage generieren. Immer, wenn ein Umlaut vorkommt bzw. ein "oe" und Co. baust du eine OR-Klausel dran. Schleifen, if-Abfragen und strpos() könnten dir eventuell helfen. Sorry, nur grob nachgedacht .. is ja schon spät. Grüße, Ben. |
|
|
|
|
|
|
Nach oben #3 |
|
Neuer Benutzer
Registriert seit: 21.05.2006
Beiträge: 12
|
Moin Ben!
Danke erstmal für die flotte Antwort. Zu Deinem Gedankengang: Genau das Generieren würde auf das Erstellen des Arrays ja per Schleife folgen, also etwa so: SELECT * FROM tabelle WHERE feldname = 'Moepü' OR feldname = 'Moepue' OR feldname = 'Möpue' OR feldname = 'Möpü' Das Problem ist die Implementierung der Array-Erstellung. Gruß Buddy |
|
|
|
|
|
Nach oben #4 |
|
Erfahrener Benutzer
Registriert seit: 14.08.2005
Ort: Nienburg / Weser
Beiträge: 662
|
Ginge das nicht viel einfacher mit einem RegEx? So nach dem Motto:
SELECT * FROM `table` WHERE `field` REGEXP 'M(oe|ö)p(ue|ü)' Ausprobiert hab ich es jetzt nicht, aber sollte doch so funktionieren!? EDIT: Habs gerade getestet und läuft wunderbar. Nun brauchst du deinen Suchstring nurnoch nach Vokal+e und Umlauten durchsuchen lassen und entsprechend die Oder-Klammern für das RegEx setzen. Ich finde diese Lösung deutlich einfacher und vom SQL-Statement her nicht nur übersichtlicher, sondern auch professioneller
__________________
Paradox ist, wenn jemand für seinen Alkoholkonsum geradestehen soll Geändert von MrNiceGuy (23.05.2006 um 10:20 Uhr). |
|
|
|
|
|
Nach oben #8 |
|
Gast
Beiträge: n/a
|
sauber isses, aber hoffnungslos ineffizient.
sowas löst man normalerweise, indem man beim indizieren nur den wortstamm eines wortes verwendet und abspeichert; und dann beim suchen die suchbegriffe mit dem selben algorithmus vorbehandelt. grüße axo |
|
|
|
Nach oben #9 |
|
Erfahrener Benutzer
Registriert seit: 14.08.2005
Ort: Nienburg / Weser
Beiträge: 662
|
@axo: Schön und gut, aber gibt es schon eine praktikable Lösung für Stemming in PHP? Soweit ich auf Wiki gelesen habe ist das alles noch experimentell und von daher die oben gewählte Lösung (hier also dann doch eher als Workaround zu betrachten) eine deutlich besser Alternative, bis Stemming etwas mehr erprobt ist!? (mal abgesehen davon, dass der algorythmus nicht besonders simpel sein dürfte bei der deutschen Sprache)
__________________
Paradox ist, wenn jemand für seinen Alkoholkonsum geradestehen soll |
|
|
|
|
|
Nach oben #10 | |||
|
Gast
Beiträge: n/a
|
Zitat:
http://www.tartarus.org/~martin/PorterStemmer/ verlinkt, was die aktuellsten daten enthält. algorithmen, die seit den 80er jahren benutzt und optimiert werden, würde ich jetzt aber nicht wirklich als experimentell bezeichnen. Zitat:
und erprobt ist das ganze durchaus. Zitat:
http://snowball.tartarus.org/algorit...n/stemmer.html aber egal. bei so kleinen datenbanken funktioniert das REGEX schon, wenn es dann mal ein paar MB mehr werden und die leute sich über die performance beschweren, sollte man aber wissen, woran das liegt und was man tun kann. Geändert von axo (24.05.2006 um 22:21 Uhr). |
|||
|
|
|
Nach oben #11 |
|
Erfahrener Benutzer
Registriert seit: 14.08.2005
Ort: Nienburg / Weser
Beiträge: 662
|
Hmm... Ich werde mir deine Quellen mal näher anschauen, finde es halt nur komisch, dass es seitens PHP kein Modul zu geben scheint. Ich will es ja auch nicht als schlecht darstellen, das ist es ganz sicher nicht, nur wenn es schon nicht mehr experimentell sein soll, wieso gibt es dann keine Erweiterung für gängige Programmiersprachen? Ich habe jedenfalls noch nichts dergleichen auf php.net vernommen und generell zum allerersten Mal von Stemming gehört!?
__________________
Paradox ist, wenn jemand für seinen Alkoholkonsum geradestehen soll |
|
|
|
![]() |
| Lesezeichen |
| Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
| Themen-Optionen | |
|
|
Ähnliche Themen
|
||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| Zend Framework - Probleme mit Zend_Controller_RewriteRouter bzw. Form der URLs | Ben | PEAR, PECL und Frameworks | 12 | 24.12.2006 17:17 |
| Suche Hilfe: Angebot und Nachfrage berechnen | ljungi | Plauderecke | 6 | 17.12.2006 22:10 |
| Array in Bezug auf ein anderes sortieren... | code5 | PHP-Programmierung | 2 | 15.05.2006 15:56 |
| Ein Array in ein Array schreiben | bacarni | PHP-Programmierung | 2 | 07.02.2006 14:24 |