首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用PHP在正文中查找3-8个单词的常用短语

使用PHP在正文中查找3-8个单词的常用短语
EN

Stack Overflow用户
提问于 2011-01-26 12:37:27
回答 6查看 4.2K关注 0票数 4

我正在寻找一种使用PHP在正文中找到常见短语的方法。如果在php中不能做到这一点,我会对其他web语言感兴趣,这些语言可以帮助我完成这项工作。

内存或速度不是问题。

现在,我可以很容易地找到关键字,但不知道如何搜索短语。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2011-01-26 14:51:03

我已经写了一个PHP脚本来做这件事,right here.它首先将源文本分成一个单词数组和它们的出现次数。然后,它使用指定的参数对这些单词的常见序列进行计数。这是旧代码,没有注释,但也许您会发现它很有用。

票数 4
EN

Stack Overflow用户

发布于 2011-01-26 14:36:01

只使用PHP?我能想到的最直截了当的是:

  • 将每个短语添加到数组中
  • 从数组中获取第一个短语并将其删除
  • 查找匹配的短语数并删除它们,保留匹配的短语计数
  • 将短语和匹配的数量推送到新数组
  • 重复,直到初始数组为空

我不喜欢正式的CS,但我相信这是n^2的复杂性,特别是在最坏的情况下涉及n(n-1)/2比较。我毫不怀疑有更好的方法来做到这一点,但您提到效率不是问题,所以这就行了。

代码如下(我使用了一个新函数,接受搜索参数的array_keys ):

代码语言:javascript
复制
// assign the source text to $text
$text = file_get_contents('mytext.txt');

// there are other ways to do this, like preg_match_all,
// but this is computationally the simplest
$phrases = explode('.', $text);

// filter the phrases
// if you're in PHP5, you can use a foreach loop here
$num_phrases = count($phrases);
for($i = 0; $i < $num_phrases; $i++) {
  $phrases[$i] = trim($phrases[$i]);
}

$counts = array();

while(count($phrases) > 0) {
  $p = array_shift($phrases);
  $keys = array_keys($phrases, $p);
  $c = count($keys);
  $counts[$p] = $c + 1;

  if($c > 0) {
    foreach($keys as $key) {
      unset($phrases[$key]);
    }
  }
}

print_r($counts);

在行动中查看它:http://ideone.com/htDSC

票数 1
EN

Stack Overflow用户

发布于 2011-01-26 15:04:48

我觉得你应该去

str_word_count

代码语言:javascript
复制
$str = "Hello friend, you're
       looking          good today!";

print_r(str_word_count($str, 1));

将会给予

代码语言:javascript
复制
Array
(
    [0] => Hello
    [1] => friend
    [2] => you're
    [3] => looking
    [4] => good
    [5] => today
)

然后,您可以使用array_count_values()

代码语言:javascript
复制
$array = array(1, "hello", 1, "world", "hello");
print_r(array_count_values($array));

这将会给你

代码语言:javascript
复制
Array
(
    [1] => 2
    [hello] => 2
    [world] => 1
)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4801449

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档