2012-05-18 2 views
3

В моем проекте мы пытаемся вычислить текстовое сходство набора документов, для которого я столкнулся с 2 проблемами.Использование HBase для извлечения данных для расчета сходства текста с помощью Mahout

  1. Я не хочу пересчитывать термины Частота документов, которые я ранее рассчитывал. например У меня 10 документов, и я рассчитал временную частоту и обратную частоту документов для всех 10 документов. Затем я получаю еще 2 документа. Теперь я не хочу рассчитать временную частоту для уже существующих 10 документов, но хочу рассчитать TF для новых 2, которые вошли, а затем использовать TF для всех 12 документов и рассчитать IDF для 12 документов как все. Как рассчитать IDF всех документов без повторного вычисления TF существующих документов?

  2. Количество документов может увеличиться, что означает использование подхода с использованием памяти (InMemoryBayesDatastore) может стать громоздким. Я хочу сохранить TF всех документов в таблице HBASE и при поступлении новых документов, я вычисляю TF новых документов, сохраняю их в таблице HBASE, а затем я использую эту таблицу HBASE для извлечения TF всех документы для расчета ИДФ. Как я могу использовать HBase для предоставления данных для сходства текста Mahout вместо того, чтобы извлекать его из файла последовательности?

ответ

1

Я предполагаю, что в вашей задаче MR вы читаете форму HDFS и выводете на Hbase. То, что я предлагаю, если я правильно понимаю вашу проблему, заключается в том, чтобы вычислить TF для каждого документа и сохранить Term как rowkey, квалификатором может быть идентификатор документа, а значением может быть частота (просто предложение для вашей схемы). Вам нужно будет выполнить 1 задание MR для каждого документа, и вам нужно будет только выполнить задание один раз на один документ.

Сделайте это для каждого документа, который вы анализируете по мере их поступления.

Затем выполните окончательное задание MR, чтобы сравнить все документы по одному на каждый член (т. Е. На строку). Это будет работать для определенных терминов, но будет усложняться с помощью «похожих терминов». Затем вы хотите запустить какой-то алгоритм, который учитывал бы, возможно, расстояние Левенштейна между терминами, что может быть сложным.