PHP - 最常见的单词

时间:2016-01-26 11:56:00

标签: php string count limit frequency

我是PHP的新手,我试图在某些字符串中显示最常用的单词。但是......我不想把词语称为“a,se,na,pak”等。我怎样才能为该脚本提供一些规则?

$text = "Tato velmi populární kniha vypráví o životě hlavní postavy – Robinsona Crusoe. Robinson žil se svojí rodinou v malém Anglickém městě York.  Jeho otec byl úspěšný obchodník a měl přání, aby se Robinson stal soudcem. Ten ale toužil po pozici námořníka a proto utekl z domu. Prožíval si život přesně podle svých představ. Pak se ale stala nehoda. Jeho loď ztroskotala a rybář, který ho zachránil, ho odvezl do Londýna. Robinson se ale nenechal odradit a pokračoval dál ve svých dobrodružných plavbách. Jednou se dostal do zajetí pirátů, v jejichž čele byl Ab-Dél-Mámí. Ten si Robinsona oblíbil a zaplatil mu učitele. Brzy se naučil jejich řeč a žil v otroctví 5 let. Když poté plul na malé loďce s kamarádem Xurym a přepadla je velká bouře, ztroskotal a ocitl se na opuštěném ostrově daleko od civilizace. Když se smířil s krutou realitou, začal si shánět základní věci pro přežití a budoval si jednoduché obydlí. Postupem času se naučil vyrábět mnoho věcí. Šaty, zbraně, boty, svíčky, smetanu, tvaroh a další věci. Ochočil si několik divokých zvířat a našel si papouška Andu, který mu dělal společníka. Při jednom nájezdů lidožroutů se také seznámil s divochem, kterého pojmenoval podle dne nalezení – Pátka. Pátek byl velmi učenlivý a Robinsonovi pomáhal jak fyzicky, tak psychicky. Robinson si na ostrově prožil celkem 35 nezapomenutelných let. Pak se dokázal dostat na anglický koráb, jehož posádka ho zachránila a odvezla na domovskou půdu. Po dalších sedmi letech se Robinson rozhodl, že se podívá zpět na ostrov.";

$slova = str_word_count($text, 1);

$frekvence = array_count_values($slova);
$stop = array("a", "pak", "se", "na");
arsort($frekvence);
$pole = array_diff($slova, $stop);

echo $text . "<br><br>";
echo "<p>10 nejpoužívanějších slov v ukázkovém textu je:</p>";

for ($i = 0; $i < 10; $i++) {
echo key($frekvence) . "<br>";
next($frekvence);
}

2 个答案:

答案 0 :(得分:0)

你可以这样做:

$text = "Tato velmi populární kniha vypráví o životě hlavní postavy – Robinsona Crusoe. Robinson žil se svojí rodinou v malém Anglickém městě York.  Jeho otec byl úspěšný obchodník a měl přání, aby se Robinson stal soudcem. Ten ale toužil po pozici námořníka a proto utekl z domu. Prožíval si život přesně podle svých představ. Pak se ale stala nehoda. Jeho loď ztroskotala a rybář, který ho zachránil, ho odvezl do Londýna. Robinson se ale nenechal odradit a pokračoval dál ve svých dobrodružných plavbách. Jednou se dostal do zajetí pirátů, v jejichž čele byl Ab-Dél-Mámí. Ten si Robinsona oblíbil a zaplatil mu učitele. Brzy se naučil jejich řeč a žil v otroctví 5 let. Když poté plul na malé loďce s kamarádem Xurym a přepadla je velká bouře, ztroskotal a ocitl se na opuštěném ostrově daleko od civilizace. Když se smířil s krutou realitou, začal si shánět základní věci pro přežití a budoval si jednoduché obydlí. Postupem času se naučil vyrábět mnoho věcí. Šaty, zbraně, boty, svíčky, smetanu, tvaroh a další věci. Ochočil si několik divokých zvířat a našel si papouška Andu, který mu dělal společníka. Při jednom nájezdů lidožroutů se také seznámil s divochem, kterého pojmenoval podle dne nalezení – Pátka. Pátek byl velmi učenlivý a Robinsonovi pomáhal jak fyzicky, tak psychicky. Robinson si na ostrově prožil celkem 35 nezapomenutelných let. Pak se dokázal dostat na anglický koráb, jehož posádka ho zachránila a odvezla na domovskou půdu. Po dalších sedmi letech se Robinson rozhodl, že se podívá zpět na ostrov.";

