Включение большого списка слов в автономное приложение словаря - PullRequest
0 голосов
/ 04 октября 2009

Заявка
Я работаю над простым инструментом поиска по словарю, основной целью которого является поиск в списке слов из примерно 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 Ответ

5 голосов
/ 04 октября 2009

Вы должны посмотреть, как добавить файл в качестве встроенного ресурса в сборку .NET. Затем вы можете прочитать значения во время выполнения из сборки. Вы также можете использовать DeflateStream (см. здесь ), чтобы каким-то образом сжать его в сборке.

...