Zadejte hledaný výraz...

Nejčastějí slova uložená v MySQL v typu text

Ahoj webtržníci,
rád bych prohledal databázový sloupec typu text a vyhledal v něm nejčastěji užíváná slova - samozřejmě to budou spojky atd., ale za nimi se mi objeví různá klíčová slova, o jejichž výpis mi jde. Bohužel neznám MySQL funkci, která by to dokázala a výpis všech slov do PHP a jejich sumírování mi přijde jako náročná operace ve chvíli, kdy je v db k 2000 řádků a každý obsažený text má cca. 2 normostrany, tj. jedná se o 4000 normostran textu. Neexistuje nějaký MySQL příkaz, který by nejčastěji používaná slova z textu vypsal?
Ještě mě napadá možnost nechat vypsat slovo po slovu z db přes php opět do db tabulky, kde by každé slovo bylo jedním řádkem a bylo k němu přiřazeno id textu, abych věděl, kde se vyskytuje. Taková alternativa mi taky přijde náročná, protože by šlo o cca. 4 000 000 řádků.
Napadá vás něco?
Dík moc za radu.
Václav
18. 7. 2010 15:26:35
https://webtrh.cz/diskuse/nejcasteji-slova-ulozena-v-mysql-v-typu-text/#reply529015
Michal Pokorný
verified
rating uzivatele
18. 7. 2010 16:47:26
Rozhodne bych to zpracoval radsi v PHP, znamena to prinejmensim mensi rezii spojeni mezi PHP a MySQL. Pomoci vhodne hesovaci tabulky se to da zvladnout v case skoro O(delka textu). Vysledek bych samozrejme cachoval do db, a pokud je potreba jenom prvnich nekolik, nebyl by snad problem s mistem na ulozeni.
Co rika Wiki o hesovacich tabulkach: http://en.wikipedia.org/wiki/Hash_table
18. 7. 2010 16:47:26
https://webtrh.cz/diskuse/nejcasteji-slova-ulozena-v-mysql-v-typu-text/#reply529014
Samozřejmě délkou se odladí mnoho spojek apod. Ovšem jak na to? Konkrétně...
19. 7. 2010 01:01:31
https://webtrh.cz/diskuse/nejcasteji-slova-ulozena-v-mysql-v-typu-text/#reply529013
Michal Pokorný
verified
rating uzivatele
19. 7. 2010 01:43:18
Dobre, konkretne:
1) vyberu si celou bunku do PHP, kde ji rozparsuji na slova. to je uloha na linearni cas, proste z toho udelam pole slov.
2) zalozim si hesovaci funkci, ktera mi "serizne" mnozinu vsech slov na mnozinu mnohem mensi; rekneme treba 1000 prvku. vytvorim si "pole poli struktur {slovo,pocet}" P o 1000 prvcich.
2) pro kazde slovo S:
2a) spocitam si jeho hash H(S).
2b) jestli neexistuje P, pak P = (slovo=S pocet=1);
2c) v jinem pripade projdu vsechny prvky pole P. pokud nektery z nich odpovida slovu S, pak pripoctu k jeho poctu jednicku. pokud zadny takovy prvek nenajdu, zalozim ho: P[] = (slovo=S pocet=1);
3) ted mam tabulku, ktera obsahuje pro kazde slovo pocet jeho vyskytu, jenom je optimalizovana na rychlejsi vyhledavani. muzu projit vsechny prvky P a setridit je podle poctu vyskytu a s tim dal pracovat. od tohoto okamziku dal muzu zapomenout P i hesovaci funkci.
Kdyz to je potreba trochu efektivneji, jde taky vubec nevytvaret pole slov, a jak je postupne ziskavam z textu z databaze, postupne plnit i pole P (krok 2).
Hesovaci funkce v kroku 2 a dal muze byt cokoliv, ale nejlepe funguje funkce, ktera dava pro vsechna slova rovnomerne vysledky. Navrhuji treba (soucet vsech (index pismena v abecede * 26^jeho pozice)) modulo 1000.
Asi tak. Doufam ze je to trochu lepsi.
19. 7. 2010 01:43:18
https://webtrh.cz/diskuse/nejcasteji-slova-ulozena-v-mysql-v-typu-text/#reply529012
Mario Dian
verified
rating uzivatele
(5 hodnocení)
19. 7. 2010 02:43:30
Myslim si, ze podstatne jednoduchsie je prehnat to pole slov cez array_count_values() ;)
19. 7. 2010 02:43:30
https://webtrh.cz/diskuse/nejcasteji-slova-ulozena-v-mysql-v-typu-text/#reply529011
Přes PHP je to snadná věc - otázkou je, zda je to při 4 000 000 záznamů proveditelné. Mám to tedy chápat tak, že jsem nic nepřehlédl a nějaká jednoduchá funkce v MySQL neexistuje?
---------- Příspěvek doplněn 19.07.2010 v 10:03 ----------
Zatím jsme se dostal k tomuto návodu, který pracuje s MySQL... http://bytes.com/topic/mysql/answers/160953-how-get-all-distinct-words-many-fields-table
19. 7. 2010 09:57:46
https://webtrh.cz/diskuse/nejcasteji-slova-ulozena-v-mysql-v-typu-text/#reply529010
Kamil Tomšík
verified
rating uzivatele
(3 hodnocení)
19. 7. 2010 11:12:28
takhle to delam ja:
(bylo to narychlo slepene, ale slape to, takze to neresim zatim :-))
EDIT: ted si uvedomuju, ze daleko lepsi by bylo konvertnout celej text do ascii a pak je mozno pouzit http://cz.php.net/manual/en/function.str-word-count.php
(tato fce totiz nefunguje spravne v utf-8)
EDIT2: jinak dotaz - proc to musi fungovat primo v MYSQL a proc to potrebujes pro 4000 zaznamu? zni to jako kdybys neco delal spatne
19. 7. 2010 11:12:28
https://webtrh.cz/diskuse/nejcasteji-slova-ulozena-v-mysql-v-typu-text/#reply529009
Ahoj, přímo v MySQL bych to rád viděl z jediného důvodu - netahat 21 MB záznamů do PHP a nevracet je zpátky do db, když to jde vyřešit uvnitř MySQL.
19. 7. 2010 11:49:10
https://webtrh.cz/diskuse/nejcasteji-slova-ulozena-v-mysql-v-typu-text/#reply529008
Kamil Tomšík
verified
rating uzivatele
(3 hodnocení)
19. 7. 2010 11:55:30
ok, odpovim ti otazkou - jak casto budes tech 21 mb tahat? a proc to vlastne chces delat? k cemu ti budou keywordy ze 4000 radku naraz?
19. 7. 2010 11:55:30
https://webtrh.cz/diskuse/nejcasteji-slova-ulozena-v-mysql-v-typu-text/#reply529007
Pro odpověď se přihlašte.
Přihlásit