在文本文件中搜索术语的最快方法?

时间:2014-01-23 18:16:58

标签: c# .net

我有一个术语(单词)列表,比如大约500,000,它们被加载到一些数据结构中,如字典或Trie或许。

在我的程序中,我想打开每个文本文档并搜索这些术语的出现次数。当我找到一个我想停止并转换文本文件中的字符串(用转换后的字符串替换它),然后继续搜索。完成文件后,我将新的修改文件写入磁盘。

我的问题如下

  1. 用于此目的的最佳数据结构是什么 - 树类型结构或.NET字典
  2. 我如何搜索文字?我是否将其分解为单词并将每个块与我的列表或其他方法(如RegEx)或.NET方法(如Contains())进行比较?
  3. 我只是在寻找一些关于从哪里开始的建议,因为我认为当我处理非常大量的文本文件时,速度将非常重要。

    编辑:是的,每个字符串的转换都是相同的 - 基于算法 - 所以每个字符串看起来都不同。 (例如,使用Cipher来制作这个词是不可读的。无论如何,我只是在寻找某人指向正确的方向,我不熟悉那里的许多算法和数据结构。

2 个答案:

答案 0 :(得分:1)

从我上过的课程中,我记得我们介绍过几种不同的算法。以下是我记得对大文本文件非常有效的那些......

博耶-摩尔:
http://en.wikipedia.org/wiki/Boyer%E2%80%93Moore_string_search_algorithm

Knuth的莫里斯-普拉特:
http://en.wikipedia.org/wiki/Knuth%E2%80%93Morris%E2%80%93Pratt_algorithm

这些只会帮助查找,然后你可以自己进行操作

答案 1 :(得分:1)

哈希表(Dictionary)将提供比树结构更快的查找。精心构建的哈希表可以找到具有两个或三个探测器的匹配单词条目,而树结构可能需要多达一个数量级的更多比较。

至于分割单词,将所有字母字符(可能还有数字字符)收集到每个单词的下一个空格或标点符号似乎很简单。在字典中查找之前,您可能希望将每个单词转换为全小写。