我尝试制作一个用于输入网站的工具,当您点击提交按钮时,它会覆盖所有文本。
在完成所有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
答案 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've
或haven't
等字词(注意'
)。这是我让它变得更复杂的观点。此外,\w
不支持6-year-old
中的字词短划线。
所以我创建了一个子组,它应匹配单词字符,包括单词中的虚线和单引号。
(?:\w'|\w|-)
开头的?:
部分是do not match
或do 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, "");
}