在句子中随机洗练字母。

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

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"

需要注意的是,你不需要提及的是 sizesample 如果你想让输出与输入的长度相同,那么使用 replace = FALSE.

给TA打赏
共{{data.count}}人
人已打赏
未分类

"ValueError.Shapes (None, 1) and (None, 6) are incompatible 形状(无,1)和(无,6)不兼容"

2022-11-13 21:05:25

未分类

`(chan n)`和`(chan (buffer n))`之间有什么区别吗?

2022-11-13 21:16:17

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索