1

我正在研究文档聚类问题,为此我需要获取文档数据集的词频。

目前,我正在使用一种简单的方法:我创建一个单词表,并添加与数据集包含的文档数量一样多的列,获得类似

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

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

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

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

4

3 回答 3

1

我假设您实际上对开发自己的算法感兴趣,而不是对 MySQL、SQL Server、Oracle 等数据库的全文功能感兴趣。

术语文档矩阵——我知道这个数据结构的术语——将与两列一起作为键存储:DocumentID 和 TermID。

您可能有额外的列用于计算文档中的术语、文档中的位置或其他任何内容,但这两个键是标准方式。

这些通常会链接到文档和条款的表格。文档表通常包含文档中的术语数量、位置(或文本本身)和其他信息。术语表通常具有术语的权重,可能还有其他信息,例如同义词列表、词性等。

然后,当您要添加新文档时,只需处理术语并将它们添加进去。添加新术语。. . 好吧,这需要处理该术语的历史文档,但这仍然很容易。

于 2013-02-26T16:04:34.420 回答
0

一个更相关的表设计如下所示:

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

然后将 (DocID + Word) 作为主键。您还需要另一个表来存储文档的信息,包括 DocID。

于 2013-02-26T16:02:22.187 回答
0

创建如下数据结构:

  • 文档表:DocumentId (PK)、DocumentName
  • 字表:WordId(PK)、DocumentId(FK)、WordName

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

于 2013-02-26T16:04:41.110 回答