Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: подсчет одинаковых слов на странице [2]

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (2): « 1 [2]   

> Описание: как реализовать?
JustUserR
Отправлено: 29 Декабря, 2010 - 18:03:07
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




LEONeso В качестве наиболее простого решения для предполагаемой вами задачи возможно использование следующей схемы которая однако не является оптимальным - осуществляеся разбиение предоставленной строковой константы на набор слов по ключевому разделителю такому как пробельным символ - после чего обеспечивается просмотр полученного индексного массива и очистка его элементов от дополнительных знаков пунктуации и тд - далее на основании указанного массива осуществляется просмотр его элементов и инкрементация связанных счетчиков в ассоциативном массиве


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
OrmaJever Модератор
Отправлено: 29 Декабря, 2010 - 18:05:49
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




LEONeso пишет:
OrmaJever, опробовал совет jewel с strip_tags() и даже с fgetss(), применял данные функции к каждой переменной, но все было провально, куда бы я их не тыкал (метод тыка, откинув здравый смысл - отчаянье? )

Когда я писал пост, я отвечал на вопрос про регулярное выражение. А что имено нужно зделать?


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
LEONeso
Отправлено: 29 Декабря, 2010 - 18:17:35
Post Id



Посетитель


Покинул форум
Сообщений всего: 499
Дата рег-ции: Янв. 2010  
Откуда: Россия, Москва


Помог: 1 раз(а)




Хочу, что типа, авто заполнения ключевых слов исходя из контента страницы по частоте их повторения, но есть вероятность, что это не так просто как кажется. Однако типа аналога как в движке DLE, где после создания новости/статической страницы движок сам проверяет (заполнено ли поле, если нет, то заполняет сам)


-----
Для некоторых лучший способ написать что-нибудь осмысленное - это сесть _опой на клавиатуру.
 
 Top
LEONeso
Отправлено: 02 Января, 2011 - 23:29:43
Post Id



Посетитель


Покинул форум
Сообщений всего: 499
Дата рег-ции: Янв. 2010  
Откуда: Россия, Москва


Помог: 1 раз(а)




потыкал, вышло следующее:
PHP:
скопировать код в буфер обмена
  1. $url='http://php.su/';
  2. $content = file_get_contents($url);
  3. $content = strip_tags($content); //удаляем html+php
  4. $content = stripslashes ($content); //удаляем слеши
  5. $content = preg_replace('/\  /s','', $content); //удаляем двойные пробелы
  6. $content = preg_replace('/[(0-9)]/','', $content); //удаляем цифры, если необходимо
  7. $content = preg_replace('/[^(\w)(\s)]/','', $content); //подчищаем все кроме букв (и символов, но их уже нет)
  8. $content = strtolower($content); //преобразуем в нижний регистр
  9. $content = trim($content); //удаляем пробелы до и после слова
  10.  
  11.       $pieces = explode(" ", $content);
  12.       foreach($pieces as $val)
  13.       $pos[$val] = @substr_count($content, $val);
  14.  
  15.  
  16.       foreach($pos as $key => $cal)
  17.       {
  18.             if ($cal >= 3 AND strlen($key) >= 4) {
  19. echo <<<HTML
  20. Кол-во повторений: <b>$key</b> = $cal<br>
  21. HTML;
  22.             }
  23.       }

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

Слово выводит при условии, что оно повторилось 3 и более раза, слово имеет 4 и более символов.


-----
Для некоторых лучший способ написать что-нибудь осмысленное - это сесть _опой на клавиатуру.
 
 Top
LEONeso
Отправлено: 03 Января, 2011 - 21:44:31
Post Id



Посетитель


Покинул форум
Сообщений всего: 499
Дата рег-ции: Янв. 2010  
Откуда: Россия, Москва


Помог: 1 раз(а)




пока никто ничего не пишет =)

