fork download
  1. <?php
  2. //Топ 3 самых часто встречающихся слов и словосочетаний в тексте(из 2-3-х слов)
  3.  
  4. $stopWords = array('и', 'у', 'к', 'с', 'о', 'от', 'в', 'же', 'из', 'на', '.', ',');
  5. $input = 'Эта функция сортирует массив в обратном порядке таким образом, что
  6. сохраняются отношения между ключами и значениями. Сохраняются отношения и
  7. сохраняются отношения и еще сохраняются отношения и опять сохраняются отношения.';
  8.  
  9. //Удаляем лишнее и разбиваем текст на слова
  10. $input = mb_strtolower($input);
  11. $input = preg_replace('/[\\r\\n]/', ' ', $input);
  12. $input = preg_replace('/[.,]/', ' $0', $input);
  13. $words = preg_split('/ /', $input, 0, PREG_SPLIT_NO_EMPTY);
  14.  
  15. foreach ($words as $key => $word) {
  16. //Прерываем цикл на последнем слове.
  17. if ($key == (count($words) - 1)) {
  18. break;
  19. }
  20. //Если текущее слово из списка стоп слов переходим к следуещему
  21. if (array_search($word, $stopWords) !== false) {
  22. continue;
  23. }
  24. $nextKey = $key + 1;
  25. //Если следующее слово из стоп слов переходим к следующему слову(по хорошему тут надо перескакивать через 1
  26. //но я хз как)
  27. if (array_search($words[$nextKey], $stopWords) !== false) {
  28. continue;
  29. }
  30. //Если же текущее и следующее слово в порядке составляем словосочетание из 2-х слов
  31. $twoWords[] = $word . ' ' . $words[$nextKey];
  32. //Так же проверяем предыдущее слово, если оно существует и не находится в стоп списке
  33. //делаем словосочетание из 3-х слов
  34. $prevKey = $key - 1;
  35. if ($prevKey < 0) {
  36. continue;
  37. } elseif (array_search($words[$prevKey], $stopWords) !== false) {
  38. continue;
  39. }
  40. $threeWords[] = $words[$prevKey] . ' ' . $word . ' ' . $words[$nextKey];
  41. }
  42.  
  43. //Удаляем из массива со словами все что есть в стоп списке
  44. foreach ($words as $key => $word) {
  45. if (array_search($word, $stopWords) !== false) {
  46. unset($words[$key]);
  47. }
  48. }
  49.  
  50. print_r($words);
  51. print_r($twoWords);
  52. print_r($threeWords);
Success #stdin #stdout 0.01s 20568KB
stdin
Standard input is empty
stdout
Array
(
    [0] => эта
    [1] => функция
    [2] => сортирует
    [3] => массив
    [5] => обратном
    [6] => порядке
    [7] => таким
    [8] => образом
    [10] => что
    [11] => сохраняются
    [12] => отношения
    [13] => между
    [14] => ключами
    [16] => значениями
    [18] => сохраняются
    [19] => отношения
    [21] => сохраняются
    [22] => отношения
    [24] => еще
    [25] => сохраняются
    [26] => отношения
    [28] => опять
    [29] => сохраняются
    [30] => отношения
)
Array
(
    [0] => эта функция
    [1] => функция сортирует
    [2] => сортирует массив
    [3] => обратном порядке
    [4] => порядке таким
    [5] => таким образом
    [6] => что сохраняются
    [7] => сохраняются отношения
    [8] => отношения между
    [9] => между ключами
    [10] => сохраняются отношения
    [11] => сохраняются отношения
    [12] => еще сохраняются
    [13] => сохраняются отношения
    [14] => опять сохраняются
    [15] => сохраняются отношения
)
Array
(
    [0] => эта функция сортирует
    [1] => функция сортирует массив
    [2] => обратном порядке таким
    [3] => порядке таким образом
    [4] => что сохраняются отношения
    [5] => сохраняются отношения между
    [6] => отношения между ключами
    [7] => еще сохраняются отношения
    [8] => опять сохраняются отношения
)