我正在从不同的网站创建关键字,并将它们保存在bd中。
在$ webhtml中,我有一个用DOM下载的网站。问题是当你启动提取器时,无限加载。并且永远不会在数据库中保存任何内容。
出现错误的代码如下:
if (empty($keywords)){
$ekeywords = new KeyPer;
$keywords = $ekeywords->Keys($webhtml);
}
我用一个函数存储了$ keywords: saveweb($ url,$ description,$ keywords);
我使用下一个包括:
include("Extkeys.php");
“Extkeys”的代码:
<?php
class Extkeys {
function Keys($webhtml) {
$webhtml = $this->clean($webhtml);
$blacklist='de,la,los,las,el,ella,nosotros,yo,tu,el,te,mi,del,ellos';
$sticklist='test';
$minlength = 3;
$count = 17;
$webhtml = preg_replace('/[\.;:|\'|\"|\`|\,|\(|\)|\-]/', ' ', $webhtml);
$webhtml = preg_replace('/¡/', '', $webhtml);
$webhtml = preg_replace('/¿/', '', $webhtml);
$keysArray = explode(" ", $webhtml);
$keysArray = array_count_values(array_map('strtolower', $keysArray));
$blackArray = explode(",", $blacklist);
foreach($blackArray as $blackWord){
if(isset($keysArray[trim($blackWord)]))
unset($keysArray[trim($blackWord)]);
}
arsort($keysArray);
$i = 1;
$keywords = "";
foreach($keysArray as $word => $instances){
if($i > $count) break;
if(istrlen(trim($word)) >= $minlength && is_string($word)) {
$keywords .= $word . ", ";
$i++;
}
}
$keywords = rtrim($keywords, ", ");
return $keywords=$sticklist.''.$keywords;
}
function clean($webhtml) {
$regex = '/(([_A-Za-z0-9-]+)(\\.[_A-Za-z0-9-]+)*@([A-Za-z0-9-]+)(\\.[A-Za-z0-9-]+)*)/iex';
$desc = preg_replace($regex, '', $webhtml);
$webhtml = preg_replace( "''si", '', $webhtml );
$webhtml = preg_replace( '/]*>([^<]+)<\/a>/is', '\2 (\1)', $webhtml );
$webhtml = preg_replace( '//', '', $webhtml );
$webhtml = preg_replace( '/{.+?}/', '', $webhtml );
$webhtml = preg_replace( '/ /', ' ', $webhtml );
$webhtml = preg_replace( '/&/', ' ', $webhtml );
$webhtml = preg_replace( '/"/', ' ', $webhtml );
$webhtml = strip_tags( $webhtml );
$webhtml = htmlspecialchars($webhtml);
$webhtml = str_replace(array("\r\n", "\r", "\n", "\t"), " ", $webhtml);
while (strchr($webhtml," ")) {
$webhtml = str_replace(" ", " ",$webhtml);
}
for ($cnt = 1;
$cnt < strlen($webhtml)-1; $cnt++) {
if (($webhtml{$cnt} == '.') || ($webhtml{$cnt} == ',')) {
if ($webhtml{$cnt+1} != ' ') {
$webhtml = substr_replace($webhtml, ' ', $cnt + 1, 0);
}
}
}
return $webhtml;
}
}
?>
如何避免代码的无限负载,并使其正常运行?
祝你好运!
答案 0 :(得分:2)
在你的代码中,你用空格替换空间,
while (strchr($webhtml," ")) {
$webhtml = str_replace(" ", " ",$webhtml);
}
它应该像
while (strchr($webhtml," ")) {
$webhtml = str_replace(" ", "",$webhtml);
}
答案 1 :(得分:0)
老兄,我知道你要做什么。您需要 lynx 或链接才能将某些网页转储到文件(文本文件)。你将跳过关于删除标签等的所有内容,因为lynx和链接都是基于文本的Web浏览器(通常从linux中的命令行开始),它们只显示页面上的文本而不是其他内容。
你的关键词功能也不好。您需要 tf-idf 。 More about tf-idf here
使用tf-idf,您可以从网页中提取真实的关键字(这就是谷歌关键字的制作方式)。 Tf-idf用于提取真实文本含义,提取最能描述页面或文档的关键字。
在那个链接上我告诉你你有计算tf-idf的公式。