搜索模式频率

时间:2011-12-06 16:54:40

标签: php frequency phrase

最好是PHP解决方案 - 但任何想法都会很棒。

提供文字blob

'这是我想要找到红色毛衣和紫色大象的一些内容的超级字符串。紫色的大象会数两次。自从红色毛衣出现三次以来,红色毛衣将被计数3次

和短语列表

“红色毛衣,紫色大象”

想要搜索文本blob并返回出现次数

因此

红色毛衣= 3 和紫色大象= 2

3 个答案:

答案 0 :(得分:4)

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));
}

答案 1 :(得分:2)

您可以使用substr_count来搜索文本中的字符串。请注意,在您的示例中,如果文字是“褐色毛衣”,则会为“红色毛衣”计算+1。

您也可以使用regular expressions。像preg_match("/$string/",$text);这样的东西。这将返回找到字符串的时间。

此外,如果您要搜索由逗号分隔的多个字符串(例如您的示例),则首先需要拆分字符串。您可以使用explode$strings = explode(",",$search);

答案 2 :(得分:1)

这样的事情应该有效:

<?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()在上面的代码中的所有内容)。这可以很容易地删除,以便上面的代码也区分大小写。