Autor Zpráva
baldur
Profil *
Zdravím,
vím že o fulltextu tu už pár vláken je, ale můj problém jsem i přesto nezvládl sám vyřešit, tak snad se mi tu dostane odpovědi.
Mám tabulku ve které je sloupec s klíčovými slovy a poté mám nějakou množinu dat (slov) získanou v php, a já bych ji potřeboval porovnat s těmi klíčovými slovy v db. Jenže problém je hned na několika místech, hlavně asi že ta množina dat (to jsou také plus mínus klíčová slova - plus mínu protože se jedná občas i o spojovací výrazy apod.) v php je o dost větší než počet klíčových slov v db. Třeba tak 20-30 slov vůči 5-10 v databázi. Dalšími problémy jsou potom skloňování a případně i velikost písmen nebo diakritika.

Zkoušel jsem to fulltextem, ale tam jsem absolutně neuspěl, ta získaná množina dat musela mít v sobě přesně nějaké slovo z těch klíčových slov, aby se něco vůbec našlo (to je jasné, z principu fulltextu v mysql) ale nevím jak bych to mohl vyřešit jinak. Napadlo mě ještě pomocí LIKE, ale tady je zase problém že těch slov je tak velký počet a přeci nemůžu mít v klauzuli WHERE 20-30 kritérií LIKE.? :/

Jak byste tuhle situaci řešili? Předem díky!
Jozin
Profil
Zdravím,

se skloňováním nepomůžu. Nejspíš budeš muset mít někde pole možných sklonění slova a asi i synonyma.

ale pokud jde o to hledání klíčového slova, tak z db vytáhneš všechny klíčové slova. Pak v PHP procházíš ty klíčové slova co máš normálně a dáváš in_array($hledany_klic, $db_klice); pokud existuje vrátí true, jinak false. Problém je, že to neřeší, když není naprosto přesně jako klíč a k tomu bude potřeba ten převodník o kterém píšu kvůli skloňování.
baldur
Profil *
To skloňování je nanic, alespoň kdybych nějak mohl odříznout kořeny slova a porovnávat jenom je. A s tím porovnáváním v php když bych to vytáhnul z databáze - nebude to dost pomalé? Když by v databázi bylo několik stovek, možná i tisíců záznamů?

A kdybych to dělal tímhle způsobem, tak nenapdá vás někoho jak udělat něco jako relevanci? Jak jsem řekl, tak těch klíčových slov z php mám celkem hodně a měli by být seřazeny v pořadí podle důležitosti, takže když budu porovnávat každé slovo jedno po druhém, tak aby ty první měli větší váhu než poslední. A jak vůbec ohodnotit která shoda záznamů je nejrelevantnější? - Asi by mohlo stačit jen sečíst kolikrát se daná klíčová slova shodovala, že?
TomášK
Profil
baldur:
Pro skloňování pomůže Sphinx, o kterém psal Jakub Vrána, ale zkušenosti s tím nemám.
baldur
Profil *
[#4] TomášK
Zajímavé, podívám se na to, díky!

A nenašel by se někdo, kdo už se někdy úspěšně snažil získat kořeny slov?
A potom ještě jeden dotaz - lze nějak ve fulltextovém vyhledávání v mysql použít něco jako je u LIKE, aby to podle například "petr*" našlo slovo "petrklíč"?
TomášK
Profil
baldur:
A nenašel by se někdo, kdo už se někdy úspěšně snažil získat kořeny slov?
Ale jo, lingvisti to zkouší už asi 50 let, úspěšnost už myslím mají přes 90% procent.
baldur
Profil *
[#6] TomášK
Nj tušil jsem to :) nevýhoda češtiny...

A k tomu vyhledávání v mysql se asi uspokojivé odpovědi taky nedberu, že? :/
TomášK
Profil
baldur:
A potom ještě jeden dotaz - lze nějak ve fulltextovém vyhledávání v mysql použít něco jako je u LIKE, aby to podle například "petr*" našlo slovo "petrklíč"?
V boolean módu pomocí *, viz dokumentace.
baldur
Profil *
Aha, asi jsem v tom hledal moc velkou složitost :) Díky!

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0