//Separate each word and remove separators such as `,` or `.` or `;` or `:` etc
$words = explode(" ", str_replace(array(",",".",";",":"), "", $text));

//Create array to hold words and count
$words_count = array();

//Create array that has disallowed words/phrases
$not_allowed = array("a", "pak", "se", "na");

//Go through each word
foreach($words as $word){

    if(!in_array($word, $not_allowed)){
        //If it's not in the "not_allowed" array...
        if(array_key_exists($word, $words_count)){
            //If we've already logged this word, add one to the count
            $words_count[$word]++;
        } else {
            //Haven't seen this word before - add it to the array with value 1
            $words_count[$word] = 1;
        }
    }
}

//Sort the array by value (number of occurrences)
arsort($words_count);

//Print the result
print_r($words_count);

这将输出:

Array
(
    [si] => 7
    [Robinson] => 5
    [ale] => 3
    [ho] => 3
    [v] => 3
    [byl] => 3
    [s] => 3
    [Pak] => 2
    [naučil] => 2
    [Jeho] => 2
    [do] => 2
    [podle] => 2
    [let] => 2
    [Když] => 2
    [svých] => 2
    [žil] => 2
    [mu] => 2
    [který] => 2
    [ostrově] => 2
    [věci] => 2
    [–] => 2
    [Ten] => 2
    [velmi] => 2
    [Robinsona] => 2
    [smetanu] => 1
    [další] => 1
    [Ochočil] => 1
    [tvaroh] => 1
    [zvířat] => 1
    [dělal] => 1
    [společníka] => 1
    [Při] => 1
    [Andu] => 1
    [papouška] => 1
    [divokých] => 1
    [svíčky] => 1
    [našel] => 1
    [několik] => 1
    [vyrábět] => 1
    [začal] => 1
    [shánět] => 1
    [základní] => 1
    [pro] => 1
    [realitou] => 1
    [krutou] => 1
    [od] => 1
    [civilizace] => 1
    [smířil] => 1
    [přežití] => 1
    [budoval] => 1
    [věcí] => 1
    [Šaty] => 1
    [zbraně] => 1
    [mnoho] => 1
    [času] => 1
    [jednoduché] => 1
    [obydlí] => 1
    [Postupem] => 1
    [boty] => 1
    [kterého] => 1
    [jehož] => 1
    [posádka] => 1
    [zachránila] => 1
    [odvezla] => 1
    [koráb] => 1
    [anglický] => 1
    [nezapomenutelných] => 1
    [dokázal] => 1
    [dostat] => 1
    [domovskou] => 1
    [půdu] => 1
    [že] => 1
    [podívá] => 1
    [zpět] => 1
    [ostrov] => 1
    [rozhodl] => 1
    [letech] => 1
    [Po] => 1
    [dalších] => 1
    [sedmi] => 1
    [35] => 1
    [celkem] => 1
    [daleko] => 1
    [pojmenoval] => 1
    [dne] => 1
    [nalezení] => 1
    [divochem] => 1
    [seznámil] => 1
    [nájezdů] => 1
    [lidožroutů] => 1
    [také] => 1
    [Pátka] => 1
    [Pátek] => 1
    [tak] => 1
    [psychicky] => 1
    [prožil] => 1
    [fyzicky] => 1
    [jak] => 1
    [učenlivý] => 1
    [Robinsonovi] => 1
    [pomáhal] => 1
    [jednom] => 1
    [loďce] => 1
    [pozici] => 1
    [námořníka] => 1
    [proto] => 1
    [po] => 1
    [toužil] => 1
    [aby] => 1
    [stal] => 1
    [soudcem] => 1
    [utekl] => 1
    [z] => 1
    [stala] => 1
    [nehoda] => 1
    [loď] => 1
    [představ] => 1
    [přesně] => 1
    [domu] => 1
    [Prožíval] => 1
    [život] => 1
    [přání] => 1
    [měl] => 1
    [hlavní] => 1
    [postavy] => 1
    [Crusoe] => 1
    [životě] => 1
    [o] => 1
    [populární] => 1
    [kniha] => 1
    [vypráví] => 1
    [svojí] => 1
    [rodinou] => 1
    [otec] => 1
    [úspěšný] => 1
    [obchodník] => 1
    [] => 1
    [York] => 1
    [malém] => 1
    [Anglickém] => 1
    [městě] => 1
    [ztroskotala] => 1
    [rybář] => 1
    [5] => 1
    [poté] => 1
    [plul] => 1
    [otroctví] => 1
    [řeč] => 1
    [učitele] => 1
    [Brzy] => 1
    [jejich] => 1
    [malé] => 1
    [Tato] => 1
    [bouře] => 1
    [ztroskotal] => 1
    [ocitl] => 1
    [velká] => 1
    [je] => 1
    [kamarádem] => 1
    [Xurym] => 1
    [přepadla] => 1
    [zaplatil] => 1
    [oblíbil] => 1
    [pokračoval] => 1
    [dál] => 1
    [ve] => 1
    [odradit] => 1
    [nenechal] => 1
    [zachránil] => 1
    [odvezl] => 1
    [Londýna] => 1
    [dobrodružných] => 1
    [plavbách] => 1
    [jejichž] => 1
    [čele] => 1
    [Ab-Dél-Mámí] => 1
    [pirátů] => 1
    [zajetí] => 1
    [Jednou] => 1
    [dostal] => 1
    [opuštěném] => 1
)

