有100万个关键词存储在文件keyword.txt中,分析一段话中分析出keyword.txt中包含的关键词...

有100万个关键词存储在文件keyword.txt中,分析一段话中分析出keyword.txt中包含的关键词...
假设keyword.txt中内容如下:
百度
贴吧
搜索
......
输入文本:百度与2013年推出贴吧服务。
则命中的关键是:百度、贴吧

求一个高效的算法解决这个问题。

阅读 2.9k
1 个回答

只能说,这里面太多因素了

输入要做分词,分词这件事就是一个要求很高的算法了

关键词库放txt的,那为了减少io肯定要做内存缓存的,百万级中文关键词(最少是个二字词组吧?)内存放不下,那缓存算法也要考虑,比如怎么筛选出要放内存继续放文件内存里只存偏移

如果是工程一点的问题,就是说要求能跑一次求多个输入的命中,那显然还得对关键词做分类排序,重新构建内存中的结构来提高命中率。

但是缓存类的问题个人觉得不跑到一个数量级把缓存 起来,是效率很低的。

再有一个是硬件因素,内存大肯定全塞进去,塞不进去那就要考虑数据结构,而固态的特性和机械硬盘的特性会影响这个数据结构的设计,比如 block 的大小等等。

总而言之,这个问题理论上很难给出特定算法,你还不如全放进数据库,在sql上做优化,至少硬盘/内存这层硬件因素的优化你不需要头疼了。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进