IshidaMotohiro / RMeCab

Interface to MeCab
30 stars 10 forks source link

確率的IDFの計算の修正 #26

Closed paithiov909 closed 7 months ago

paithiov909 commented 7 months ago

確率的IDF(globalIDF3)の計算が間違っていると思われたため、weights.Rを編集しました。

この関数は次式のように、文書数Nと「各単語を含む文書数」との差を「各単語を含む文書数」で割ってlogをとるものだと思いますが、log2((ncol(m) - df) / df)のようになるべきところがlog2(ncol(m - df) / df)となっています。

$$idf = \log \frac{N - n_t}{n_t}$$

また、この修正のほかに、weights.Rとzzz.Rの体裁を整えました。

編集前

# probabilistic IDF
globalIDF3 <-
  function(m, tp=0) {
#     m <- removeInfo ( m )
    if(tp == 1){
      df <- colSums(localBin( m ), na.rm=TRUE)# 各単語を含む文書数 (文書頻度)
      return ( log2 ( nrow( m - df) /df  ) )# 行側に文書

    }else{
      df <- rowSums(localBin( m ), na.rm=TRUE)# 各単語を含む文書数 (文書頻度)
      return ( log2 ( ncol( removeInfo(m) - df) /df  ) )
    }

  }

編集後

# probabilistic IDF
globalIDF3 <-
  function(m, tp = 0) {
    if (tp == 1) {
      df <- colSums(localBin(m), na.rm = TRUE) # 各単語を含む文書数 (文書頻度)
      return(log2((nrow(m) - df) / df)) # 行側に文書
    } else {
      m <- removeInfo(m)
      df <- rowSums(localBin(m), na.rm = TRUE) # 各単語を含む文書数 (文書頻度)
      return(log2((ncol(m) - df) / df))
    }
  }
IshidaMotohiro commented 7 months ago

Thank you for the correction.