+ -
当前位置:首页 → 问答吧 → 求一个关键字匹配的快速算法!!谢谢!在线等!

求一个关键字匹配的快速算法!!谢谢!在线等!

时间:2011-12-12

来源:互联网

我有一张关键字表:tblKeywords(字段 fldKeyword <varchar>),一共有100-200万条记录。
同时我每天要处理10000封email,要对每一封email做关键字匹配,凡是email的Body中存在tblKeywords表中任意一条fldKeyword记录的字符串值,就算匹配成功,否则不成功。

我要做个程序实现上面功能。
我想到的算法是:
1.把关键字表tblKeywords所有记录读到内存变量datatable中
2.对每一封email,遍历内存变量datatable,对当前fldKeyword的字符串值,搜索email的Body,如果有此Keyword,成功,跳出;如果没有此Keyword,继续匹配下一个fldKeyword记录,直到匹配到或匹配完退出。

但是这个算法貌似很费时间,2个循环嵌套,最大可能须比较100-200万 * 10000 = 100亿次。

请教高手有没有更快速的算法?
谢谢!
在线等!

作者: jamex   发布时间: 2011-12-12

没有更快速滴,只有一个最常用的“贝叶斯算法”

实际上国际上垃圾邮件检测这块90%以上的成熟应用都是使用的“贝叶斯算法”(或改进的“贝叶斯算法”

作者: wanghui0380   发布时间: 2011-12-12

请问,贝叶斯算法是如何做的?谢谢!

作者: jamex   发布时间: 2011-12-12

想不到什么好的办法,好像只有嵌套循环去做,不过你也不可能那么背,每次匹配都值200万行的最后一个,100亿次是不可能的,如果想提高速度,可以多开几个线程去找,空间就占得多了

作者: ssp2009   发布时间: 2011-12-12

每天一万 不需要考虑性能,再慢也要不了几分钟。
100-200万,只是一次要做的事情,并不是每天都要扫的。

作者: yyz985   发布时间: 2011-12-12

引用 4 楼 yyz985 的回复:

每天一万 不需要考虑性能,再慢也要不了几分钟。
100-200万,只是一次要做的事情,并不是每天都要扫的。


我前几天自己测试了一下。一个while循环1秒钟做简单的3次判断, 可以循环300多万次吧,如果对于一100亿级别的数据100/0.03 = 30000秒,所以在我个人电脑上做简单的运算也要8,9个小时。。 

所以我向服务器也快不到那里去把

作者: yibey   发布时间: 2011-12-12

引用 2 楼 jamex 的回复:
请问,贝叶斯算法是如何做的?谢谢!

http://wenku.baidu.com/view/edb7b30879563c1ec5da710b.html

作者: jiangfling   发布时间: 2011-12-12

PLinq

作者: Sandy945   发布时间: 2011-12-12

顶了再看

作者: wushuai1346   发布时间: 2011-12-12