Autor | Zpráva | ||
---|---|---|---|
Mech Profil * |
#1 · Zasláno: 27. 11. 2010, 20:28:45
Zdravím, mám text a potřeboval bych z něj vytáhnout seznam pěti nejčastěji opakovaných slov.
Mohl by mi někdo poradit jak na to? Dík. |
||
Jostram Profil * |
#2 · Zasláno: 27. 11. 2010, 20:35:27
obecně?
1. převést text na lowercase 2. "rozsekat" na jednotlivá slova (do pole) 3. projít pole a inkrementovat pole s indexem toho slova (například) 4. seřadit pole a vypsat X největších čísel Chcete-li to v nějakém konkrétním jazyce, musíte to napsat. |
||
Mech Profil * |
#3 · Zasláno: 27. 11. 2010, 20:42:34
Chtěl bych to PHP.
První bod bych určitě zvládl, ale k polím jsem se ještě nedostal. :) Díky moc. |
||
Jostram Profil * |
#4 · Zasláno: 27. 11. 2010, 21:05:36
To skoro znamená, že byste se měl podívat třeba sem nebo sem, že? ;-)
Pokud budu předpokládat, že se nechcete prozatím mordovat s regulárnímy výrazy, tak to zkuste zhruba takto: bod 1: Nejprve bych odstranil diakritiku - třeba takto. Poté bych převedl text na lowercase pomocí funkce strtolower(). bod 2: Na "rozsekávání" řetězce do pole můžete pro začátek použít funkci explode(). bod 3: Na procházení toho pole můžete použít konstrukci foreach. A inkrementace je vysvětlená zde. bod 4: Na seřazení pole třeba funkci sort(). A vypsání posledních pěti výsledků už nechám na vaší kreativitě ;) Rád vám pomohu, když narazíte na problém, ale doporučuji, abyste to zkusil udělat sám - když vám to sem napíšu, tak vám to nic nedá... Když na to přijdete sám, tak je to fajn pocit a hlavně se naučíte základům. |
||
Mech Profil * |
#5 · Zasláno: 28. 11. 2010, 09:31:45
Takže jsem u jedničky, ale následující kód mi nechce udělat z Č malé písmeno a následně odstranit diakritiku. Kde jsem udělal chybu?
$prevodni_tabulka = Array( 'ä'=>'a', 'Ä'=>'A', 'á'=>'a', 'Á'=>'A', 'à'=>'a', 'À'=>'A', 'ã'=>'a', 'Ã'=>'A', 'â'=>'a', 'Â'=>'A', 'č'=>'c', 'Č'=>'C', 'ć'=>'c', 'Ć'=>'C', 'ď'=>'d', 'Ď'=>'D', 'ě'=>'e', 'Ě'=>'E', 'é'=>'e', 'É'=>'E', 'ë'=>'e', 'Ë'=>'E', 'è'=>'e', 'È'=>'E', 'ê'=>'e', 'Ê'=>'E', 'í'=>'i', 'Í'=>'I', 'ï'=>'i', 'Ï'=>'I', 'ì'=>'i', 'Ì'=>'I', 'î'=>'i', 'Î'=>'I', 'ľ'=>'l', 'Ľ'=>'L', 'ĺ'=>'l', 'Ĺ'=>'L', 'ń'=>'n', 'Ń'=>'N', 'ň'=>'n', 'Ň'=>'N', 'ñ'=>'n', 'Ñ'=>'N', 'ó'=>'o', 'Ó'=>'O', 'ö'=>'o', 'Ö'=>'O', 'ô'=>'o', 'Ô'=>'O', 'ò'=>'o', 'Ò'=>'O', 'õ'=>'o', 'Õ'=>'O', 'ő'=>'o', 'Ő'=>'O', 'ř'=>'r', 'Ř'=>'R', 'ŕ'=>'r', 'Ŕ'=>'R', 'š'=>'s', 'Š'=>'S', 'ś'=>'s', 'Ś'=>'S', 'ť'=>'t', 'Ť'=>'T', 'ú'=>'u', 'Ú'=>'U', 'ů'=>'u', 'Ů'=>'U', 'ü'=>'u', 'Ü'=>'U', 'ù'=>'u', 'Ù'=>'U', 'ũ'=>'u', 'Ũ'=>'U', 'û'=>'u', 'Û'=>'U', 'ý'=>'y', 'Ý'=>'Y', 'ž'=>'z', 'Ž'=>'Z', 'ź'=>'z', 'Ź'=>'Z' ); $text = strtr($text, $prevodni_tabulka); //odstranění diakritiky $text = strtolower($text); //převod na malá písmena echo $text . "<p>"; |
||
Jostram Profil * |
#6 · Zasláno: 28. 11. 2010, 20:17:19
Ukažte tady celou tu stránku, ve které je ten skript. Kód je správně - viz:
<?php $text="Příliš žluťoučký kůn pěl ďábelké ódy. PŘÍLIŠ ŽLUŤOUČKÝ KŮN PĚL ĎÁBELKÉ ÓDY."; // Trochu jsem "osekal" tabulku znaků - jsou tam jen české $prevodni_tabulka = Array( 'á'=>'a', 'Á'=>'A', 'č'=>'c', 'Č'=>'C', 'ď'=>'d', 'Ď'=>'D', 'ě'=>'e', 'Ě'=>'E', 'é'=>'e', 'É'=>'E', 'è'=>'e', 'È'=>'E', 'í'=>'i', 'Í'=>'I', 'ň'=>'n', 'Ň'=>'N', 'ó'=>'o', 'Ó'=>'O', 'ř'=>'r', 'Ř'=>'R', 'š'=>'s', 'Š'=>'S', 'ť'=>'t', 'Ť'=>'T', 'ú'=>'u', 'Ú'=>'U', 'ů'=>'u', 'Ů'=>'U', 'ý'=>'y', 'Ý'=>'Y', 'ž'=>'z', 'Ž'=>'Z' ); // "Oloupeme" diakritiku $text = strtr($text, $prevodni_tabulka); echo 'Bez diakritiy: '.$text."\n"; //převod na malá písmena $text = strtolower($text); echo 'Lowercase :'.$text; ?> Vrací Bez diakritiy: Prilis zlutoucky kun pel dabelke ody. PRILIS ZLUTOUCKY KUN PEL DABELKE ODY. Lowercase :prilis zlutoucky kun pel dabelke ody. prilis zlutoucky kun pel dabelke ody. |
||
Mech Profil * |
#7 · Zasláno: 28. 11. 2010, 22:37:32
Text načítám z textarey.
Ani s tvým kódem mi to nefunguje. Co je špatně? <form action="<?=$_SERVER['PHP_SELF'];?>" method="post"> <textarea name="text" cols="50" rows="22"><?php echo $_REQUEST['text']; ?></textarea> <input type="submit" value="OK"> </form> <?php if (!empty($_REQUEST['text'])){ $text = strtolower($_REQUEST['text']); $znaky=strlen($text); $prevodni_tabulka = Array( 'á'=>'a', 'Á'=>'A', 'č'=>'c', 'Č'=>'C', 'ď'=>'d', 'Ď'=>'D', 'ě'=>'e', 'Ě'=>'E', 'é'=>'e', 'É'=>'E', 'è'=>'e', 'È'=>'E', 'í'=>'i', 'Í'=>'I', 'ň'=>'n', 'Ň'=>'N', 'ó'=>'o', 'Ó'=>'O', 'ř'=>'r', 'Ř'=>'R', 'š'=>'s', 'Š'=>'S', 'ť'=>'t', 'Ť'=>'T', 'ú'=>'u', 'Ú'=>'U', 'ů'=>'u', 'Ů'=>'U', 'ý'=>'y', 'Ý'=>'Y', 'ž'=>'z', 'Ž'=>'Z' ); // "Oloupeme" diakritiku $text = strtr($text, $prevodni_tabulka); echo 'Bez diakritiy: '.$text."\n"; //převod na malá písmena $text = strtolower($text); echo 'Lowercase :'.$text; ?> |
||
Jostram Profil * |
#8 · Zasláno: 28. 11. 2010, 23:07:53
Tuším... Jen pár postřehů :
* vyhněte se používání proměnné REQUEST - *lehce* se vám může stát, že si uděláte cookie stejného jména jako GET/POST a než tu chybu najdete, tak se z toho zblázníte. * Dále tam máte syntaktickou chybu - neuzavřený IF - pokud máte vyplé hlášení chyb, tak vám skript "umře" a vy o tom nebudete vědět. * Nejdříve odstraňte diakritiku a PAK lowercase. Je to proto, že funkce lowercase se občas chová zláštně v závislosti na kódování. Zkuste toto: <form action="test.php" method="POST"> <textarea name="text" cols="50" rows="22"><?php echo $_POST['text']; ?></textarea> <input type="submit" value="OK"> </form> <?php if (!empty($_POST['text'])){ $prevodni_tabulka = Array( 'á'=>'a', 'Á'=>'A', 'č'=>'c', 'Č'=>'C', 'ď'=>'d', 'Ď'=>'D', 'ě'=>'e', 'Ě'=>'E', 'é'=>'e', 'É'=>'E', 'è'=>'e', 'È'=>'E', 'í'=>'i', 'Í'=>'I', 'ň'=>'n', 'Ň'=>'N', 'ó'=>'o', 'Ó'=>'O', 'ř'=>'r', 'Ř'=>'R', 'š'=>'s', 'Š'=>'S', 'ť'=>'t', 'Ť'=>'T', 'ú'=>'u', 'Ú'=>'U', 'ů'=>'u', 'Ů'=>'U', 'ý'=>'y', 'Ý'=>'Y', 'ž'=>'z', 'Ž'=>'Z' ); // "Oloupeme" diakritiku $text = strtr($_REQUEST['text'], $prevodni_tabulka); //převod na malá písmena $text = strtolower($text); echo 'Text'.$text; } ?> |
||
Mech Profil * |
#9 · Zasláno: 28. 11. 2010, 23:24:04
Podmínku mám ukončenou správně, akorát závorka se mi při kopírování nějak záhadně vytratila. Problém je v tom, že ta diakritika je tam pořád.
Když do textarey zadám toto: Příliš žluťoučký kůň pěl ďábelské ódy. PŘÍLIŠ ŽLUŤOUČKÝ KŮŇ PĚL ĎÁBELSKÉ ÓDY. tak vyleze toto: příliš žluťoučký kůň pěl ďábelské ódy. pŘÍliŠ ŽluŤouČkÝ kŮŇ pĚl ĎÁbelskÉ Ódy. Fakt už nevím, co s tím. :( |
||
Jostram Profil * |
#10 · Zasláno: 28. 11. 2010, 23:43:50
Z toho, co jsem vám poslal? Jak jsem psal - strtolower() musí jít až *poté*, co projde odebrání diakritiky.
|
||
Mech Profil * |
#11 · Zasláno: 28. 11. 2010, 23:56:06
Ano, příspěvek [#9] se vztahuje k vašemu kódu.
|
||
ninja Profil |
#12 · Zasláno: 29. 11. 2010, 10:08:45
Mech: Jaké používáte kódování?
|
||
Mech Profil * |
#13 · Zasláno: 30. 11. 2010, 18:00:33
Tak už mi to s tou diakritkou konečně funguje.
Akorát nechápu, jak konkrétně udělat to řazení pomocí foreach. Poradíte, prosím? |
||
Mech Profil * |
#14 · Zasláno: 30. 11. 2010, 19:26:22
Už jsem to nějak splácal dohromady. :)
Díky za pomoc. |
||
Časová prodleva: 13 let
|
0