Частота поиска

Желательно PHP решения - но любые идеи будут отличными.

Дать текстовый блоб

"Это супер строка некоторого содержания, где я хочу найти красные свитера и фиолетовых слонов. Фиолетовые слоны будут считать дважды. и красные свитера будут считать 3 раза, так как красные свитера встречаются три раза "

и список фраз

'красные свитера, фиолетовые слоны'

хочу найти текстовый блоб и вернуть количество вхождений

следовательно

красные свитера = 3 и фиолетовые слоны = 2

3 ответа

Решение

http://www.php.net/manual/en/function.substr-count.php

$string = 'This is a super string of some content whree I want to find red sweaters and purple elephants. The purple elephants will count twice. and the red sweaters will count 3 times since red sweaters occurs three times';

$keys = 'red sweaters, purple elephants';

$pkeys = explode(', ', $keys);
foreach($pkeys as $key)
{
    printf("%s occourrences: %d\n", $key, substr_count($string, $key));
}

Вы можете использовать substr_count, который будет искать строки внутри текста. Просто обратите внимание, что в вашем примере, если текст был "коричневые свитера", это будет означать +1 для "красных свитеров".

Вы также можете использовать регулярные выражения. Что-то вроде preg_match("/$string/",$text);, Это вернет время, когда строка была найдена.

Также, если вы хотите найти несколько строк, разделенных запятой (как в вашем примере), вам сначала нужно разделить строку. Вы можете использовать взорваться для этого. $strings = explode(",",$search);

Примерно так должно работать:

<?php
  $string = strtolower('This is a super string of some content whree I want to find red sweaters and purple elephants. The purple elephants will count twice. and the red sweaters will count 3 times since red sweaters occurs three times');

  $allprases = 'red sweaters, purple elephants'

  $phrasearray = explode(',',$allphrases);

  foreach ($phrasearray as $k => $phrase) {
    $phrase = strtolower(trim($phrase));
    echo 'String '.$phrase.' found '.substr_count($string,$phrase).' times.<br />';
  }
?>

Обратите внимание, что substr_count чувствителен к регистру (вот почему я strtolower() все в приведенном выше коде). Это может быть легко удалено, так что код выше также чувствителен к регистру.

Другие вопросы по тегам