我有1万多个关键字 
然后 现在有很多文章 ,现在 给 我一篇文章 ,要 判断出 我1万个关键 哪些有,出现多少次各位看看 有什么好思路。谢谢我想了下,除了indexof或者正则表达式 还没想到 其他 比较 好的 算法  

解决方案 »

  1.   

    1,数据结构
    关键字用哈希表保存.
    对一万个关键字进行整理,建立两个信息表.
    表1保存关键字的长度(一个长度值只保存一次)
    表2保存关键字的过滤信息(比如保存每个关键字的前两个字,重复值只保存一次)2,算法
    以给定文档的文字为单位进行循环.每次循环做以下处理:
     A该次循环的文字位置开始取两个字,到过滤信息表中检索.如果存在该过滤信息记录,则继续处理B,否则开始下一个文字的循环.
     B取得检索到的过滤信息所关联的长度信息,做循环处理,每次循环从现在文字位置处取文字长度的文字串,对关键字表进行检索.如检索到则记录次数.
    大概意思就是这样,楼主可做参考.
     
      

  2.   

    首先把一万个关键字,存在一个HashMap里,key为关键字,value为出现的次数对文章逐字进行扫描,扫描到一个词或几个字,就去map里读取下,如果找到,就把value+1,没有则继续。上面说的只是一个思路,具体写代码是你可以通过很多方法来提高性能。这些方法太多了,就不列举了~~~
      

  3.   

    二分法查找效率会很高,一亿个都没问题,在查找的同时返回该下标值的所在位置,并返回一个count累计重复找到的
      

  4.   

    可是文章的内容 是 字符串类型,二分查找 没有办法处理这个问题的啊还是需要 顺序查找吧,或者hash
      

  5.   

    1.  你要记录出现关键字多少次,所以必须全文扫描。。2.  一个字链表LinkedList一个数组ArrayList 和一个HashMap而又分关键字和值。。所以还是建议使用HashMap..
      

  6.   

    这个问题还真有点难度除了2L提出的解决方案,我还想说个其实我对这方面的算法不是很精通,但我想到了一个东西,Lucene,可不可以按照Lucene的思路,通过建立索引,然后提取关键字这样去解决呢?只是一个思路,LZ见笑了。
      

  7.   

    楼主看看 字典树 相关的文章
    我也是才了解
    http://www.cppblog.com/hunter/archive/2008/11/16/67039.aspx
      

  8.   

    lucene  应该可以帮你解决。不过你要实现一下自己的分词。