获得$words_count数组后,您可以显示最常用的单词:

$most_freq = array_keys($words_count);

echo "Ten most frequent words:<br><br>";

for($i = 0; $i < 10; $i++){
    echo $most_freq[$i]."<br>"; 
}

答案 1 :(得分:0)

你可以试试这个

    $str = "Tato velmi populární kniha vypráví o životě hlavní postavy – Robinsona Crusoe. Robinson žil se svojí rodinou v malém Anglickém městě York.  Jeho otec byl úspěšný obchodník a měl přání, aby se Robinson stal soudcem. Ten ale toužil po pozici námořníka a proto utekl z domu. Prožíval si život přesně podle svých představ. Pak se ale stala nehoda. Jeho loď ztroskotala a rybář, který ho zachránil, ho odvezl do Londýna. Robinson se ale nenechal odradit a pokračoval dál ve svých dobrodružných plavbách. Jednou se dostal do zajetí pirátů, v jejichž čele byl Ab-Dél-Mámí. Ten si Robinsona oblíbil a zaplatil mu učitele. Brzy se naučil jejich řeč a žil v otroctví 5 let. Když poté plul na malé loďce s kamarádem Xurym a přepadla je velká bouře, ztroskotal a ocitl se na opuštěném ostrově daleko od civilizace. Když se smířil s krutou realitou, začal si shánět základní věci pro přežití a budoval si jednoduché obydlí. Postupem času se naučil vyrábět mnoho věcí. Šaty, zbraně, boty, svíčky, smetanu, tvaroh a další věci. Ochočil si několik divokých zvířat a našel si papouška Andu, který mu dělal společníka. Při jednom nájezdů lidožroutů se také seznámil s divochem, kterého pojmenoval podle dne nalezení – Pátka. Pátek byl velmi učenlivý a Robinsonovi pomáhal jak fyzicky, tak psychicky. Robinson si na ostrově prožil celkem 35 nezapomenutelných let. Pak se dokázal dostat na anglický koráb, jehož posádka ho zachránila a odvezla na domovskou půdu. Po dalších sedmi letech se Robinson rozhodl, že se podívá zpět na ostrov.";

$replace_str = array('a'=> '', 'se'=> '', 'na'=>'', 'pak' => '');
echo strtr ($str, $replace_str);