问题描述
1、直接使用关键词提取准确度很低,难以命中文章中核心的关键词,已知目前mysql中有一个上千万的长尾关键词库,里面全部都是存的关键词;
2、如果现在新增一篇文章后,怎样能快速、高效的检测这篇文章中包含了长尾关键词库中的数据?(因为每天新增很多文章,每一篇文章都需要这样处理)
问题出现的环境背景及自己尝试过哪些方法
目前用的最傻瓜的方法是将这些大量的文章和关键词索引后查询,好处是准确率高,即使是同义词也可以。但是这样轮一遍数据库需要两三天的时间。(也就是类似撞库的方式,现在的效率很低)
请问有没有简单的实现方式,能在新增一篇文章后,迅速的提取出长尾关键词库中的关键词?
千万级要想实现秒级查询的方法就是用空间换时间。
先根据词库最终生成的字典大小给 PHP 预留内存,然后将词库导出生成字典树(就是 Trie 树)字典,载入内存常驻,通过字典树算法查找。
具体可以参考这篇文章《PHP实现敏感词过滤系统》,有轮子可用,而且作者测试过200W词,看数据是不错的。
另外,如果文章有分类,你可以建个表统计每个分类下的热门词语,根据词频做子词库可以提供更快的初步的关键词提取。