У меня есть несколько миллионов слов, которые я хочу найти в миллиард слова corpus. Каким будет эффективный способ сделать это.Эффективный поиск в корпусе
Я думаю о trie, но есть ли доступная версия trie для open source?
Спасибо
- Обновлен -
Позвольте мне добавить еще несколько деталей о том, что именно требуется.
У нас есть система, в которой мы сканировали источники новостей и получали популярные слова, основанные на частоте слов. Могло быть миллион слов.
Наши данные будут выглядеть примерно так.
Слово1 Frequency1 Слово2 Frequency2 (табуляция)
Мы также получили наиболее популярные слова (1 млрд) из другого источника, который также содержит данные в указанном выше формате.
Вот что я хотел бы получить как выход.
- Слова, общие для обоих источников
- слов, присутствующих только в нашем источнике, но не в эталонного источника.
- Слова, представленные в справочном источнике, но не в нашем источнике.
Я могу использовать команду comm (bash) для вышеуказанной информации только для слов. Я не знаю, как использовать comm для сравнения только с одним столбцом, а не с обоими столбцами.
Система должна быть масштабируемой, и мы хотели бы выполнять ее каждый день и сравнивать результаты. Я также хотел бы получить приблизительные матчи.
Итак, я собираюсь написать работу по сокращению карты. Я планирую написать карту и уменьшить функцию, как показано ниже, но у меня мало вопросов.
Map
For each word
output key = word and value = structure{ filename,frequency}
done
Reduce
For each key
Iterate through all the values and check if both file1 and file2 are contained.
If yes, then write it to appropriate file.
If only in file1, write it to file1only file
If only in file2, write it to file2only file.
Done.
У меня есть два вопроса. На карте уменьшить, я могу указать в качестве входной каталог, содержащий два моих файла. Я не знаю, как получить имя файла, из которого я читаю слова. Как получить эту информацию? Как писать в разные выходные файлы, потому что фаза уменьшения автоматически записывается только в файл по умолчанию, называемый part-xxxxx. Как писать в разные выходные файлы.
Спасибо за это.
Можете ли вы поместить их в базу данных SQL и просто использовать полнотекстовый поиск? –
@Travis: он сказал «эффективный». :) –
Похоже, это нужно делать только один раз (количество слов для запроса известно), поэтому я бы сказал, что эффективность переоценена. Это нужно сделать только быстро. – Tobu