Autor | Zpráva | ||
---|---|---|---|
baldur Profil * |
#1 · Zasláno: 18. 6. 2011, 18:32:01
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 |
#2 · Zasláno: 19. 6. 2011, 21:26:54
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 * |
#3 · Zasláno: 20. 6. 2011, 11:32:56
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 |
#4 · Zasláno: 20. 6. 2011, 14:25:38
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 * |
#5 · Zasláno: 20. 6. 2011, 14:55:15
[#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 |
#6 · Zasláno: 20. 6. 2011, 15:29:54
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 * |
#7 · Zasláno: 21. 6. 2011, 00:22:29
[#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 |
#8 · Zasláno: 21. 6. 2011, 01:11:22
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 * |
#9 · Zasláno: 21. 6. 2011, 09:31:23
Aha, asi jsem v tom hledal moc velkou složitost :) Díky!
|
||
Časová prodleva: 13 let
|
0