За последние 24 часа нас посетили 17324 программиста и 1650 роботов. Сейчас ищут 968 программистов ...

Простенький алгоритм генерации keyword'ов

Тема в разделе "Прочие вопросы по PHP", создана пользователем enshtein, 8 май 2007.

  1. enshtein

    enshtein Активный пользователь

    С нами с:
    27 авг 2006
    Сообщения:
    291
    Симпатии:
    0
    Встала задача написать ПРОСТЕНЬКИЙ генератор keyword'ов для определенной страницы (текста);
    Быренько набросал код, вот что пока получилось:

    PHP:
    1. <?php
    2. Error_Reporting(E_ALL & ~E_NOTICE);
    3. if ($_GET['mod'] == 'getkw') {
    4.     $body = $_POST['body'];
    5.     // убираем html и php теги
    6.     $body = strip_tags($body);
    7.     // преобразуем весь текст к нижнему регистру
    8.     $body = strtolower($body);
    9.     // удаляем ненужные символы
    10.     $del_chars = array('.', ',', ':', ';', '\\', '|', '/', '`', '!', '@', '#',
    11.                         '$', '%', '^', '&', '*', '(', ')', '=', '~', '1',
    12.                         '2', '3', '4', '5', '6', '7', '8', '9', '0', '"', '№',
    13.                         '?', '_', '+', '[', ']', '{', '}', '<', '>', "\$", "\t",
    14.                         "\r", "\n", "'", '»', '“', '”', 'nbsp');
    15.     $body = str_replace($del_chars, ' ', $body);
    16.     // удаляем одиночные символы
    17.     $body = preg_replace(array('/(\W+)(\S)(\W+)/', '/(\s+)(\S)(\s+)/'), ' ', $body);
    18.     // удаляем лишнее кол-во символов
    19.     $body = preg_replace('/\s+/', ' ', $body);
    20.     // создаем массив
    21.     $body_array = explode(' ', trim($body));
    22.     $keywords = array();
    23.     // считаем кол-во совпадений
    24.     foreach($body_array as $value) {
    25.         if (in_array(trim($value), $body_array)) {
    26.             $keywords[$value]++;
    27.         }
    28.         else {
    29.             $keywords[$value] = '1';
    30.         }
    31.     }
    32.     // сортируем
    33.     arsort($keywords);
    34.     // срезаем верхушку самых частых слов
    35.     $out = array_slice($keywords, 0, 30);
    36.     header('Content-type: text/plain');
    37.     print_r($out);
    38. }
    39. else {
    40. ?>
    41.  
    42. <html>
    43. <head>
    44. <title>Скрипт генерации ключевых слов</title>
    45. </head>
    46. <body>
    47. <form action="?mod=getkw" method="post">
    48. <textarea style="width: 50%; height: 300px;" name="body"></textarea>
    49. <br>
    50. <input type="submit" value="Сгенерировать">
    51. </form>
    52. </body>
    53. </html>
    54.  
    55. <?php } ?>
    Насколько криво такое вот решение проблемы? Также осталась нерешенная проблема удаления слов-паразитов, т.е. союзов, местоимений и т.д. - как оно реализовать? Также буду рад различным ссылкам по этой теме, а лучше на конкретные реализации!
     
  2. dark-demon

    dark-demon Активный пользователь

    С нами с:
    16 фев 2007
    Сообщения:
    1.920
    Симпатии:
    1
    Адрес:
    леноград
    preg_replace у тебя преобразуется в два слова, а не в одно.
    аналогично с C#.NET

    array_count_values()