问题描述
数据库设计为关键字(如:傻X)、状态(如:1:禁止关键字2:替换关键字)我写了一个独立的方法,先查询出关键字表中的所有关键字然后一个个遍历看是否在字符串中包含如果存在关键字并且状态为1,则return-1判断为包含禁止关键字如果存在关键字并且状态为2,则把字符串中的关键字替换为*但是现在这样判断,性能很差,怎么提高性能速度呢?哪位大神帮忙解答下
解决方案
解决方案二:
关键字表大约有几千个关键字
解决方案三:
这效率高不了你总要每个字,每个词的去跟字典比对
解决方案四:
其实是拿着字典里的每个关键字去这一大堆文字里找,看能不能找到不管用什么算法,效率也是高不起来.
解决方案五:
引用3楼Z65443344的回复:
其实是拿着字典里的每个关键字去这一大堆文字里找,看能不能找到不管用什么算法,效率也是高不起来.
总有个办法能够有快速一点的吧.......
解决方案六:
linq并行计算,或者多线程。
解决方案七:
没有办法。除非文章本身已经被分词了,然后你拿着每一个单词到你的数据库中去匹配,这样有可能让你的大文章的判断速度提高100倍。但时很显然,当文章并不长时,这样反而更慢。
解决方案八:
然后你拿着每一个单词到你的数据库中去匹配-->然后你拿着每一个单词到你的hash表中去匹配
解决方案九:
从已知关键字构造出一颗trie树(网上有现成的代码)对文章做一趟扫描,能在trie树中匹配到的字组合就是
解决方案十:
唯一能够提高效率的,估计就是多线程了……
解决方案十一:
6楼是正道,低成本高收益。不过应该会快1000倍而不是100倍(楼主说了关键字有1000个)。文本很短时反正已经很快了,慢一点没关系。
解决方案十二:
这个真的没有什么好办法
解决方案十三:
文章1关键词集合2循环遍历文章1中每个字符去关键词集合2中找匹配就开始匹配后面的比如文章:今天天气不错关键词集合天气不错遍历到天时候今天的天第二个无法匹配。就放弃天气的天。匹配就修改。不知道这样会不会快点。估计也快不了多少。也可以直接正则全部替换。
解决方案十四:
如果我记得没错的话Lucene.net就是干这个事的
解决方案十五:
直接indexof吧,没捷径数据库就用like