我試圖找到一個分類算法的逆文檔頻率,並且無法按照我的代碼的結構(使用嵌套哈希) ,並且通常將一個哈希與多個哈希進行比較。將一個哈希值與多個哈希值進行比較以獲得ruby中的逆文檔頻率
我的訓練代碼如下至今:
def train!
@data = {}
@all_books.each do |category, books|
@data[category] = {
words: 0,
books: 0,
freq: Hash.new(0)
}
books.each do |filename, tokens|
@data[category][:words] += tokens.count
@data[category][:books] += 1
tokens.each do |token|
@data[category][:freq][token] += 1
end
end
@data[category][:freq].map { |k, v| v = (v/@data[category][:freq].values.max) }
end
end
基本上,我有4個類別(如有變更)的哈希,併爲每個有字數,書籍數量和頻率散列其中顯示該類別的詞頻。如何從一個類別中獲取單個詞語的頻率與所有類別中顯示的詞語的頻率進行比較?我知道如何對一組哈希鍵與另一組哈希鍵進行比較,但我不確定如何通過嵌套哈希循環來獲得對所有其他術語的頻率,如果這是合理的。
編輯以包括預測結果 - 我想返回一個散列,表示單詞作爲關鍵字的嵌套散列(每個類別一個散列),以及它作爲值出現的其他類別的數量。即{:category1 = {:word => 3,:other => 2,:third => 1},:category2 => {:another => 1,...}}或者將一個類別名稱數組作爲值,而不是類別的數量,也將起作用。
我試圖創建一個新的哈希如下,但它的轉向了空:
def train!
@data = {}
@all_words = Hash.new([]) #new hash for all words, default value is empty array
@all_books.each do |category, books|
@data[category] = {
words: 0,
books: 0,
freq: Hash.new(0)
}
books.each do |filename, tokens|
@data[category][:words] += tokens.count
@data[category][:books] += 1
tokens.each do |token|
@data[category][:freq][token] += 1
@all_words[token] << category #should insert category name if the word appears, right?
end
end
@data[category][:freq].map { |k, v| v = (v/@data[category][:freq].values.max) }
end
end
如果有人可以幫助我弄清楚爲什麼@all_words哈希爲空運行代碼時,我可能能夠得到休息。
'@data [類別] [:頻率] [ 'word_i_am_interested_in']'? – Max
預期輸出的例子會使問題更容易理解。 –
謝謝你,根據你的建議編輯上面。 – Car