在文本文件中快速搜索术语的最快方法是什么?

4
我有一份术语(单词)列表,大约有50万个,它们被加载到某种数据结构中,比如字典或 Trie。

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

我的问题如下:

  1. 什么是用于此目的的最佳数据结构-树类型结构还是.NET字典?
  2. 如何搜索文本?我是否将其分解为单词,并将每个块与我拥有的列表进行比较,或者使用 RegEx 或 .NET 方法(如 Contains())等其他方法?

我只是想寻求一些建议,因为当我处理非常大量的文本文件时,速度将非常重要。

编辑: 是的,转换对于每个字符串都是相同的-基于算法-因此每个字符串看起来都不同。 (例如对单词使用密码使其不可读)。无论如何,我只是想让有人指导我正确的方向,我不熟悉那里的许多算法和数据结构。


1
你最大的障碍将是I/O。即使你编写了有史以来最有效率的代码,如果你有大量的文件且这些文件很大,它仍然会非常慢。 - Tim
最快的不一定是最易维护的,但如果你只是将文件拆分并存储术语...我不知道。 - SQLMason
1
@RedFilter 我认为这是一个头脑风暴会议。或许最好在Programmers.SE上提问。 - SQLMason
1
DFA = 确定有限状态自动机. - David R Tribble
1
另一个需要考虑的是利用.NET并行类,但是再次强调,I/O将是限制因素。 - Tim
显示剩余5条评论
2个回答

1

1
一个哈希表(字典)比树结构具有更快的查找速度。一个构建良好的哈希表可以在两三次探测内找到匹配的单词条目,而树结构可能需要多达十倍的比较。
至于分隔单词,收集每个单词中下一个空格或标点字符之前的所有字母字符(可能包括数字字符)似乎很简单。在查找字典之前,您可能需要将每个单词转换为全小写。

.NET Dictionary(TKey,TValue)类是一个不错的开始吗? - erotavlas
是的,那正是我建议的。 - David R Tribble

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接