Portal > Foren > Datenbanken, Server, Betriebssysteme und sonstige Programmiersprachen > Datenbanken > Umlaute-Kombinationen in Array für Suchmaschine
Antwort
 
Themen-Optionen Thema durchsuchen
Alt 22.05.2006, 00:05 Nach oben    #1
Neuer Benutzer
 
Benutzerbild von buddy_casino
 
Registriert seit: 21.05.2006
Beiträge: 12
Standard Umlaute-Kombinationen in Array für Suchmaschine

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
buddy_casino ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 22.05.2006, 01:39 Nach oben    #2
Ben
Benjamin Klaile
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.512
Standard

Hi und willkommen im Forum ,
Zitat:
Zitat von buddy_casino
wenn es dazu schon einen Thread gibt
nö gibt es nicht, soweit ich weiß.

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.
Ben ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 22.05.2006, 01:59 Nach oben    #3
Neuer Benutzer
 
Benutzerbild von buddy_casino
 
Registriert seit: 21.05.2006
Beiträge: 12
Standard

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
buddy_casino ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 23.05.2006, 10:17 Nach oben    #4
Lutz
 
Benutzerbild von MrNiceGuy
 
Registriert seit: 14.08.2005
Ort: Nienburg / Weser
Beiträge: 685
Standard

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 Warum Funktionen in SQL nicht nutzen, wenn sie doch schon da sind!?
__________________
Paradox ist, wenn jemand für seinen Alkoholkonsum geradestehen soll

Geändert von MrNiceGuy (23.05.2006 um 10:20 Uhr)
MrNiceGuy ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 23.05.2006, 13:06 Nach oben    #5
Ben
Benjamin Klaile
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.512
Standard

Zitat:
Zitat von MrNiceGuy
SELECT * FROM `table` WHERE `field` REGEXP 'M(oe|ö)p(ue|ü)'
Yeah. Sieht doch sauber aus!
Ben ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 23.05.2006, 14:28 Nach oben    #6
Lutz
 
Benutzerbild von MrNiceGuy
 
Registriert seit: 14.08.2005
Ort: Nienburg / Weser
Beiträge: 685
Standard

Weiß ich doch@ben
__________________
Paradox ist, wenn jemand für seinen Alkoholkonsum geradestehen soll
MrNiceGuy ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 24.05.2006, 00:27 Nach oben    #7
Neuer Benutzer
 
Benutzerbild von buddy_casino
 
Registriert seit: 21.05.2006
Beiträge: 12
Standard

Das macht mir mein Vorhaben erheblich leichter
Dickes Dankeschön von dieser Stelle!
buddy_casino ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 24.05.2006, 07:51 Nach oben    #8
axo
Gast
 
Beiträge: n/a
Standard

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.

http://de.wikipedia.org/wiki/Stemming

grüße
axo
 
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 24.05.2006, 10:23 Nach oben    #9
Lutz
 
Benutzerbild von MrNiceGuy
 
Registriert seit: 14.08.2005
Ort: Nienburg / Weser
Beiträge: 685
Standard

@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
MrNiceGuy ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 24.05.2006, 22:19 Nach oben    #10
axo
Gast
 
Beiträge: n/a
Standard

Zitat:
Zitat von MrNiceGuy
Soweit ich auf Wiki gelesen habe ist das alles noch experimentell
... de.wikipedia.org ist halt auch nicht hundertprozentig. aber man kann ja nicht permanent englische quellen posten, außerdem ist auch auf wikipedia
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 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!?
die 'alternative' funktioniert sehr schnell nicht mehr. ab einer bestimmen anzahl von datensätzen (und das sind verhältnismäßig wenige) kackt ein REGEX-query komplett ab. vor allem kann man entweder gar nicht oder nur sehr schlecht indizes benutzen, was dann zur folge hat, dass jeder query ein filesort der datenbank verursacht.


und erprobt ist das ganze durchaus.
Zitat:
(mal abgesehen davon, dass der algorythmus nicht besonders simpel sein dürfte bei der deutschen Sprache)
auch nicht komplizierter als ein durchschnittlicher algorithmus zum packen von dateien.
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)
 
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 24.05.2006, 23:43 Nach oben    #11
Lutz
 
Benutzerbild von MrNiceGuy
 
Registriert seit: 14.08.2005
Ort: Nienburg / Weser
Beiträge: 685
Standard

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
MrNiceGuy ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
PingBacks sind an
RefBacks sind aus

Ä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


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:58 Uhr.


Powered by vBulletin® Version 3.7.4 (Deutsch)
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45