преобразовать числа, написанные словами в числа, используя R-программирование - PullRequest
4 голосов
/ 07 мая 2019

Моя задача состоит в том, чтобы преобразовать десять и одно в словах в числа как 10 и 1 во входном предложении:

example_input <- paste0("I have ten apple and one orange")

Числа могут меняться в зависимости от требований пользователя, входное предложение может быть размечено:

my_output_toget<-paste("I have 10 apple and 1 orange")

Ответы [ 3 ]

5 голосов
/ 07 мая 2019

Мы можем передать пару ключ / val как replacement в gsubfn, чтобы заменить эти слова числами

library(english)
library(gsubfn)
gsubfn("\\w+", setNames(as.list(1:10), as.english(1:10)), example_input)
#[1] "I have 10 apple and 1 orange"
3 голосов
/ 07 мая 2019

textclean довольно удобная возможность для этой задачи:

mgsub(example_input, replace_number(seq_len(10)), seq_len(10))

[1] "I have 10 apple and 1 orange"

Вам просто нужно настроить параметр seq_len() в соответствии с максимальным числом в ваших данных.

Некоторые примеры:

example_input <- c("I have one hundred apple and one orange")

mgsub(example_input, replace_number(seq_len(100)), seq_len(100))

[1] "I have 100 apple and 1 orange"

example_input <- c("I have one tousand apple and one orange")

mgsub(example_input, replace_number(seq_len(1000)), seq_len(1000))

[1] "I have 1 tousand apple and 1 orange"

Если вы заранее не знаете своего максимального числа, вы можете просто выбрать достаточно большое число.

1 голос
/ 07 мая 2019

Менее элегантно, чем ответ Акруна, но в base.

nums = c("one","two","three","four","five",
         "six","seven","eight","nine","ten")
example_input <- paste0("I have ten apple and one orange")

aux = strsplit(example_input," ")[[1]]
aux[!is.na(match(aux,nums))]=na.omit(match(aux,nums))
example_output = paste(aux,collapse=" ")
example_output
[1] "I have 10 apple and 1 orange"

Сначала мы разбиваем пробелы, находим соответствующие числа и меняем их по позиции (совпадает с самим числом), а затем вставляем снова.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...