Выбор 10-ти наиболее часто встречающихся слов в тексте.

AnToXa

prodigy-одаренный ребенок
да, я видел ссылку, не вчитывался правда.
ну если надо подсчитать корни, то подсчитаем корни, а если надо слова отдельные - подсчитаем их, если надо слова нормализованые - то их, никаких проблем :)
 

Alexandre

PHPПенсионер
но выборка 10 чего-то по какому-то критерию никак не пересекается с тем как это "что-то" формируется.
Почему, мы на этапе формирования массива
Код:
array {
[выбрать]  =  2,
[текст] = 3,
[стоп ] = 2,
[слова] = 5,
[делать] =1
[совмещенный] =2
[алгоритм] =3
[вычленения ] =2 
[деньги] =1
[соответственно]  =2
[корню] =3 
[осуществляем] =4
}
в ходе вычленения слов уже можем формировать максимальное и минимальное значение повторений для top10[ 5,3 ] ... Ну мой пример из-за размерности может и не не показательный, но когда мы проходимся по массиву, то отсекается все - что меньше 3х... - соответственно в 10ку не попадает, и ни какой сортировки.
но


AnToXa для подсчета нормальзованных слов - нужно aspell
я так понимаю - подсчет максимально-повторяющихся первых 10 слов на странице нужен для оформления ее в поисковом индексе по сайту. по этому морфологию прикрутить интерестно.
хотя в задачи этого не просят.
 

hermit_refined

Отшельник
Автор оригинала: AnToXa
1. preg_split, жесть, N копирований на каждое слово (это я молчу про сложность автомата, который пройдется по этому тексту) т.е. как минимум O(2*K) + O(N), где K - длина текста, N - кол-во слов.
В большинстве случаев preg_split по такому элементарному выражению работает быстрее посимвольного разбора. Сложность одна и та же, но константа меньше - нет накладных расходов на вызов php-функций. Второй шаг - практически такой же, как и предлагаемый. Для нормальной оптимизации тут есть только один вариант - писать модуль на С.

А изменение третьего шага - это да - сортировка там ни к чему, если текст больше некоторого объёма - выбор 10 "максимальных" слов много лучше (ибо сохраняет сложность O(N)).
 

dub

Новичок
Думал что уже все реализовал(чисто на работе с массивом после stemmer- ра(только уникальные слова) и исходным массивом(с учетом стоп слов пока нашол только около 2 тыс, но современем добавлю) ), а оказывается все можно еще неплохо оптимизировать.
AnToXa +1
Alexandre +1
к стате если юзать stemmer, даже такой примитивный как этот http://forum.dklab.ru/php/advises/HeuristicWithoutTheDictionaryExtractionOfARootFromRussianWord.html
то результат получается где то раза в полтора точнее.
 

AnToXa

prodigy-одаренный ребенок
в ходе вычленения слов уже можем формировать максимальное и минимальное значение повторений для top10[ 5,3 ]
ну дык я о том, что к сортировке никакого отношения не имеет, мы сначала ведь _фильтруем_ слова меньше трех букв просто потому что они нам нафик не нужны :)

В большинстве случаев preg_split по такому элементарному выражению работает быстрее посимвольного разбора. Сложность одна и та же, но константа меньше - нет накладных расходов на вызов php-функций.
естественно, но explode - еще быстрее, т.к. не надо строить конечный автомат по regexp-у :)
я как-то не думал про пхп когда это писал, сорри :D
 

dub

Новичок
AnToXa

а как без regexp- па убить & nbsp ; & mdash ; и прочие & ... ; + знаки: , ; . ? (мне пока казалось достаточно логичным использование "regexp - автомата")
 

AnToXa

prodigy-одаренный ребенок
да используй конечно регексп, почему бы и нет.
 
Сверху