在独立字典应用程序中包含大单词列表

时间:2009-10-03 21:39:32

标签: c# dictionary compression portability

应用程序
我正在研究一个简单的字典搜索工具,其主要目的是搜索大约180,000个单词的单词列表。

首先,单词列表是纯文本文档,每个单词都在一行上。加载后,单词列表被处理成一个简单的数组进行搜索。

目标
然而,我的目标是将应用程序作为单个可移植可执行文件分发,因此我必须以某种方式将单词列表打包在应用程序中。

我的尝试
在我第一次尝试时,我只是自动生成一个数组定义,并将其包含在项目中(因此,不是加载文件和创建数组,我在项目中有一个文字数组),看起来有点像这样:

// Auto-generated word-list
public string[] WordList = new string[178691];

WordList[0] = "AA";
WordList[1] = "AAH";
// ...
WordList[115383] = "PHOTONEGATIVE";
WordList[115384] = "PHOTONIC";
WordList[115385] = "PHOTONICS";
WordList[115386] = "PHOTONS";
WordList[115387] = "PHOTONUCLEAR";
WordList[115388] = "PHOTOOXIDATION";
WordList[115389] = "PHOTOOXIDATIONS";
WordList[115390] = "PHOTOOXIDATIVE";
WordList[115391] = "PHOTOOXIDIZE";
WordList[115392] = "PHOTOOXIDIZED";
WordList[115393] = "PHOTOOXIDIZES";
WordList[115394] = "PHOTOOXIDIZING";
WordList[115395] = "PHOTOPERIOD";
// etc...

这实现了完全可移植的目标,整个项目的文件大小保持不变。

但是,通过以这种方式接近它而改变的一件事是构建和运行时间的增加,这可以被认为是一个小的和不可避免的问题,但理想情况下应该缩短。

问题
是否有任何方法可以将大型(~180,000字)字典组合到便携式/独立应用程序中,可能使用某种压缩技术来降低文件大小,但最终要保持合理的加载时间,这是“更多赞成“比一个简单的,预定义的,文字阵列?

1 个答案:

答案 0 :(得分:5)

您应该考虑将该文件作为嵌入式资源添加到.NET程序集中。然后,您可以在程序集中从运行时读取值。您也可以使用DeflateStream(请参阅here)以某种方式在程序集中压缩它。