поправил код, добавил странные регулярки, который породил мой мозг
PHP:
скопировать код в буфер обмена
  1. $url='http://smayly.net.ru/';
  2. $content = file_get_contents($url);
  3. $content = strip_tags($content); //удаляем html+php
  4. $content = stripslashes ($content); //удаляем слеши
  5.       $patterns = array (
  6.       '/[(0-9a-zA-Z_\r\n)]/',//удаляем цифры и латиницу, нижнее подчеркивание, конец строки
  7.       '/\  /s',//удаляем двойные пробелы
  8.       '/\       /s',//удаляем табуляторы
  9.       '/[^(\w)(\s)]/'//подчищаем
  10.       );
  11. $content = preg_replace($patterns,null,$content); //прогоняем регулярки
  12. $content = strtolower($content); //преобразуем в нижний регистр
  13. $content = trim($content); //удаляем пробелы до и после слова
  14.  
  15.       $pieces = explode(" ", $content);
  16.       foreach($pieces as $val)
  17.       $pos[$val] = @substr_count($content, $val);
  18.  
  19.  
  20.       foreach($pos as $key => $cal)
  21.       {
  22.             if ($cal >= 3 AND strlen($key) >= 4) {
  23. echo <<<HTML
  24. <b>$key</b> повторений $cal, <br />\r\n
  25. HTML;
  26.             }
  27.       }


результатом работы кода:
CODE (html):
скопировать код в буфер обмена
  1. смайлы повторений 4,
  2. новости повторений 5,
  3. января повторений 3,
  4. будут повторений 3,
  5. проекта повторений 3,
  6. версия повторений 3,
  7. сайта повторений 7,
  8. сайт повторений 21,
  9. будит повторений 3, - кого будит)? до сих пор стыдно, перед посетителями, за эту ошибку
  10. время повторений 3,
  11. сайте повторений 6,
  12. работ повторений 4,
  13. после повторений 4,


как видно, склонения он не понимает, вопрос: с этим можно, что-то поделать? сравнивание слов на совпадение первых букв за исключением последних 2-х? если соответствую друг другу, то объединять и выводить слово, которое меньше имеет букв?

(Отредактировано автором: 03 Января, 2011 - 21:47:22)



-----
Для некоторых лучший способ написать что-нибудь осмысленное - это сесть _опой на клавиатуру.
 
 Top
movEAX
Отправлено: 04 Января, 2011 - 09:50:32
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 750
Дата рег-ции: Авг. 2009  


Помог: 16 раз(а)




PHP:
скопировать код в буфер обмена
  1. $text = file_get_contents( 'http://smayly.net.ru' );
  2. $text = mb_strtolower( strip_tags( $text ) );
  3. $patterns = array(
  4.     // заменяем все не кириллические символы и не пробелы
  5.     // на пробельный символ
  6.     '#[^а-я ]#',
  7.     // уничтожаем множественные пробелы
  8.     '# {2,}#'
  9. );
  10. $text = preg_replace( $patterns, ' ', $text );
  11. $words = array_unique( explode( ' ', $text ) );
  12. // оставляем только слова, которые не меньше 4х букв
  13. $words = preg_grep( '#[а-я]{4,}#', $words );
  14. $text .= ' ';
  15.  
  16. foreach( $words as $word ) {
  17.     // исключаем схожие слова, добавляя пробел
  18.     // исключаем слова, вхождениие которых меньше 3х
  19.     if( ( $cnt = substr_count( $text, $word.' ' ) ) < 3 )
  20.         continue;
  21.     echo '<b>', $word, '</b> повторений: ', $cnt, '</br>';
  22. }


На выходе:
смайлы повторений: 4
сайта повторений: 7
новости повторений: 5
сайт повторений: 7
сайте повторений: 6
января повторений: 3
года повторений: 3
проекта повторений: 3
будут повторений: 3
версия повторений: 3
будит повторений: 3
время повторений: 3

(Отредактировано автором: 04 Января, 2011 - 21:19:02)



-----
армия.. самое убогое место
 
 Top
LEONeso
Отправлено: 04 Января, 2011 - 20:15:39
Post Id



