ugrás a tartalomhoz

MYSQL-Hasonló szövegek keresése

world-s · 2018. Feb. 23. (P), 10.52
Sziasztok!

Van MYSQL-ben valami olyan lehetőség amit pl. egy google is használ.

Spammelőket keresek a saját rendszeremben, de csak akkor tudom elcsípni ha betű pontosan ugyanazt írják.
Ha már néhány betűt megváltoztatnak, akkor már nem tudom leszűrni.

Tehát van -e olyan eljárás, amivel nem pontos egyezést keresek (ebben beleszámolom ezt is: LIKE %szöveg%), hanem ha a szöveg mondjuk 90%-95%-ban megegyezik valamivel, vagy egy másikkal.

Tehát megtaláljam azt is amikor pl. csak egy megszólításban tér el a szöveg.

Előre is köszi a segítséget.
Zoli
 
1

Nincs

Pepita · 2018. Feb. 23. (P), 12.03
A gugli saját algoritmusokat használ és kb Te is ilyesmit tudsz fejleszteni magadnak.

MySql-ben nincs erre kész megoldás.
Egy alap elképzelés (egyáltalán nem pontos, csak elindulni segít):
- az "A" szövegből kigyűjtöd a teljes szavakat (whitespace mentén darabolod és ha hosszabb, mint x karakter, akkor szó)
- "A" szövegből kigyűjtöd azt is, hogy melyik szó hányszor szerepel
- "B" szövegben megszámolod, hogy a kigyűjtött szavak hányszor szerepelnek
- "B" szövegből kigyűjtöd azokat, amik nincsenek "A"-ban
- összevonod az eredményt.

Eléggé erőforrásigényes mutatvány, szóval óvatosan.
2

Lehet

Hidvégi Gábor · 2018. Feb. 23. (P), 12.22
Ha tudsz függvényeket definiálni MySQL-ben, akkor érdemes a Levenshtein metódust kipróbálni. Azt mondja meg, hogy a paraméterül kapott két karakterlánc hány bájtban tér el.

Arra számíts, hogy nem lesz gyors, meg kicsit gondolkodni kell, mert számít, ugye, a karakterlánc hossza is az eltérés százalékának kiszámításakor.

PHP-ban is van ilyen függvény, de az még lassabb (mivel le kell "tölteni" az adatbázisból az adatokat).
3

jó ötlet :)

Pepita · 2018. Feb. 23. (P), 14.32
Tudsz függvényt is, de lehet, hogy a tárolt eljárás jobb lenne.
Fv törzs:
CREATE DEFINER = CURRENT_USER FUNCTION `NewProc`(`teszt` varchar)
 RETURNS integer
BEGIN
	#Routine body goes here...

	RETURN 0;
END;;

Viszont valóban lassú lesz, érdemes lehet mondjuk éjszaka futtatni és csak menteni a "spam pontszámot".