Zitat:
Das zweite Stichwort wäre "umgekehrter Index". Du speicherst also nicht zu jedem Text die enthaltenen Stems, sondern umgekehrt zu jedem Stem die Texte, in denen der vorkommt.
Das klingt so ähnlich wie meine Theorie. Ich habe ja auch eine Tabelle mit dem Wort (unique) + ID und dann eine Tabelle, in der steht, in welchem Text dieses Wort vorkommt.
Praktisch (mit Stemming):
Zitat:
words
id - word
1 hallo
2 spiel
3 lern
Zitat:
connector
word_id text_id
1 2
1 30
2 30
2 35
3 10
Das heißt dann, dass in Text 2 "hallo" vorkommt, in Text 30 "hallo" und z.B. "spielen" in Text 35 z.B. "spielt" und in Text 10 dann noch soetwas wie "lerne!". Soweit richtig verstanden?
Zitat:
* Die Verwaltung des Stem-Index ist mühsam: Man muss bei jeder Änderung eines Textes zuerst die vorherigen
Der erste Nachteil scheint mir kein besonders großer Nachteil zu sein. Über eine Klasse ist das schnell gelöst. Zumindest war das beim Tag-System auf cybton kein großes Problem und bei einem Text sind es ja nur mehr Wörter.
Der Porter Stemmer (laut wikipedia sehr bekannt) scheint ja ganz einfach zu verwenden sein. Eine PHP Implementierung für die englische Sprache gibt es hier:
http://tartarus.org/~martin/PorterStemmer/php.txt
Und eine Erklärung für die Verwendung für Deutsch hier:
http://snowball.tartarus.org/algorithms/german/stemmer.html
Hier gibt es eine Implementierung für alle Sprachen, für die man aber C-Quelltexte auf dem Zielsystem kompilieren muss:
http://pecl.php.net/package/stem
Aber irgendwie kommt mir dieser Stemmer Algorithmus komisch vor. Liegt aber wahrscheinlich daran, dass die gefundenen Stämme am Ende nicht der richtigen Rechtschreibung (vgl. libraries und library => librari) entsprechen.
Ich schaue mir nach dem Essen mal die anderen Algorithmen an, die ich auf einer
anderen Seite noch gesehen habe.
Das ist auf jeden Fall alles sehr interessant. Stark, was man mit dem PC inzwischen auch bei Sprache schon machen kann
Ist die Technik mit einem Wortindex und den Texten, in welchen die Wörter vorkommen dazu, eigentlich die einzige Möglichkeit, eine gute Suche in Datenbanken anzulegen?
Bei Google stoße ich da immer wieder auf einen
Grover's Algorithmus, aber das schlagen mich die Formeln fast um und ich weiß nicht mal, ob der für Zahlen oder Texte ist