PHP中的关键字分析

Jer*_*oen 23 php analytics full-text-search pagerank keyword

对于我正在构建的Web应用程序,我需要分析一个网站,检索并排列它最重要的关键字并显示它们.

获取所有单词,密度和显示它们相对简单,但这会产生非常不正确的结果(例如,停用词排名非常高).

基本上,我的问题是:如何在PHP中创建关键字分析工具,从而使列表按字重要性正确排序?

Jer*_*oen 49

最近,我一直在努力解决这个问题,我会尽力解释我的所作所为.

脚步

  1. 过滤文字
  2. 分成单词
  3. 删除2个字符的单词和停用词
  4. 确定词频+密度
  5. 确定单词突出
  6. 确定单词容器
    1. 标题
    2. 元描述
    3. 网址
    4. 标题
    5. 元关键字
  7. 计算关键字值

1.过滤文字

你需要做的第一件事是过滤确保编码是正确的,所以转换为UTF-8:

iconv ($encoding, "utf-8", $file); // where $encoding is the current encoding
Run Code Online (Sandbox Code Playgroud)

之后,您需要删除所有html标签,标点符号,符号和数字.在Google上查找有关如何执行此操作的功能!

2.分成单词

$words = mb_split( ' +', $text );
Run Code Online (Sandbox Code Playgroud)

3.删除2个字符的单词和停用词

任何由1或2个字符组成的单词都没有任何意义,因此我们删除所有单词.

要删除停用词,我们首先需要检测语言.我们可以通过以下两种方式执行此操作: - 检查Content-Language HTTP标头 - 检查lang =""或xml:lang =""属性 - 检查语言和内容 - 语言元数据标签如果没有设置,您可以使用AlchemyAPI之类的外部API .

您需要一种每种语言的停用词列表,可以在网上轻松找到.我一直在使用这个:http://www.ranks.nl/resources/stopwords.html

4.确定词频+密度

要计算每个单词的出现次数,请使用:

$uniqueWords = array_unique ($keywords); // $keywords is the $words array after being filtered as mentioned in step 3
$uniqueWordCounts = array_count_values ( $words );
Run Code Online (Sandbox Code Playgroud)

现在遍历$ uniqueWords数组并计算每个单词的密度,如下所示:

$density = $frequency / count ($words) * 100;
Run Code Online (Sandbox Code Playgroud)

5.确定词的突出性

突出词一词由文本中词语的位置定义.例如,第一句中的第二个单词可能比第83个单词中的第6个单词更重要.

要计算它,请在上一步的同一循环中添加此代码:'

$keys = array_keys ($words, $word); // $word is the word we're currently at in the loop
$positionSum = array_sum ($keys) + count ($keys);
$prominence = (count ($words) - (($positionSum - 1) / count ($keys))) * (100 /   count ($words));
Run Code Online (Sandbox Code Playgroud)

6.确定单词容器

一个非常重要的部分是确定单词所在的位置 - 标题,描述等.

首先,你需要使用像DOMDocument或PHPQuery之类的东西来获取标题,所有元数据标签和所有标题(不要尝试使用正则表达式!)然后你需要在同一个循环中检查它们是否包含单词.

7.计算关键字值

最后一步是计算关键字值.要做到这一点,你需要权衡每个因素 - 密度,突出和容器.例如:

$value = (double) ((1 + $density) * ($prominence / 10)) * (1 + (0.5 * count ($containers)));
Run Code Online (Sandbox Code Playgroud)

这个计算远非完美,但它应该给你不错的结果.

结论

我没有提到我在工具中使用的每一个细节,但我希望它能提供关键词分析的良好视角.

NB是的,这是受到今天关于回答你自己问题的博客文章的启发!