PHP替换我的文件中的常用单词

时间:2014-03-31 08:08:37

标签: php arrays

我尝试制作一个用于输入网站的工具,当您点击提交按钮时,它会覆盖所有文本。

在完成所有cURLing之后,将其从标签中剥离,并对单词进行计数。它最终是一个名为$frequency的数组。如果我使用<pre>标签回复它,它会告诉我一切都很好! (注意:我将内容放在一个文件$homepage = file_get_contents($file);中,这就是我在代码中使用的内容,我不知道这是否重要)

但是我真的不在乎在网站上看到or这个词200次,我只想要重要的词。所以我用所有常用词组成了一个数组。最终在$common_words变量中设置了哪个。但我似乎无法找到替换$frequency中找到的所有字词的方法,如果在""中找到它们,则将其替换为$common_words

经过一番研究后我发现了这段代码:

$string = 'sand band or nor and where whereabouts foo';
$wordlist = array("or", "and", "where");

foreach ($wordlist as &$word) {
    $word = '/\b' . preg_quote($word, '/') . '\b/';
}

$string = preg_replace($wordlist, '', $string);
var_dump($string);

如果我复制粘贴它,它可以正常工作,从字符串中删除or, and, where。 但是,将$string替换为$frequency或将$wordlist替换为$common_words,将无法正常工作或向我发出如下错误:Delimiter must not be alphanumeric or backslash

如果没有,我希望我能正确地提出我的问题。请告诉我!

提前致谢

编辑:好吧,我已经把问题缩小了很多。首先,我忘记了&

中的foreach ($wordlist as &$word) {

但是因为它正在计算所有的单词,它所取代的单词仍然被计算在内。看到这两个截图,看看我的意思:http://imgur.com/oqqZR3h,xHEZKRz#0

3 个答案:

答案 0 :(得分:1)

如果我理解正确的话,你不会通过忽略所谓的常用词来了解每个词的出现次数。

假设$url是您将要运行的页面而$common_words是您的常用字数组,您可以执行以下操作:

// Get the page content's and strip the html tags
$contents = strip_tags( file_get_contents($url) );

// This will split the words from the contents, creating an array with each word in it
preg_match_all("/([\w]+[']?[\w]*)\W/", $contents, $words);

$common_words = array('or', 'and', 'I', 'where');

$frequency = array();

// Count occurrences
$frequency = array_count_values($words[0]);
unset($words); // Release all that memory

var_dump($frequency);

此时,您将拥有一个关联数组,每个非常用词,以及一个显示给定单词出现次数的计数。

<强>更新

关于RegEx的更多信息。我们需要匹配单词。最简单的方法是:(\w+)。但是,它不匹配I'vehaven't等字词(注意')。这是我让它变得更复杂的观点。此外,\w不支持6-year-old中的字词短划线。

所以我创建了一个子组,它应匹配单词字符,包括单词中的虚线和单引号。

(?:\w'|\w|-)

开头的?:部分是do not matchdo not include in the results。这是因为我所做的就是将单词内容的选项分组。为了整个单词,RegEx将匹配上面一个或多个子组:

((?:\w'\w|\w|-)+)

所以RegEx preg_match_all()行应该是:

preg_match_all("/((?:\w'\w|\w|-)+)/", $contents, $words);

希望这有帮助。

答案 1 :(得分:0)

我用$ mywordlist更改了$ wordlist。还在努力!

<?php
$string = 'sand band or nor and where whereabouts foo';
$wordlist = array("or", "and", "where");
$mywordlist=array("sand","band");
foreach ($mywordlist as &$word) {
    $word = '/\b' . preg_quote($word, '/') . '\b/';
}

$string = preg_replace($mywordlist, '', $string);
var_dump($string);
?>

答案 2 :(得分:0)

我想你可以这样做:

$common_words = "foo baq etc etc";

$str = "foo bar baz"; // input

foreach (explode(" ", $common_words) as $word){
   $str = strtr($str, $word, "");
}