2014-01-08 2 views
2

мне нужно сделать Term Frequency Map/Reduce с изюминкой:MongoDB Карта Уменьшить Term Frequency с Морфологическими и фразами

  1. строчных термины
  2. Отвернуть стопорные слова
  3. Стволовых слова
  4. разделены на фразы
  5. счета каждая фраза
  6. упорядочить по количеству по алфавиту

Что я имею в виду раскола в фразы выглядят следующим образом: у меня есть название «Дэвид убирает комнату», я хотел бы иметь следующие фразы подсчитаны в результатах:

Дэвид Дэвид убирает Дэвид убирает номера чистит чистит номера номера

Я в настоящее время имеют простые решения, которые не делают никаких фраз, стоп-слова или вытекающие:

var map = function() { 
    var summary = this.summary; 
    if (summary) { 
     // quick lowercase to normalize per your requirements 
     summary = summary.toLowerCase().split(" "); 
     for (var i = summary.length - 1; i >= 0; i--) { 
      // might want to remove punctuation, etc. here 
      if (summary[i]) {  // make sure there's something 
       emit(summary[i], 1); // store a 1 for each word 
      } 
     } 
    } 
}; 

var reduce = function(key, values) {  
    var count = 0;  
    values.forEach(function(v) {    
     count +=v;  
    }); 
    return count; 
} 

Я не уверен, что карта/сокращение mongodb может поддерживать прерывание и останавливать слова из коробки и как собрать все это вместе.

Уточнение: результатом Карты/Уменьшения будет коллекция с условиями и их частотой. Мне нужно постоянно обновлять эту коллекцию (ежедневно), чтобы мы могли видеть наиболее распространенные термины. Я надеюсь запустить начальный M/R, а затем ежедневное обновление последних записей.

+0

Сокращение карты было бы очень плохой способ сделать это, Map Reduce действительно не предназначен для запуска встроенного приложения. Вы должны либо изучить новые возможности FTS MongoDB, либо получить технику FTS – Sammaye

+0

Полнотекстовый поиск позволяет индексировать и искать в коллекции. Но я не уверен, что он может создать коллекцию с термином/счетчиком, с которым я могу работать. – checklist

+1

Для чего вам нужна физическая коллекция, полный текстовый индекс будет выполнять сортировку и все необходимое, вам не нужно будет хранить какие-либо данные самостоятельно – Sammaye

ответ

0

Список функций вы описали именно то, что MongoDB-х text index обеспечивает:

Если вы хотите создать собственный полнотекстовый поиск, Map/Reduce не лучший подход. Для базового решения было бы лучше итератировать ваши документы, используя обычные find() и build a multi-key index на основе ваших требований к поиску по ключевым словам.

Вне MongoDB есть other text search options, которые могут быть интегрированы для обеспечения более расширенных параметров поиска, таких как грани, кластеризация и близость ключевых слов.

+1

Спасибо. Я знаю о функциях FTS. Но это индекс. И мне нужна результирующая коллекция, с которой я могу работать, и, самое главное, подсчет количества терминов/частоты. – checklist

0

в последней версии mongodb 2.6 включает FTS (без бета-версии). Эта версия включает в себя создание снежного кома, стоп-слова для каждого языка.

+0

Но единственная мета, которую он позволит вам использовать в данный момент, - это не что-то еще. Это не похоже на то, что вы можете использовать в своих целях сокращение, прекращение слов и т. Д.. Его можно использовать только в текстовом совпадении. – Maziyar

Смежные вопросы