За последние 24 часа нас посетили 16602 программиста и 1681 робот. Сейчас ищут 903 программиста ...

Подсчет повторяющихся слов

Тема в разделе "PHP для новичков", создана пользователем New_neo, 17 ноя 2015.

  1. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    New_neo мой код смотрел? Правильно ли я задачу понял?
     
  2. New_neo

    New_neo Новичок

    С нами с:
    15 ноя 2015
    Сообщения:
    77
    Симпатии:
    3
    Да смотрел, задача заключалась посчитать парные слова, и вывести топ 10 самых частых. Задача решена:
    Код (PHP):
    1. function rec($text) {
    2.     $stemmer = new Lingua_Stem_Ru();
    3.         $text = preg_replace('/[ ]([\S]{1,2}|[\S]{21,})[ ]/',' ', $text);
    4.     $text = preg_replace('/[^\p{L}0-9 ]/iu',' ', $text);
    5.         $text = preg_replace('#\s*?\r?\n\s*?(?=\r\n|\n)#s', "", $text);
    6.         while ( strpos($text,'  ')!==false )
    7.  {
    8.    $text = str_replace('  ',' ',$text);
    9.  }; 
    10.         $ex = explode(' ', $text);
    11.     $str_count = array();
    12.     for ($i = 0; $i < count($ex); $i++) {
    13.         $str_count[$ex[$i]]['count'] = 0;
    14.         for ($j = 0; $j < count($ex); $j++) {
    15.             if ($ex[$i] == $ex[$j]) {
    16.                 $str_count[$ex[$i]]['count'] ++;
    17.             }
    18.         }
    19.     }
    20.     arsort($str_count); //сортируем
    21.     // по совету Ganzal срезаем массив
    22.     //оставляем нужное количество
    23.     $str_count = array_slice($str_count, 0, 10); 
    24.     //return $str_count; //возвращаем результат
    25.         echo "<div align='center'><table border='1' colspan='2'><caption><b>Топ 10 слов :</b></caption>
    26.                     <tr><td align='center'><b>Слово</b></td>
    27.                     <td align='center' ><b>Кол-во:</b></td></tr><tr>";
    28.         foreach ($str_count as $key=>$value) {
    29.     echo "<td>".$stemmer->stem_word($key)."</td><td>".$value['count']."</td></tr>";
    30. }
    31. echo "</table></div></body></html>";
    32. }
    33. rec($text);
    34. }  
    Алгоритм такой:1- сначала считаем повторяющее слова, 2-сортируем массив по ключу, 3-затем выводим последние 10 элементов массива.
     
  3. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    New_neo, хоть мое решение было не из лучших, но там было полное решение твоей задачи. Нафиг ты прилепил к нему код сверху?) и вообще, лучше если функция возвращает данные, а с этими данными потом делай что хочешь. Ну к примеру передай функции которая будет выводить таблицу с форматированием.
     
  4. New_neo

    New_neo Новичок

    С нами с:
    15 ноя 2015
    Сообщения:
    77
    Симпатии:
    3
    Не совсем тебя я понял?! Чего я там не правильно сделал? На экране я проверял результат тот что надо. Принимаю все замечания. Я ведь только учусь. А как говорят -на ошибках учатся, я не против.
     
  5. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    делаешь двойную работу.
    Код (PHP):
    1.    $stemmer = new Lingua_Stem_Ru();
    2.         $text = preg_replace('/[ ]([\S]{1,2}|[\S]{21,})[ ]/',' ', $text);
    3.     $text = preg_replace('/[^\p{L}0-9 ]/iu',' ', $text);
    4.         $text = preg_replace('#\s*?\r?\n\s*?(?=\r\n|\n)#s', "", $text);
    5.         while ( strpos($text,'  ')!==false )
    6.  {
    7.    $text = str_replace('  ',' ',$text);
    8.  }; 
    9.  
    код выше там вообще не нужен, подсчет количества слов там уже считается, тебе оставалось просто использовать результат.
     
  6. New_neo

    New_neo Новичок

    С нами с:
    15 ноя 2015
    Сообщения:
    77
    Симпатии:
    3
    Тут я просто подключаю библиотеку для нормализованных слов, удаляю пробелы и знаки препинания
     
  7. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Что значит парных?

    Такой результат не верный?
    Код (PHP):
    1. // This is a test is do do do do kk kk ddd ddd ttt ttt ppp ppp
    2.   'do' => 4,
    3.   'kk' => 2,
    4.   'is' => 2,
    5.   'ttt' => 2,
    6.   'ppp' => 2,
    7.   'ddd' => 2,
    8.   'This' => 1,
    9.   'a' => 1,
    10.   'test' => 1,
    11. ) 
     
  8. New_neo

    New_neo Новичок

    С нами с:
    15 ноя 2015
    Сообщения:
    77
    Симпатии:
    3
    Ответ верный, только подсчет должен быть русских слов + союзы и предлоги не считать.