从散列中排除单词的最有效方法

时间:2013-12-19 20:34:40

标签: java regex hash full-text-search

我正在开发一个小项目,它基本上会在多个文本文件中搜索用户指定的单词。我计划通过在搜索之前将每个文件散列到一个大的哈希表中来完成此操作,然后对用户选择的单词进行散列并将其与哈希表进行比较。

我的问题是,我想从我的哈希中排除某些常用词,例如“the”。我想到的两种方法如下:

  1. 创建一个基本上是“\ bword1 \ b | \ bword2 \ b |”的正则表达式等等,然后在我开始散列之前执行String.split(regex,"")从文本中删除这些单词

  2. 在处理每个单词时,请执行String.matches(regex)检查该单词是否属于我的排除单词的正则表达式。如果是这样,只需跳到下一个单词。

  3. 我觉得这两个解决方案非常相似,我想知道是否有更有效的方法可以做到这一点。

1 个答案:

答案 0 :(得分:0)

我建议保留HashSet个停用词(这是信息检索领域的官方术语)。您只需查看stopwords.contains(word)

我还建议使用一种技术来快速搜索文档中的单词:倒排索引。不要为每个文件维护一个hashmap;维护单个散列映射,其中键是单词,值是包含单词的文档ID集。

然后,如果您要搜索包含两个给定单词的所有文档,您只需提取两个集并计算它们的交集即可提供该请求。