while($v = current(词库数组))
{
while($v_h = current(要搜索的文本数组))
{
/* if(strpos($v_h,$v))
{
}*/
next($this->html_array);
}
reset($this->html_array);
next($this->word);
}我的词库有四万多个词吧,文本只有八个每个有三四百字吧我如果不要注视的部分只要三秒,如果要就的要十三秒,请问谁知道有什么方法可以提高这个速度吗?谢谢了
{
while($v_h = current(要搜索的文本数组))
{
/* if(strpos($v_h,$v))
{
}*/
next($this->html_array);
}
reset($this->html_array);
next($this->word);
}我的词库有四万多个词吧,文本只有八个每个有三四百字吧我如果不要注视的部分只要三秒,如果要就的要十三秒,请问谁知道有什么方法可以提高这个速度吗?谢谢了
解决方案 »
- 我疯了
- php(doc文档下载)
- 求助not returning a complete set of HTTP headers
- Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in D:\php\study\select.php on line 14
- 怎么让它自动找到浏览路径?
- 这是什么?
- 大家看看做一个完整的这样的网站:http://www.qxzw.com
- PHP在win平台下面的session问题?!(急救)
- PHP做的下载程序的问题
- 在客户端,用javascript能够得到上传文件的文件名吗?
- 客户端备份数据到csv文件
- 在浏览器中预览PHP问题
不知道你IF 里执行的什么,
如果是替换
PHP 可以直接 用preg_replace如果是mysql 可以直接
update + 触发器
array(
char1-1: array(char2-1: array(),char2-2: array()),
char1-2: array(),
);
遍历词库,选取第一个字母(如果包括中文,请使用mbstring并正确设置mb_internal_encoding确保无误)作为关键字,并创建二级数组。
二级数组同样选取第二个字母作为关键字,字符串全文作为值。其后遍历文本数组,对每个文本查找词库数组的第一个字母,如果没查到则继续下一个。
查到则取查找到的位置的下一个字母,并据此选择词库数组中的关键字列表进行匹配(substr)。 无法匹配则继续查找文本内的下一个该字母。
这里有一个变种方案可以避免检查一些当字串里包含多个特定的前缀字母时的性能损失:查找到,则以该位置开始,strpos查找其下2层所有关键字。这样也就没有需要继续查本文本内下一个该字母的必要了。该算法是否有效取决于文本内的前缀字符分布密度,糟糕的情况下也许比之前的方案还要慢些。
更好的做法当然是根据词库对文本进行分词,分词过程中就能知道一个词是否存在于词库中了。当然,算法也更复杂了。