有一组非日常的英文词汇,我需要计算在英文文章中出现频次最多的。
于是我最初想到遍历数组,用 substr_count 依次计算每个词汇出现的次数,但这样就会造成对整篇文章多次重复的扫描。或者将文章也拆分成词汇,从中用数组函数计算交集数量,但依然觉得不理想。各位有什么想法吗?这个应用其实也就是关键词提取。
于是我最初想到遍历数组,用 substr_count 依次计算每个词汇出现的次数,但这样就会造成对整篇文章多次重复的扫描。或者将文章也拆分成词汇,从中用数组函数计算交集数量,但依然觉得不理想。各位有什么想法吗?这个应用其实也就是关键词提取。
解决方案 »
- 求助关于PHP批量移动图片文件的方法
- PHP如何求次方根
- 如何把文件连里边的文件和目录一起复制到另一位置?
- brandhb.com 品牌回报网招聘php工程师
- php访问ftp服务器的问题,高手请进
- 请问怎么将username=%E5%8F%8D%E5%8F%8D%E5%A4%8D%E6%B3%95ddddff解码成UTF-8
- 怎么用PHPLIB做二层循环?(附我的代码,有错误)
- 请教一下Discuz!论坛的分页方法,它的很快呀
- 使用mysql_connect登录数据库时,能否直接使用加密过的密码进行认证(例如md5),而不使用明文方式
- 高手与有相关实际经验者请进:下载系统~~ ^_^
- 找不到php.ini
- PHP分页类添加查询条件
其实不太明白你的需求,纯粹统计 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>