将单词转换为数字的函数

A function to convert words to numbers

我发现了这个函数,它可以将用文字书写的数字转换成它的数字表示形式(例如,5 到 5)。该函数如下所示:

library(english)

words_to_numbers <- function(s) {
  s <- stringr::str_to_lower(s)
  for (i in 0:11)
    s <- stringr::str_replace_all(s, words(i), as.character(i))
  s
}

你能解释一下这个函数是如何工作的吗?我很困惑 as.character() 在这里如何发挥作用。

这个函数是这样工作的(注意你还需要 stringr 包)。

  1. 首先,它接受您输入的单词(即 "five" 如果您使用 words_to_numbers("five")

  2. 然后,str_to_lower() 接受它并将其规范化为所有小写(即,如果您键入 "Five""FIVE" 而不是 [=11,则避免出现问题=]).

  3. 然后遍历一个循环(出于某种原因以 11 结尾),因此 i 将取 1 的值,然后 2,然后3,一直到11.

  4. 在循环中,str_replace_all() 获取您的字符串(即 "five")并查找匹配模式。这里,模式是 words(i)(即 words(5)i == 5 产生模式 "five" - 在 english 包中, words() 函数提供了一个表示向量中位置的单词的向量。例如,如果您键入 english::words(1000),它将 return "one thousand"。一旦找到模式,它就会用 [=32= 替换它]。as.character() 函数将数字 i 值转换为字符,因为 str_replace_all() 需要字符替换。如果您需要 return 值是数字,您可以使用 as.numeric(words_to_numbers("five"))

出于某种原因,该函数在 11 处停止,这意味着如果您键入 words_to_numbers("twelve"),它将不起作用(returns“十二”)。因此,如果要对大于 11 的值使用该函数,则需要调整该数字。

希望这对您有所帮助,祝您学习 R 顺利!