У меня есть несколько миллионов слов, которые я хочу найти в корпусе миллиардов слов. Какой будет эффективный способ сделать это.
Я думаю о trie, но есть ли реализация trie с открытым исходным кодом?
Спасибо
- Обновлено -
Позвольте мне добавить еще несколько деталей о том, что именно требуется.
У нас есть система, в которой мы сканировали источники новостей и получали популярные слова, основываясь на их частоте. Там может быть миллион слов.
Наши данные будут выглядеть примерно так.
Word1 Frequency1
Word2 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. Как записать в разные выходные файлы.
Спасибо, что прочитали это.