docMatrixDFにおける重み付け処理について

アールメカブ フォーラム RMeCab docMatrixDFにおける重み付け処理について

  • このトピックには1件の返信、2人の参加者があり、最後にRobertMexにより3年前に更新されました。
2件の投稿を表示中 - 1 - 2件目 (全2件中)
  • 投稿者
    投稿
  • #1542
    Nakazono
    ゲスト

    関数の確認を行っていたところ、docMatrixDFで、idf2とidf3の場合の処理が同じであることが分かりました。
    【問題の箇所(docMatrixDF)】
    #下から17行目
    else if (argW[i] == “idf3”) {
    dtm <- dtm * globalIDF2(dtm)

    【全文(docMatrixDF)】
    > docMatrixDF
    function (charVec = c(“MeCab”, “CaBoCha”), pos = “Default”, minFreq = 1,
    weight = “no”, co = 0, dic = “”, mecabrc = “”, etc = “”)
    {
    charLeng <- length(charVec)
    if (charLeng < 1) {
    stop(“character vector must be specified.”)
    }
    if (any(pos == “” | is.na(pos))) {
    stop(“specify pos argument!”)
    }
    if (length(pos) == 1 && pos == “Default”) {
    posN <- 0
    }
    else {
    posN <- length(pos)
    }
    if (is.null(dic) || is.na(dic)) {
    dic = “”
    }
    else if ((xl <- nchar(dic)) > 0) {
    dic <- paste(dirname(dic), basename(dic), sep = “/”)
    if (!(file.exists(dic))) {
    cat(“specified dictionary file not found; result by default dictionary.\n”)
    dic = “”
    }
    else {
    dic <- paste(” -u”, dic)
    }
    }
    if (is.null(mecabrc) || is.na(mecabrc) || (nchar(mecabrc)) <
    2) {
    mecabrc = “”
    }
    else {
    mecabrc <- paste(dirname(mecabrc), basename(mecabrc),
    sep = “/”)
    if (!(file.exists(mecabrc))) {
    cat(“specified mecabrc not found; result by default mecabrc.\n”)
    mecabrc = “”
    }
    else {
    mecabrc <- paste(“-r”, mecabrc)
    }
    }
    opt <- paste(dic, mecabrc, etc)
    if (minFreq < 1) {
    stop(“minFreq > 0 must be specified.”)
    }
    dtm <- .Call(“docMatrixDF”, as.character(charVec), as.numeric(charLeng),
    pos, as.numeric(posN), as.numeric(minFreq), as.character(opt),
    PACKAGE = “RMeCab”)
    if (is.null(dtm)) {
    stop(“give less number to minFreq!”)
    }
    dtm <- t(dtm)
    if (co == 1 || co == 2 || co == 3) {
    dtm <- coOccurrence(removeInfo(dtm), co)
    }
    if (weight == “”) {
    }
    argW <- unlist(strsplit(weight, “*”, fixed = T))
    for (i in 1:length(argW)) {
    if (argW[i] == “no”) {
    invisible(dtm)
    break
    }
    else if (argW[i] == “tf”) {
    dtm <- localTF(dtm)
    }
    else if (argW[i] == “tf2”) {
    dtm <- localLogTF(dtm)
    }
    else if (argW[i] == “tf3”) {
    dtm <- localBin(dtm)
    }
    else if (argW[i] == “idf”) {
    dtm <- dtm * globalIDF(dtm)
    }
    else if (argW[i] == “idf2”) {
    dtm <- dtm * globalIDF2(dtm)
    }
    else if (argW[i] == “idf3”) {
    dtm <- dtm * globalIDF2(dtm)
    }
    else if (argW[i] == “idf4”) {
    dtm <- dtm * globalEntropy(dtm)
    }
    else if (argW[i] == “norm”) {
    dtm <- t(t(dtm) * mynorm(dtm))
    }
    }
    if (any(is.na(dtm))) {
    cat(“Warning! Term document matrix includes NA!”, “\n”)
    }
    invisible(dtm)
    }
    <bytecode: 0x00000000179c64b8>
    <environment: namespace:RMeCab>

    また、globalIDF3もないわけではなく、定義されているようでした。
    (実行して確認はしておりません)
    ほかにも、docMatrix()やdocMatrix2()で同じことを確認しています。

    報告のような形ではありますが、解決できるインストール方法等
    ございましたら解答よろしくお願いします。

    【sessionInfo()の結果】
    > sessionInfo()
    R version 3.5.1 (2018-07-02)
    Platform: x86_64-w64-mingw32/x64 (64-bit)
    Running under: Windows >= 8 x64 (build 9200)

    Matrix products: default

    locale:
    [1] LC_COLLATE=Japanese_Japan.932 LC_CTYPE=Japanese_Japan.932
    [3] LC_MONETARY=Japanese_Japan.932 LC_NUMERIC=C
    [5] LC_TIME=Japanese_Japan.932

    attached base packages:
    [1] stats graphics grDevices utils datasets methods base

    other attached packages:
    [1] DBI_1.0.0 xlsx_0.6.1 stringi_1.1.7 stringr_1.3.1 dplyr_0.7.6
    [6] magrittr_1.5 RMeCab_1.00

    loaded via a namespace (and not attached):
    [1] Rcpp_0.12.18 xlsxjars_0.6.1 crayon_1.3.4 assertthat_0.2.0
    [5] R6_2.2.2 pillar_1.3.0 rlang_0.2.1 rstudioapi_0.8
    [9] bindrcpp_0.2.2 tools_3.5.1 glue_1.3.0 purrr_0.2.5
    [13] yaml_2.2.0 compiler_3.5.1 pkgconfig_2.0.1 rJava_0.9-10
    [17] tidyselect_0.2.4 bindr_0.1.1 tibble_1.4.2

    #1564
    ishida
    キーマスター

    返信が遅れまして申し訳ないです。

    RMeCabの次のバージョンで修正したいと思いますが、
    とりあえずは実行時に以下のようにして、関数定義を修正していただければと思います、

    
    trace(docMatrixDF, edit = TRUE)
    

    実行すると別ウィンドウが開きますので、修正すべき箇所を書き直して、ウィンドウを閉じますと、以降、修正された処理が実行されます。

    • この返信は5年、 3ヶ月前にishidaが編集しました。
2件の投稿を表示中 - 1 - 2件目 (全2件中)
  • フォーラム「RMeCab」には新規投稿および返信を追加できません。