随机打乱句子中单词中的字母

标签 r random sentence

我想随机打乱句子中组成单词的字母顺序。我可以对单个单词进行洗牌,例如:

a <- "bach"
sample(unlist(str_split(a, "")), nchar(a))
[1] "h" "a" "b" "c"

但我无法对句子执行此操作,例如:

b <- "bach composed fugues and cantatas"

到目前为止我尝试过的:

分割成单词:

b1 <- str_split(b, " ")
[[1]]
[1] "bach"     "composed" "fugues"   "and"      "cantatas"

计算每个单词的字符数:

n <- lapply(b1, function(x) nchar(x))
n
[[1]]
[1] 4 8 6 3 8

b1中的单词拆分为单个字母:

b2 <- str_split(unlist(str_split(b, " ")), "")
b2
[[1]]
[1] "b" "a" "c" "h"    
[[2]]
[1] "c" "o" "m" "p" "o" "s" "e" "d"    
[[3]]
[1] "f" "u" "g" "u" "e" "s"    
[[4]]
[1] "a" "n" "d"    
[[5]]
[1] "c" "a" "n" "t" "a" "t" "a" "s"

根据上述内容将每个单词中的字母打乱:

lapply(b2, function(x) sample(unlist(x), unlist(n), replace = T))
[[1]]
[1] "h" "a" "c" "b"   
[[2]]
[1] "o" "p" "o" "s"   
[[3]]
[1] "g" "s" "s" "u"    
[[4]]
[1] "d" "d" "a" "d"   
[[5]]
[1] "c" "n" "s" "a"

这显然不是正确的结果。如何随机打乱句子中每个单词的字母顺序?

最佳答案

b2之后,您可以使用sample随机打乱字符并将单词粘贴回来。

paste0(sapply(b2, function(x) paste0(sample(x), collapse = "")), collapse = " ")
#[1] "bhac moodscpe uefusg and tsatnaac"

请注意,如果您希望输出与使用 replace = FALSE< 时的输入长度相同,则无需在 sample 中提及 size/.

关于随机打乱句子中单词中的字母,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62149311/

相关文章:

Python 自动完成用户输入

python - 当单词不在句子中时无法让程序打印 "not in sentence"

r - 如何在R中生成具有一定等级的矩阵

R 检查 TRUE/FALSE 值列表的计算结果是否为 TRUE

r - 在匿名函数内的公式中使用 quosures

c# - 创建一个与之前运行的程序不同的随机整数

mysql - 从 mysql 中的函数调用 RAND() 返回相同的值 :

r - 从 R 中的 'cut()' 输出一个数值

ruby - Ruby 中的可重复随机性

pseudocode - 查看地址是否已写在句子中的算法