Pagina 1 din 1

Cautari Inteligente - stemuire si lematizare

Scris: Dum Aug 29, 2010 2:56 pm
de crowbar_junkie
De curand ma confrunt cu o dilema: cum pot reliza un algoritm de cautare inteligent pentru fraze din limba romana.

In momentul de fata, algoritmul functioneaza in felul urmator:

Pentru baza de date:
* se formeaza o fraza din campurile ce urmeaza a fi cautate
* se substituie caracterele nepermise ([^\w-]) cu spatiu
* se transforma diacriticele in cuvinte normale
* se formeaza o lista de cuvinte
* se elimina duplicatele din lista
* se elimina cuvintele des intalnite din lista (ex: si, sau)
* se consulta un dictionar (pentru a nu stemui nume proprii, branduri, samd ex: nike - stem: nik / la cautare ar gasi nike, cat si nikon). Daca cuvantul respectiv exista in dictionar, se extrage radacina lui folosind algoritmul de stemuire descris aici:
http://snowball.tartarus.org/algorithms ... emmer.html
Radacina cuvantului reprezinta o parte a cuvantului folosita pentru derivare. A nu se confunda cu baza unui cuvant. (ex: abstractizare - stem: abstractiz - radacina: abstract). In continuare, daca radacina cuvantului este mai lunga de 3 caractere, se adauga intr-o noua lista. In caz contrar, se pastreaza cuvantul initial, care se adauga la randul lui in acea lista. Verificarea pentru cele 3 caractere se realizeaza datorita posibilitatii ca mai multe cuvinte sa aiba aceeasi radacina.
* se adauga lista nou formata intr-un camp optimizat pentru cautari full-text din baza de date.

Pentru fraza cautata:
* acelasi sistem ca cel prezentat mai sus, exceptand pasul 1
* se realizeaza cautarea in campul full-text
* rezultatele vor fi indexate automat de catre baza de date dupa relevanta

EXEMPLU
Fraza din baza de date: masinuta absorbanta nike
Fraza rezultata: masin absorb nike

Fraza cautata: masini absorbante nike
Fraza rezultata: masin absorb nike

Intrebarea mea este urmatoarea: exista la momentul actual un lematizator (algoritm de extragere a bazei unui cuvant) stabil pentru limba romana sau a lucrat cineva la ceva asemanator? Lematizatorul ar elimina posibilitatea de a gasi radacini identice pentru cuvinte diferite si ar imbunatatii cautarile. Iar daca nu, ce recomandare mi-ati putea da pentru a imbunatatii cautarea? Credeti ca ar fi benefica implementarea unui dictionar de sinonime? Mentionez ca baza de date contine aproximativ 3.5 mil de randuri.

Daca este cineva care doreste algoritmul de stemuire transpus in php, cereti si vi se va da ;)

Multumesc anticipat!

Scris: Lun Aug 30, 2010 11:20 am
de matheuzzy

Scris: Lun Aug 30, 2010 2:02 pm
de crowbar_junkie

Scris: Lun Aug 30, 2010 3:28 pm
de Birkoff
vezi daca te ajuta algoritmul spus in acest tutorial

Scris: Lun Aug 30, 2010 8:55 pm
de crowbar_junkie
Edit: Multumesc mult pentru idee. Initial am crezut ca vrei sa imi sugerezi un sistem de auto-correct, dar mi-am dat seama ca impreuna cu un dictionar, se pot face niste lucruri tare interesante cu distanta levenstein. O sa lucrez la asta, si daca totul iese conform planului voi posta rezultatul.[/b]