PHP: Подсчет слов в тексте и выделение самых часто встречающихся

[Удален]
14291

Приветствую! Программил, программил и столкнулся с такой задачей.. в некой переменной, назовем ее $text, содержится обычный текст. Как подсчитать количество слов в этом тексте, но не просто подсчитать, а вывести определенное число самых популярных слов в этом тексте. Что-то у меня какая-то ерунда получается, направьте плиз в нужную сторону ;)

[Удален]
#1

как вариант разбить текст на слова, сделать фильтрацию стоп-слов(предлоги и и т.п.), провести подсчет одинаковых слов

N_MONax
На сайте с 22.08.2007
Offline
112
#2

asamakin,

Для начала разбить в массив. например по пробелу, например функцией explode.

Затем пройтись по элементам этого массива, удаляя все знаки препинания и стоп-слова.

Затем создать второй массив, в который выделить все уникальные ключи из первого (для этого есть спец. функция, забыл как называется :)). Вид массива сделать следующим [слово] => 0

Удалить первый массив.

Затем пройтись двумя вложенными циклами for по элементам первого и второго массива соответсвенно. И при обнаружении совпадений, значениям второго массива (там где нули) давать +1.

В итоге мы получим результат во втором массиве вида: [слово] => количество.

Полный спектр услуг в интернете. Быстро, Качественно, Дорого. Пишите в личку.
[Удален]
#3

N_MONax, ваша "деятельность" сразу видна, вы и правда кодер :)

http://ru.php.net/manual/en/function.array-count-values.php

&& explode && array_filter

[Удален]
#4
bearman:
N_MONax, ваша "деятельность" сразу видна, вы и правда кодер :)

http://ru.php.net/manual/en/function.array-count-values.php

&& explode && array_filter

Извиняюсь, видимо после трудовой недели туго соображаю ;)

$pieces = explode(" ", $t);

$res=array();

foreach($pieces as $val)

$res[$val]++;

print_r($res);

выдало мне следующее:

Array ( [Добро] => 1 [пожаловать] => 1 [на] => 1 [один] => 1 [из] => 1 [старейших] => 1 [каталогов] => 1 [статей.] => 1 [Размещение] => 1 [статей] => 1 [в] => 1 [каталоге] => 1 [-] => 1 [бесплатное.] => 1 )

а как теперь из этого массива выбрать 5 самых популярных слов?

ewg777
На сайте с 04.06.2007
Offline
225
#5
[Удален]
#6

ewg777, ой какой ужас.

private function gen_words ($min_strlen)
{
foreach ($this->temp_words as $key=>$value)
{
if (strlen ($value) <= $min_strlen)
{
unset ($this->temp_words[$key]);
}
else
{
$value = strtolower ($value);
if (isset ($this->words[$value]))
{
$this->words[$value] = $this->words[$value] + 1;
}
else
{
$this->words[$value] = 1;
}
}
}
$this->temp_words = null;
arsort ($this->words);
}
[Удален]
#7

я щас наверное открою америку для всех собравшихся

http://ru2.php.net/manual/en/function.str-word-count.php

не забудьте только поставить локаль русскую

[Удален]
#8

Всем спасибо! Вроде чегой-то получилось ;))) http://generator.binox.ru/index2.php

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий