mysql: text finden, der ähnlich ist (wie bei similar_text in php)

Seite 1 von 2 - Forum: Coding Stuff auf overclockers.at

URL: https://www.overclockers.at/coding-stuff/mysql_text_finden_der_aehnlich_ist_wie_bei_similar_137099/page_1 - zur Vollversion wechseln!


kleinerChemiker schrieb am 17.02.2005 um 22:59

vorgabe: ich habe in einer tabelle eine textspalte. des weiteren habe ich einen text und würde gerne wissen, ob es eine zeile gibt, in der in der textspalte ein text ist, der dem neuen text ähnlich ist. ist so was möglich?

bei php gibts ja die funktion similar_text, die die ähnlichkeit 2er texte ermittelt. aber ich kann ja nicht die ganze textspalte mir ausgeben lassen und den neuen text mit jedem textfeld aus der db vergleichen.

tia

MIK


Rektal schrieb am 17.02.2005 um 23:56

Auf die schnelle faellt mir mal nur SOUNDEX(str) ein, wenns darum geht das Serverseitig zu machen. Das funktioniert jetzt aber nur mit zwei Woertern (um, eh wie similiar_text, oder?)


watchout schrieb am 18.02.2005 um 04:33

aber macht das soundex nicht nur mit einem wort? imho schon...


gerhardtt schrieb am 18.02.2005 um 08:02

vieleicht wärs gut mehr über das problem zu erzählen, denn 2 texte miteinander vergleichen lässt ja 1000 möglichkeiten über.


kleinerChemiker schrieb am 18.02.2005 um 08:50

es geht darum, daß man für ein online rpg eine chargeschichte als anmeldung schreiben muß. jedoch gibt es viele fertige geschichten im netz zu finden. nun wäre es gut, wenn man herausfinden kann, ob eine neue anmeldung zu einer alten ähnlich ist. z.b. weil nur der charname ausgetauscht uwrde oder andere kleinigkeiten geändert wurden.


gerhardtt schrieb am 18.02.2005 um 09:04

und diese "vorlagen" sind in einer datenbank gespeichert auf die du zugreifen kannst?


kleinerChemiker schrieb am 18.02.2005 um 09:50

nicht die vorlagen, aber alle früheren anmeldungen. und ich will wissen, ob eine anmeldung "doppelt" benutzt wird (mit nur geringen abänderungen). vielleicht später mal ein table mit vorlagen, wäre denkbar.


Rektal schrieb am 18.02.2005 um 10:06

Das klingt mir alles sehr heuristisch ;)


kleinerChemiker schrieb am 18.02.2005 um 18:26

also nicht möglich. naja, kann man nix machen.

thx dennoch :)


atrox schrieb am 19.02.2005 um 18:41

Zitat von Rektal
Das klingt mir alles sehr heuristisch ;)
Für mich klingt es sehr Bayesisch ;)

.... oder fuzzy-hash mäßig; ... oder fuzzy text matching... letztere beduetet allerdings, daß man jedes mit jedem vergleichen muß; was quadratischen Aufwand bedeutet.


funka schrieb am 19.02.2005 um 19:21

das sauber zu realisieren ist heutzutage ohne groesseren aufwand kaum moeglich - sauber gemacht geht es in die semantische analyse von texten menschlicher sprache -> hf&gl

mein vorschlag einer "einfachen" "aehnlichen" "loesung":
word count -> ordnen nach haeufigkeit
dann entweder:
a) den satz suchen wo die meisten woerter der top-haeufigkeits liste vorkommen - diesen mit der eigenen datenbank vergleichen und (wenn kurz genug) mit google querchecken
b) diese haeufigkeits liste in einer form speichern die man leicht abstrahieren kann - oder eine funktion schreiben die gewisse teile des gespeicherten hashes getrennt verarbeiten kann - diesen gespeicherten hash mit datenbank eintraegen vergleichen

beides bedarf menschlicher kontrolle und ist ansich ausser coding madness natuerlich nur bloedsinn ;)


kleinerChemiker schrieb am 20.02.2005 um 12:33

ob die texte gleich sind, wird dann sowieso von menschenauge überprüft. aber um das überprüfen zu können, muß man dem menschen helfen, da er nicht paar hundert texte kennen kann.

aber funkas ausführungen haben mich auf eine idee gebracht. ich ordne die wörter nach häufigkeit und speicher die 10(20) häfuigsten in ihrer reihenfolge in einer tabelle. bei einem neuen text ordne ich sie ebenfalls und suche texte, die die selbe ordnung haben. sollten 2 texte (fast) gleich sein, müßten sie ja die selbe ordnung haben. wenn 2 absolut verschiedene texte dabei sind, ists auch egal, da sowieso ein mensch die anmeldung bearbeitet und das dann ja merkt.

edit: was mir gerade einfällt: habe ich auf diese weise ähnliche texte gefunden, kann ich die ja immer noch mit similar_text() prüfen.

meinungen, ideen, verbesserungsvorschläge?

tia

MIK


atrox schrieb am 21.02.2005 um 12:50

testhalber mal einen kurierartikel mit dieser methode behandelt. hier die top 25:

2 zum
3 eine
3 einem
3 gegen
3 habe
3 haben
3 ich
3 im
3 mit
3 noch
3 sind
3 wir
4 bei
4 fr
4 wie
4 wil
5 miklautsch
5 oder
6 den
7 der
7 die
7 sie
8 in
9 das
9 nicht

müssen was besseres finden. interessant sind wohl eher die wörter, die nicht in jedem text vorkommen.


kleinerChemiker schrieb am 21.02.2005 um 14:21

eine liste mit worten die nicht in die reihung miteinbezogen werden. dazu kann ich ja mal für alle anmeldungen nen wordcount machen und dann schaun, ob es worte gibt, die sich eindeutig abheben in ihrer anzahl.

edit: gibts eigentlich eine fertige funktion in php die die verschiedenen worte zählt? string_word_count() mcht ja bischen was anderes.


gerhardtt schrieb am 21.02.2005 um 15:21

Zitat von kleinerChemiker
edit: gibts eigentlich eine fertige funktion in php die die verschiedenen worte zählt? string_word_count() mcht ja bischen was anderes.

du könntest die beiden wörtermengen disjunkt vereinen und dann schaun was übrig bleibt...

edit: könnte ein bisschen langsam werden mit steigender anzahl der texte, aber mit bruteforce kann man ja jedes problem der informatik lösen ;)




overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2025