Cheatah: stopword-list zum SELFForum

Beitrag lesen

Hi,

Inzwischen bin ich

kleines Intermezzo nach diesem Wort ;-)

Soweit so gut. Das doofe an der Sache, die Tabelle mit den Wort-Anzahlen ist zu groß(über 700.000 Datensätze).

Für eine Datenbank sollte das absolut kein Problem sein. Wichtig ist, dass das DB-Layout in sich stimmig ist - und dazu gehören Tabellenstruktur, Indizes etc. und auch die Statements.

Leider habe ich mit MySQL wenig Erfahrung und kann daher nicht abschätzen, wie und wie gut MATCH arbeitet bzw. wie es sich performanter gestalten lässt. Möglicherweise bringt ein Ersatz dieser Funktion Vorteile: Vorstellbar wäre z.B. eine Tabelle, die Wort auf Datensatz matcht (n:m), mit einem "simplen" Index. Wahrscheinlich ist ein Volltext-Index nichts anderes; aber vielleicht spart man sich damit den Overhead überflüssiger Funktionalität.

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.

Warum? ORDER BY COUNT(*) DESC, und einfach von oben nach unten durchgehen. Dort werden die meisten relevanten Stopwords sein, und wenn's bei "kleineren" Mengen welche gibt, fallen die ohnehin weniger ins Gewicht. Alternativ kannst Du auch mal nach "stopwords list german" u.ä. googeln.

Da sind z.B. auch so Einträge wie !!!!!!!!!!!!!!!!!!

Tja, Leerzeichen sind eben nicht unbedingt die besten Trenner... :-) Eine mögliche RegExp zur Ermittlung von Wörtern wäre z.B. "\b([a-z-]+)\b", wenn auch nicht zwingend die ideale.

in allen Längen und Kombinationen oder sehr komplexe Javascripte, die kein Leerzeichen dazwischen hatten oder sonst für sinnloser Quatsch, Rechtschreibfehler...

HTML- und anderen Code zu erkennen ist sicher eine Lebensaufgabe, um die ich Dich nicht wirklich beneide... andererseits ist es u.U. gerade ein Code, nach dem man sucht; frei nach dem Motto "Wie war das noch mit getElementById?".

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?

Du solltest Dir in erster Linie überliegen, wie Du "sinnlos" definieren möchtest, und was andere - besonders die Suchenden - wohl von dieser Definition halten werden. Wenn die Datenbankabfragen zu lange dauern, dann drängt sich zuallererst eine Schlussfolgerung auf: Das DB-Layout ist suboptimal.

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,

Ist die Reihenfolge wirklich so von Bedeutung? Krass. Aber gab es bei MATCH nicht auch die Möglichkeit, mehrere Wörter in einem einzigen String anzugeben? An irgendsoetwas meine ich mich jedenfalls zu erinnern...

Cheatah

--
X-Will-Answer-Email: No