"We are back" « oc.at

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

kleinerChemiker 17.02.2005 - 22:59 3454 26
Posts

kleinerChemiker

Here to stay
Avatar
Registered: Feb 2002
Location: Wien
Posts: 4303
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
Bearbeitet von kleinerChemiker am 02.03.2005, 17:26 (solved)

Rektal

Here to stay
Registered: Dec 2002
Location: Inside
Posts: 4477
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

Legend
undead
Avatar
Registered: Nov 2000
Location: Off the grid.
Posts: 6845
aber macht das soundex nicht nur mit einem wort? imho schon...

gerhardtt

Big d00d
Registered: Aug 2000
Location:
Posts: 333
vieleicht wärs gut mehr über das problem zu erzählen, denn 2 texte miteinander vergleichen lässt ja 1000 möglichkeiten über.

kleinerChemiker

Here to stay
Avatar
Registered: Feb 2002
Location: Wien
Posts: 4303
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

Big d00d
Registered: Aug 2000
Location:
Posts: 333
und diese "vorlagen" sind in einer datenbank gespeichert auf die du zugreifen kannst?

kleinerChemiker

Here to stay
Avatar
Registered: Feb 2002
Location: Wien
Posts: 4303
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

Here to stay
Registered: Dec 2002
Location: Inside
Posts: 4477
Das klingt mir alles sehr heuristisch ;)

kleinerChemiker

Here to stay
Avatar
Registered: Feb 2002
Location: Wien
Posts: 4303
also nicht möglich. naja, kann man nix machen.

thx dennoch :)

atrox

in fairy dust... I trust!
Avatar
Registered: Sep 2002
Location: HTTP/1.1 404
Posts: 2782
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

Legend
ex-prophet(down below)
Registered: Sep 2000
Location: Vienna / SF
Posts: 6131
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

Here to stay
Avatar
Registered: Feb 2002
Location: Wien
Posts: 4303
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
Bearbeitet von kleinerChemiker am 20.02.2005, 12:40

atrox

in fairy dust... I trust!
Avatar
Registered: Sep 2002
Location: HTTP/1.1 404
Posts: 2782
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

Here to stay
Avatar
Registered: Feb 2002
Location: Wien
Posts: 4303
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.
Bearbeitet von kleinerChemiker am 21.02.2005, 14:29

gerhardtt

Big d00d
Registered: Aug 2000
Location:
Posts: 333
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 ;)
Bearbeitet von gerhardtt am 21.02.2005, 15:41
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz