我要实现的是一个非常简单的php程序“获取搜索结果(如标题和简短描述中所示),将它们集群到有意义的命名组中”。
经过数小时的谷歌搜索和无数次的搜索(总是能得到有趣的结果,尽管没有什么真正有用的结果),我仍然找不到任何可以帮助我处理集群的php库。
有没有这么一个php库,我可能已经错过了?
如果没有,是否有处理集群的自由/开源软件,并且有一个像样的api?
最佳答案
这样地:
使用一个停止词列表,获取所有不在停止词中的词或短语,计算每个词或短语的出现次数,按降序排序。
停止词必须是所有常用英语词汇的列表。它还应该包括标点符号,您需要预先将所有标点符号替换为一个单独的单词,例如“某物,像这样。”—>“某物,像这样”。或者,您可以删除所有标点符号。
$content=preg_replace('/[^a-z\s]/', '', $content); // remove punctuation
$stopwords='the|and|is|your|me|for|where|etc...';
$stopwords=explode('|',$stopwords);
$stopwords=array_flip($stopwords);
$result=array(); $temp=array();
foreach ($content as $s)
if (isset($stopwords[$s]) OR strlen($s)<3)
{
if (sizeof($temp)>0)
{
$result[]=implode(' ',$temp);
$temp=array();
}
} else $temp[]=$s;
if (sizeof($temp)>0) $result[]=implode(' ',$temp);
$phrases=array_count_values($result);
arsort($phrases);
现在,根据输入数据中出现的项的频率,有了一个关联数组。
您希望如何进行匹配取决于您,而且很大程度上取决于输入数据中字符串的长度。
我将查看前3个数组键中是否有一个与数据中任何其他数组键中的前3个匹配。这就是你们的小组。
如果你有任何问题,请告诉我。