- Java
- tehnologia de căutare
- algoritmi
Salutări.
Vă rugăm să ajute în rezolvarea problemei (sarcina). Indică direcția pentru a ajuta cu sfaturi înțelepte.
Există o problemă:
-o listă cu numele corecte ale programelor (un șablon la, probă, standard). Numele formate din 1-6 cuvinte
-există o listă de titluri de software care au scris personalul. Personalul nu a scrie un model, a făcut greșeli în scrierea cuvintelor în sine, numit programul de altfel. În același timp, menținut în continuare esența numelui.
De exemplu:
Standard "Programmulya plus"
angajat a scris „documentele programului Programmulya“
După cum puteți vedea, există o mulțime de prisos, dar esența este păstrată.
Vreau să creeze un index al directorului de referință de nume și o dată în indexul să caute conformitatea cu cererea utilizatorului (fie există o potrivire, sau programul de utilizator în dicționar nu este prezent).
Cred că ceea ce căutăm anumite cuvinte de pornire linie și căutați pentru meciurile de intersecție. Sau nu-i așa?
Vă rugăm să sugereze modul de a crea un index, și modul în care acest indice este cautat (algoritm).
de bază subiect puternic nu știe, așa că vă rugăm să explicați în termeni simpli.
Voi scrie în Java.
Vă mulțumim pentru răspunsurile dumneavoastră :)
- Am luat linia. line a fost original_Name fel. alternate_name_1, alternate_name_2
- Îmi amintesc numele original într-o origName variabilă separată.
- Am clar de moloz. Aceasta a inclus eliminarea punctuației, în cazul în care am fost în linia de referință, am păstrat o cratimă „-“. Am scos „oprire“ cuvânt. Nu mai am cuvinte ales prin observații în dicționar existent. Am aruncat toate cuvintele, în plus față de prepoziții și conjuncții, care nu au fost de sarcină semantică. Am fost cuvinte ca „Portal“, „on-line“, comună abrevierea „Al“, „abs.“
- Ea a rupt cuvântul cheie șir. Întreaga linie, inclusiv titlul original.
- păstrate într-un cuvânt cheie HashMap buchet. origName. Undeva se numește metoda de backlink-uri.
- În cazul în care cuvântul cheie se repetă, apoi finisare origName cu alte cuvinte, într-un rând.
În rezultat „referința“ Am fost în căutarea introducerea cuvintelor cheie din interogare. Rezultatul este o listă cu toate origName găsite.
Ierarhizarea a fost că ceea ce am crezut că a fost cel mai mare număr de partide și a crezut rezultatul coincidență. Uneori, au existat mai multe meciuri cu același număr de intrări. Meciurile au fost similare în sensul, dar au făcut un fel de confuzie. (Această problemă, am decis să dialogul cu „operatorul“ a programului)
În căutare generală pentru a obține acceptabil.
Nu a scris pentru masele de oameni, și pentru o anumită organizație, așa că am acceptat faptul că numărul de erori atunci când specificați o interogare de căutare va fi minim, iar cuvintele rămase (ortografiate corect) va da rezultatul corect.
Tot la fel, există o serie de erori, este necesar să se finalizeze, să pună în aplicare cele mai bune algoritmi.
Dar bicicleta mea a fost un succes (pe care eu sunt foarte fericit).
Voi continua să faceți upgrade algoritmii, pe de altă zi de așteptare pentru un pachet de date de la utilizatori pentru a rula în programmuli :)
Ceva de genul asta, și mi-am imaginat. Chiar și aproape rezolvat problema cuvintelor „similaritatea“ prin comparație plictisitoare de potrivire a simbolurilor (urâte, dar unele vor da rezultate. Programmulya == programulya).
Și aici întrebarea. Când voi primi pentru un cuvânt cheie dintr-o listă șir de nume standard voi proceda pentru a căuta al doilea cuvânt. Această căutare mă va da o altă listă de siruri de caractere, care se găsește „cuvinte cheie cuvânt“.
Și ce urmează? Verificați dacă un meci în toate cazurile (sau un anumit procentaj din meciuri)?
Mă gândeam ceva de genul:
Ghidul Am o listă de cuvinte derivate din liniile standardelor. Fiecare dintre aceste cuvinte se referă la șirul inițial.
Să presupunem că am rupt o interogare de utilizator în cuvinte și cuvintele sunt comparate cu referința. Faptul că am găsit membrul linie cuvânt al directorului este deja oferindu-mi un indiciu că cererea este în baza de date. Cuvintele „fără prea mult sens“, cum ar fi „utilitate pentru documentele“ nu va da rezultatul este un meci pentru „Programmulya“. Luați în considerare o linie de comandă cum ar fi.
Poate cuvinte diferite, care fac exact sens, cum ar fi „Programmulya“, cu referire la rating de mai sus.
Arthur. A se vedea, în orice caz, ne așteptăm la intrarea în linie, și de ieșire - o listă de programe cu nume similare, eu cred cu adevărat? sau condiție - pentru a reveni la un program similar cât mai mult posibil?
Căutați caractere coincidență - o opțiune foarte rău, să fiu sincer, sunt garantate cu probleme de memorie și viteza. Mai ales poate fi un cuvânt cu o serie identică de caractere, dar ordinea secvență diferită.
domni. „Căutare de caractere coincidență - o opțiune foarte rău, să fiu sincer, problemele cu viteza si memorie sunt garantate în mod special poate fi un cuvânt cu o serie identică de caractere, dar ordinea secvență diferită ..“
- total de acord. Dacă nu face cu opțiuni mai inteligente, nu va fi nimic :) Din fericire volumele nu sunt foarte mari.
„Arthur: Uite, în orice caz, ne așteptăm la intrarea în linie, și de ieșire - o listă de programe cu nume similare, cred dreapta sau condiție - să se întoarcă un program similar cât mai mult posibil?“
- într-un mod amiabil, de ieșire mă aștept fie expresia „Acest program nu este în directorul,“ cel mai similar.