使用php提取搜索引擎优化的关键字对

使用php提取搜索引擎优化的关键字对,php,regex,seo,title,keyword,Php,Regex,Seo,Title,Keyword,我目前正在调查一些关于长尾搜索引擎优化的新想法。我有一个网站,人们可以创建自己的博客,这已经带来了相当好的长尾流量。我已经在文章的标题标签中显示了文章标题 但是,标题通常与内容中的关键字不匹配,我想在标题中添加一些php实际确定的关键字可能是最好的 我试着用我自己制作的脚本来找出页面上最常见的单词。这很管用,但问题是它会产生一些无用的词 我突然想到,有用的方法是制作一个php脚本,提取频繁出现的单词对(或3个单词集),然后将它们放入一个数组中,按照它们出现的频率排序 我的问题:如何以更动态的方式

我目前正在调查一些关于长尾搜索引擎优化的新想法。我有一个网站,人们可以创建自己的博客,这已经带来了相当好的长尾流量。我已经在文章的标题标签中显示了文章标题

但是,标题通常与内容中的关键字不匹配,我想在标题中添加一些php实际确定的关键字可能是最好的

我试着用我自己制作的脚本来找出页面上最常见的单词。这很管用,但问题是它会产生一些无用的词

我突然想到,有用的方法是制作一个php脚本,提取频繁出现的单词对(或3个单词集),然后将它们放入一个数组中,按照它们出现的频率排序

我的问题:如何以更动态的方式解析文本,以查找重复出现的单词对或单词三元组。我该怎么办

function extractCommonWords($string, $keywords){
  $stopWords = array('i','a','about','an','and','are','as','at','be','by','com','de','en','for','from','how','in','is','it','la','of','on','or','that','the','this','to','was','what','when','where','who','will','with','und','the','www');

  $string = preg_replace('/\s\s+/i', '', $string); // replace whitespace
  $string = trim($string); // trim the string
  $string = preg_replace('/[^a-zA-Z0-9 -]/', '', $string); // only take alphanumerical characters, but keep the spaces and dashes too…
  $string = strtolower($string); // make it lowercase

  preg_match_all('/\b.*?\b/i', $string, $matchWords);
  $matchWords = $matchWords[0];

  foreach ( $matchWords as $key=>$item ) {
      if ( $item == '' || in_array(strtolower($item), $stopWords) || strlen($item) <= 3 ) {
          unset($matchWords[$key]);
      }
  }   
  $wordCountArr = array();
  if ( is_array($matchWords) ) {
      foreach ( $matchWords as $key => $val ) {
          $val = strtolower($val);
          if ( isset($wordCountArr[$val]) ) {
              $wordCountArr[$val]++;
          } else {
              $wordCountArr[$val] = 1;
          }
      }
  }
  arsort($wordCountArr);
  $wordCountArr = array_slice($wordCountArr, 0, $keywords);
  return $wordCountArr;
}
函数提取常用词($string,$keywords){
$stopWords=array('i','a','about','an','and','are','as','at','be','by','com','de','en','for','from','how','in','is','it','la','of','on','or','that','the','this','to','was','what','who','will','with','und the','www';
$string=preg_replace('/\s\s+/i','$string);//替换空白
$string=trim($string);//修剪字符串
$string=preg_replace('/[^a-zA-Z0-9-]/',''$string);//只接受字母数字字符,但也保留空格和破折号…
$string=strtolower($string);//使其小写
preg_match_all('/\b.*?\b/i',$string,$matchWords);
$matchWords=$matchWords[0];
foreach($key=>$item的匹配词){
如果($item==''| |在_数组中(strtolower($item),$stopWords)| | strlen($item)$val){
$val=strtolower($val);
如果(isset($wordCountArr[$val])){
$wordCountArr[$val]++;
}否则{
$wordCountArr[$val]=1;
}
}
}
arsort($wordCountArr);
$wordCountArr=array\u切片($wordCountArr,0,$keywords);
返回$wordCountArr;
}

为了包含一些代码,这里有另一个原语改编,返回给定长度和出现次数的多单词关键字,而不是去除所有常用单词,它只过滤那些位于关键字开头和结尾的单词。它仍然返回一些废话,但这确实是不可避免的

function getLongTailKeywords($str, $len = 3, $min = 2){ $keywords = array();
  $common = array('i','a','about','an','and','are','as','at','be','by','com','de','en','for','from','how','in','is','it','la','of','on','or','that','the','this','to','was','what','when','where','who','will','with','und','the','www');
  $str = preg_replace('/[^a-z0-9\s-]+/', '', strtolower(strip_tags($str)));
  $str = preg_split('/\s+-\s+|\s+/', $str, -1, PREG_SPLIT_NO_EMPTY);
  while(0<$len--) for($i=0;$i<count($str)-$len;$i++){ 
     $word = array_slice($str, $i, $len+1);
    if(in_array($word[0], $common)||in_array(end($word), $common)) continue;
    $word = implode(' ', $word);
    if(!isset($keywords[$len][$word])) $keywords[$len][$word] = 0;
    $keywords[$len][$word]++;
  }
  $return = array();
  foreach($keywords as &$keyword){
    $keyword = array_filter($keyword, function($v) use($min){ return !!($v>$min); });
    arsort($keyword);
    $return = array_merge($return, $keyword);
  }
  return $return;
}
函数getLongTailKeywords($str,$len=3,$min=2){$keywords=array(); $common=array('i','a','about','an','and','are','as','at','be','by','com','de','en','for','from','how','in','is','it','la','of','on','or','that','this','to','was','what','who','will','with','und the','www'); $str=preg_replace('/[^a-z0-9\s-]+/','',strtolower(带标签($str)); $str=preg_split('/\s+-\s+\s+/',$str,-1,preg_split_NO_EMPTY);
while(0)你能提供更多的细节和一些代码(如果你有)来说明你尝试了什么,你的问题到底是什么?你对正则表达式有多熟悉/熟悉?我得试一试!谢谢!@AmyNeville它仍然很有趣-确实让你对“common”数组更感兴趣尝试获得更有意义的结果。:)-甚至可能根据文章的长度调整参数
$len
$min
?这正是我需要的,谢谢!