Учитывая текст, как я могу подсчитать плотность/количество длин слов, чтобы получить такой вывод
- Слова из 1 буквы: 52 / 1%
- Слова из 2 букв: 34 / 0,5%
- Слова из 3 букв: 67 / 2%
Нашел это, но для python
Учитывая текст, как я могу подсчитать плотность/количество длин слов, чтобы получить такой вывод
Нашел это, но для python
Вы можете начать с разделения текста на слова, используя либо explode()
(как очень/слишком простое решение) или preg_split()
< em>(позволяет использовать более мощные вещи) :
$text = "this is some kind of text with several words";
$words = explode(' ', $text);
Затем переберите слова, получив для каждого из них его длину, используя strlen()
< /сильный>а> ; и помещая эти длины в массив:
$results = array();
foreach ($words as $word) {
$length = strlen($word);
if (isset($results[$length])) {
$results[$length]++;
}
else {
$results[$length] = 1;
}
}
Если вы работаете с UTF-8, см. раздел mb_strlen()
.
В конце этого цикла $results
будет выглядеть так:
array
4 => int 5
2 => int 2
7 => int 1
5 => int 1
Общее количество слов, необходимое для расчета процента, можно найти либо:
foreach
,array_sum()
на $results
после завершения цикла.И для расчета процентов это немного математики - я не буду так полезен, об этом ^^
Вы можете разбить текст на пробелы, а затем для каждого полученного слова подсчитать количество букв. Если есть знаки препинания или любой другой разделитель слов, вы должны это учитывать.
$lettercount = array();
$text = "lorem ipsum dolor sit amet";
foreach (explode(' ', $text) as $word)
{
@$lettercount[strlen($word)]++; // @ for avoiding E_NOTICE on first addition
}
foreach ($lettercount as $numletters => $numwords)
{
echo "$numletters letters: $numwords<br />\n";
}
ps: я не доказал это, но должно работать
Вы можете быть умнее в удалении знаков препинания, используя preg_replace.
$txt = "Sean Hoare, who was first named News of the World journalist to make hacking allegations, found dead at Watford home. His death is not being treated as suspiciou";
$txt = str_replace( " ", " ", $txt );
$txt = str_replace( ".", "", $txt );
$txt = str_replace( ",", "", $txt );
$a = explode( " ", $txt );
$cnt = array();
foreach ( $a as $b )
{
if ( isset( $cnt[strlen($b)] ) )
$cnt[strlen($b)] += 1;
else
$cnt[strlen($b)] = 1;
}
foreach ( $cnt as $k => $v )
{
echo $k . " letter words: " . $v . " " . round( ( $v * 100 ) / count( $a ) ) . "%\n";
}