Afzaal Ahmad Zeeshan
Цитата:
Мне нужно найти один каталог (c:\K_txt) из почти 3000 файлов .txt
Поиск этого на лету-действительно очень плохая идея, и вам придется заставлять ваших пользователей ждать каждый раз, когда они делают изменение в запросе. Хорошим подходом было бы прочитать ваши файлы один раз и создать в них токены (слова на английском языке). Это подскажет вашему алгоритму, какой файл содержит какие слова—
вы можете специализировать это на получении предложений, скажем, разделенных точками.
Это поможет вам искать слова в вашей собственной структуре данных; дерево, три, куча, вы выбираете. Это поможет вашим пользователям легко проверить, какие слова доступны в каких файлах, потому что теперь вашему приложению нужно будет только перейти к вашей собственной структуре данных, а не обходить файловую систему еще раз.
Файловая система будет пройдена только один раз. Ваша структура будет содержать данные в упорядоченном и удобном для поиска виде.
Цитата:
либо слово, либо точная фраза, которую вводит пользователь,
Именно моя точка зрения, что происходит, когда пользователь хочет найти "файл" и вводит "fole", ваш алгоритм будет искать "fole" в каталоге, а затем "файл" после того, как он прошел каталог один раз. Не очень хороший подход, и вам нужен альтернативный. Один из таких подходов-с MapReduce, в этом подходе вы будете читать файлы один за другим, подсчитывая общее количество существующих слов и их количество вхождений. Затем вы можете ввести этот результат в свою собственную структуру и запросить его для действительно лучшего подхода, чем тот, который вы рассматриваете.
Смотрите следующие ссылки и узнайте что-то оттуда,
mapreduce - Hadoop поиск слов из одного файла в другой файл - переполнение стека[
^]
алгоритмы - пример подсчета слов Hadoop MapReduce - обмен стеками компьютерных наук[
^] (Вы можете назвать это поиском слов)
Цитата:
затем загрузите список с именами тех txt файлов, которые содержат это слово или фразу
Ваша структура вернет все, что им нужно, она будет знать, какие файлы содержат "файл", и вернет их в списке—или так, как вы указали.
Цитата:
текстовый файл с выделенным каждым экземпляром слова или фразы
Это зависит от структуры приложения, и я оставлю вас с этим здесь. :-)
Удачи.