2014-04-06 78 views
2

這是一個文本挖掘項目。這個項目的目的是看看每個單詞在不同文檔中的權重是不同的。如何計算OracleSQL中的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新手,我希望對您的代碼有一點解釋。非常感謝!

+0

我不確定鏈接是什麼,你需要計算每個單詞,這對兩個表格都是通用的嗎? N從哪裏來,因爲你似乎無法從任何一個表中推斷它?你到目前爲止嘗試過什麼? –

+0

該數據來自多個文檔。我計算了一個單詞在一個文檔(TF)中顯示的次數,以及一個單詞顯示的文檔數量。現在我想計算一下TF-IDF:一個表中一個詞顯示多少次* log(文檔總數/一個詞顯示多少文檔)+ 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列的值。 還有一點:表達式中有一對多餘的括號。