4

(新人として) これを R パッケージのバグとして提出する前に、皆さんに実行させてください。以下のすべてが良いと思います。

replace_number("123 0 boogie")
[1] "one hundred twenty three boogie"
replace_number("1;1 foo")
[1] "one;one foo"
replace_number("47 bar")
[1] "forty seven bar"
replace_number("0")
"zero"

出力に「ゼロ」がないため、次のすべてが悪いと思います。

replace_number("1;0 foo")
[1] "one; foo"
replace_number("00 bar")
[1] "bar"
replace_number("0x")
[1] "x"

replace_number()基本的に、数字の 0 を含む文字列 (「0」を除く) を処理できないと言えます。それは本当のバグですか?

4

1 に答える 1

5

の内臓を掘り下げるとreplace_number

 unlist(lapply(lapply(gsub(",([0-9])", "\\1", text.var), function(x) {
        if (!is.na(x) & length(unlist(strsplit(x, "([0-9])", 
            perl = TRUE))) > 1) {
            num_sub(x, num.paste = num.paste)
        }
        else {
            x
        }
    }), function(x) mgsub(0:9, ones, x)))

問題が発生していることがわかりますqdap:::num_sub

qdap:::num_sub("101", num.paste = "combine") ## "onehundredone"
qdap:::num_sub("0", num.paste = "combine")   ## ""

その関数内を掘り下げると、numb2word内部コードを持つで問題が発生します

ones <- c("", "one", "two", "three", "four", "five", "six", 
    "seven", "eight", "nine")
names(ones) <- 0:9

ゼロ値を空白に変換します。私が自分でこの問題に直面していた場合、qdap リポジトリをフォークし、 replace_number.Rに移動し、下位互換性のある方法でこれを変更して、論理的な引数をreplace_number取ることができるようにします。blank_zeros=TRUEnumb2word

ones <- c(if (blank_zeros) "" else "zero",
          "one", "two", "three", "four", "five", "six", 
    "seven", "eight", "nine")

それまでの間、これをqdap issues listに投稿しました。

于 2016-08-01T23:37:04.600 に答える