2013-02-26 39 views
1

我正在处理文档聚类问题,为此我需要获取文档数据集的单词频率。在巨大数据集中存储字频

目前,我使用一个简单的办法:我创建了一个词表,我添加尽可能多的列的数据集包含的文档数量,获得类似

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

这种方法,即使如果速度慢,适用于小数据集(包含少于100个文档)。问题是,现在我必须处理巨大的文件,每个文件包含700多个文件,我觉得必须有一个更明智的方式来处理它:问题是,我想不出其他任何东西。

所以,问题是:如何有效地跟踪每个文档的单词频率?

PS:考虑每个文档的单词数量或数据集大小都是未知的,但合理的上限应该是每个文档2000个字,每个数据集2000个文档。

回答

1

我假设你确实对开发自己的算法感兴趣,而不是像MySQL,SQL Server,Oracle等数据库的FULL TEXT功能。

术语文档矩阵 - 我知道这个数据结构的术语 - 将以两列作为关键字存储: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(PK),DocumentName
  • 字表:的wordID(PK),DocumentId(FK),WordName

这样,您可以运行一些汇总查询来报告数据。