Посетитель


Покинул форум
Сообщений всего: 499
Дата рег-ции: Янв. 2010  
Откуда: Россия, Москва


Помог: 1 раз(а)




movEAX, о спасибо, интересно, но как-то не очень. В итоге он вывел мало слов и большинство из них были одинаковые (по склонению). и не подсчитывает кол-во повторений

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


Попытался с помощью substr() и strlen() устроить следующее:
1. Подсчитать кол-во символов в слове
2. Добавить результат работы strlen в substr при этом разделить на 3 и округлить до целых round('',0) и вычесть данное значение из конца слова
3. далее провести сравнивание слов на схожесть ...

дальше мысль потеряна ... тонна ошибок в коде ... сдался.


в данный момент все осталось на прежнем месте, с малым изменением кода:
PHP:
скопировать код в буфер обмена
  1. $url='http://smayly.net.ru/';
  2. $content = file_get_contents($url);
  3. $content = strip_tags($content); //удаляем html+php
  4. $content = stripslashes ($content); //удаляем слеши
  5.       $patterns = array (
  6.       '/[(0-9a-zA-Z_\r\n\t\0\x0B)]/',//удаляем цифры и латиницу, нижнее подчеркивание, конец строки, табуляторы и нулевой байт
  7.       '/\  /s',//удаляем двойные пробелы
  8.       '#[^а-я ]#i'//ставляем только латиницу и пробелы
  9.       );
  10. $content = preg_replace($patterns,null,$content); //прогоняем регулярки
  11. $content = strtolower($content); //преобразуем в нижний регистр
  12. $content = trim($content); //удаляем пробелы до и после слова , '\x00..\x1F'
  13.  
  14.       $pieces = explode(" ", $content);
  15.      //print_r ($pieces);
  16.       foreach($pieces as $val)
  17.       $pos[$val] = @substr_count($content, $val);
  18.  
  19.  
  20.       foreach($pos as $key => $cal)
  21.       {
  22.             if ($cal >= 3 AND strlen($key) >= 4) {
  23. echo <<<HTML
  24. <b>$key</b> повторений $cal, <br />\r\n
  25. HTML;
  26.             }
  27.       }

если применять, только одну регулярку "#[^а-я ]#i", то результат работы будет такой же, но при просмотре массива, он составит 1200+ ключей и естественно время работы скрипта больше, при полном цикле регулярок, ключей стало 400+, время работы сократилось (с учетом выбранного контента).

(Отредактировано автором: 04 Января, 2011 - 20:24:25)



-----
Для некоторых лучший способ написать что-нибудь осмысленное - это сесть _опой на клавиатуру.
 
 Top
movEAX
Отправлено: 04 Января, 2011 - 20:26:17
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 750
Дата рег-ции: Авг. 2009  


Помог: 16 раз(а)




LEONeso пишет:
если применять, только одну регулярку "#[^а-я ]#i", то результат работы будет такой же, но при просмотре массива, он составит 1200+ ключей и естественно время работы скрипта больше, при полном цикле регулярок, ключей стало 400+, время работы сократилось (с учетом выбранного контента).

array_unique()

Первая регулярка не нужна.
(Добавление)
Какой результат на выходе?


-----
армия.. самое убогое место
 
 Top
JustUserR
Отправлено: 04 Января, 2011 - 20:54:39
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




LEONeso пишет:
Дальше мысль потеряна ... тонна ошибок в коде
Для осуществления решения предполагаемой вами задачи в частном случае достаточно использование единичного рерулярного выражения и функции поддержки работы с ассоциативными массивами - в частности вначале осуществляется конфигурация региональных параметров рабочей станции и кодовой таблицы для осуществления представления информационных полей - что позволяет установить элемент разделителя \w для слов русского языка и сохранить их списков из оригинального источника индексный массив - после чего процесс подсчета количества вхождений описан ранее в потоке обсуждения


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Страниц (2): « 1 [2]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB