从文件中删除单词列表的最快方法

时间:2018-04-12 01:01:23

标签: c++ algorithm

我正在尝试一种快速有效的方法来删除文件中的停用词列表。不幸的是,我无法找到一个很好的方法来做到这一点。

我唯一的方法是将文件的每个单词与一个停用单词数组进行比较,将单词与数组的每个部分进行比较将是超慢的,并且考虑到文件的大小是31 MB,这是七个文件中最小的重复过程。

考虑到尺寸,每纳秒都很重要,所以如果有人有任何建议我会非常感激。

编辑::为了让你们更好地了解这些文件,我从2008年到现在对Stack溢出问题进行排序,所以基本上任何事情都有可能,我正在创建一个搜索引擎,但是在那漫长的路径上的第一步是在没有任何影响或重要性的问题中摆脱单词""," a"然后我必须添加留给AVL树的单词,直到我,对位置进行编目,例如,如果有人查找c ++我可以去树找到带有c ++的节点,并且在那个节点中, C ++出现在2009.txt的2003行和2012.txt的101行中(例如)。希望额外的细节和最终目标有助于清理事情

1 个答案:

答案 0 :(得分:0)

尝试以下方法:

  1. 将停用词放入哈希表中,因此检查列表中是否有单词将占用一个恒定时间,即O(1):https://en.wikipedia.org/wiki/Hash_table

  2. 内存将文件映射到内存:https://en.wikipedia.org/wiki/Memory-mapped_file

  3. 在循环中,获取下一个单词并检查它是否在哈希表中。

  4. 如果哈希表中的单词,只需将要删除的范围保存到列表中。

  5. 检查完所有单词后,只需浏览要删除的范围列表并“压缩”该文件。

  6. 修剪并关闭内存映射文件,将结果写入磁盘。