2013-02-26 5 views
1

Я работаю над проблемой кластеризации документов, и для этого мне нужно получить частоту слов в наборе данных документа.Хранение частоты слова в огромном наборе данных

На данный момент я использую тривиальный подход: создать таблицу слов и добавить столько столбцов, сколько количество документов, содержащихся в наборе данных, получение что-то вроде

word | document1 | document2 | ... | document n | 

Такой подход, даже если он медленный, работает для небольших наборов данных (содержащих менее 100 документов). Проблема в том, что теперь я должен иметь дело с огромными, содержащими более 700 документов, и я чувствую, что должен быть более умный способ справиться с этим: проблема в том, что я не могу думать ни о чем другом.

Итак, вопрос в том, как я могу эффективно отслеживать частоту слов в документе?

PS: Учтите, что количество слов на один документ или размер набора данных неизвестно, но разумная верхняя граница должна составлять 2000 слов на один документ и 2000 документов на один набор данных.

ответ

1

Я предполагаю, что вы действительно заинтересованы в разработке собственных алгоритмов, а не в возможностях FULL TEXT для баз данных, таких как MySQL, SQL Server, Oracle и т. Д.

Термин документальная матрица - термин, который я знаю для этой структуры данных, будет храниться с двумя столбцами в виде ключей: DocumentID и TermID.

Возможно, у вас есть дополнительные столбцы для подсчета срока в документе, месте в документе или что-то еще, но эти два ключа являются стандартным способом.

Они обычно связываются с таблицами для документов и условий. В таблице документов обычно указывается количество терминов в документе, местоположение (или сам текст) и другая информация. Таблица терминов обычно имеет вес этого термина и, возможно, другую информацию, такую ​​как списки синонимов, часть речи и т. Д.

Затем, когда вы хотите добавить новый документ, вы просто обрабатываете термины и добавляете их. Добавление нового термина. , , ну, это требует обработки исторических документов на этот срок, но это все еще довольно легко.

0

Более реляционная таблица параметров для этого будет выглядеть следующим образом:

CREATE TABLE DOC_WORD_COUNTS AS 
(
    DocID As INT Not NULL, 
    Word As VARCHAR(20) Not NULL, 
    Frequency As INT Not NULL 
) 

Затем сделайте (DocId + слово) в качестве первичного ключа. Вам также понадобится другая таблица для хранения информации Документов, включая DocID.

0

Создать структуру данных, как это:

  • Документ-Таблица: DocumentId (ПК), DocumentName
  • Слово-Таблица: WordId (ПК), DocumentId (ФК), WordName

Таким образом, вы можете отключить некоторые агрегированные запросы для представления данных.