有一组非日常的英文词汇,我需要计算在英文文章中出现频次最多的。
于是我最初想到遍历数组,用 substr_count 依次计算每个词汇出现的次数,但这样就会造成对整篇文章多次重复的扫描。或者将文章也拆分成词汇,从中用数组函数计算交集数量,但依然觉得不理想。各位有什么想法吗?这个应用其实也就是关键词提取。
于是我最初想到遍历数组,用 substr_count 依次计算每个词汇出现的次数,但这样就会造成对整篇文章多次重复的扫描。或者将文章也拆分成词汇,从中用数组函数计算交集数量,但依然觉得不理想。各位有什么想法吗?这个应用其实也就是关键词提取。
其实不太明白你的需求,纯粹统计 array_count_values 足够方便了
如果是的,那么可以使用 trie 算法(我发过的)
只需扫描文章一遍就可以了,当然要先构造词库
词库保存为什么格式比较好?mysql,json,xml,纯数组?如果一篇文章有5kb,词库有1000个单词,那么把这1000个单词逐个foreach,匹配这篇文章,mysql_query,
json_decode()
simplexml_load_file()
数组哪个效率更高,更节省资源(CPU,RAM)?
然后提取次数一定的部分(次数太少没匹配意义吧?),那剩下就很少了,再与现存词库求交集就足够了
function b() {
$t = array_pop($this->buffer);
$this->buffer[] = "<b>$t</b>";
}
}
$p = new wordkey;
$p->set('秦始皇', 'b');
$p->set('洛阳', 'b');
$t = $p->match('秦始皇东巡洛阳');
echo join('', $t);
<b>秦始皇</b>东巡<b>洛阳</b>