如何在Oracle SQL中计算TF-IDF?

时间:2014-04-06 16:58:25

标签: sql oracle tf-idf

这是一个文本挖掘项目。这个项目的目的是看看每个单词在不同的文档中的权重是多少。

现在我有两个表,一个表有TF信息(WORD | WordFrequency_in_EachFile),另一个表有IDF(WORD | HowManyFile_have_EachWord)。我不确定这个计算使用什么查询。

我想在这里做的数学是: WordFrequency_in_EachFile*(log(N/HowManyFile_have_EachWord)+1) N是文档的总数。 以下是我的代码:

create table TF_IDF (WORD, TF*IDF) as
select A.frequency*((log(10,132366/B.totalcount)+1)) 
from term_frequency A, document_frequency B
where A.WORD=B.WORD;

这里1323266是我的文件总数,而totalcount是一个单词显示的文件数。

由于我是SQL新手,我很感激您对代码的一些解释。非常感谢!

1 个答案:

答案 0 :(得分:0)

计算看起来不错,但语法有些无效。

正确的变体可能如下所示:

create table TF_IDF as
select 
  A.Word                                           as Word,
  A.frequency*( log(10, 132366/B.totalcount) + 1)  as TFIDF
from 
  term_frequency     A, 
  document_frequency B
where 
  A.WORD=B.WORD
;

CREATE ... AS SELECT ...声明中,您不需要列规范。从字段别名派生的列名称和类型。 此外,您必须在新表中提供Word列的值。 还有一点:表达中有一对多余的括号。