Andreas Korthaus: stopword-list zum SELFForum

Beitrag lesen

Hallo!

Inzwischen bin ich wieder ne Ecke weiter mit meiner MySQL-Suche, bin nur nicht sicher ob iach auch alle Postings geparst habe, naja.
Der nächste Schritt den ich jetzt geplant habe, ist eine Sortierung der Wörter im Suchstring, nach Vorkommen in der Datenbank. Wenn jemand nach "HTTP fsockopen" sucht, wird geprüft, wir oft "HTTP" vorkommt und wie oft "fsockopen", hier vermutlich mit dem Ergebnis das "fsockopen" erheblich seltener vorkommt, und so dieses Wort zuerst über den Fulltext-Index gesucht wird, also generiere ich eien Query wie SELECT... WHERE MATCH (blabla) AGAINST('fsockopen') AND MATCH (blabla) AGAINST('HTTP')...
Soweit so gut. Das doofe an der Sache, die Tabelle mit den Wort-Anzahlen ist zu groß(über 700.000 Datensätze).
Um an die Tabelle zu kommen habe ich das komplette 2002er Archiv "zerlegt" und das Vorkommen jedes einzelnen Wortes(getrennt durch " ") gezählt. Was meint Ihr was mit Abstand das am meisten vorkommende Wort ist? "ich", mit über 300.000 Vorkommen, ein ganz schön egoistisches Forum ;-)
Jedenfalls würde ich die Tabelle gerne ordentlich verkleinern. Hierzu habe ich mir eine kleine stopword-Liste zusammengestellt, aber die paar 100 Wörter sind nur ein Tropfen auf den heißen Stein. Wenn es jemanden interessiert wie die Liste genau aussieht, ich hab sie mal hochgeladen, sind über 4 MB: http://knet-systems.de/temp/words.txt.gz
jedenfalls suche ich jetzt nach Mitteln und Wegen, sinnlose Daten aus der Tabelle rauszuschmeißen. Ich kann garantiert 95% guten Gewissens wegschmeißen, aber manuell mit 700.000 Datensätzen - unmöglich. Da sind z.B. auch so Einträge wie !!!!!!!!!!!!!!!!!! in allen Längen und Kombinationen oder sehr komplexe Javascripte, die kein Leerzeichen dazwischen hatten oder sonst für sinnloser Quatsch, Rechtschreibfehler...
Ich überlege mir eine möglichst Lange stopword-Liste zu erstellen, dann alle Datensätze löschen, die = einem der stopwords sind, oder nicht case-sensitive, oder abzüglich aller Zeichen außer Buchstaben = einem der Wörter. Aber was bringt das? vielleicht ein paar 1000, dann kann ich noch alle Wörter unter 4 Zeichen löschen, wobei ich ungerne Wörter wie PHP oder ASP lösche... Nur wie werde ich den ganzen Quatsch mit sinnlosen Zeichen oder oder Wortformen los, das ist das schlimmste, die Wörter stehen da natütlich in jeder nur erdenklichen grammatikalischen Form drin, dazu noch falsch gesschreibene... hat jemand noch ein paar Ideen wie ich mal einen großen Teil der sinnlosen Wörter loswerde?

Dann noch was zum Prinzip. Ich will eigentlich nicht oft vorkommende Wörter wie Javascript, HTML oder PHP löschen. Denn wenn ich diese Wörter _hinter_ das "bessere" Suchwort setze ist es gar nicht mehr so schlimm, und kann die Qualität des Ergebnisses eigentlich nur positiv beeinflussen, oder? Alle Wörter die nicht in der Liste vorklommen, also auch die gelöschten, werden bei der Suche ignoriert.

Bin für jeden Tipp dankbar!

Viele Grüße
Andreas