【发布时间】:2014-06-13 02:10:32
【问题描述】:
例如,我在向量中有一个元素“计算机”。我需要得到一个由“c”、“o”、“m”、“p”、“u”、“t”、“e”、“r”组成的向量。
我的问题的第二部分是可选的。如何创建一个包含上述向量元素的字母组合的向量,并且结果组合中的字母将仅按照原始单词中的顺序排列?例如,我想在这个向量中得到类似“puter”或“mpu”的东西,而不是“tumpo”。
【问题讨论】:
例如,我在向量中有一个元素“计算机”。我需要得到一个由“c”、“o”、“m”、“p”、“u”、“t”、“e”、“r”组成的向量。
我的问题的第二部分是可选的。如何创建一个包含上述向量元素的字母组合的向量,并且结果组合中的字母将仅按照原始单词中的顺序排列?例如,我想在这个向量中得到类似“puter”或“mpu”的东西,而不是“tumpo”。
【问题讨论】:
问题的第一部分真的很容易得到:
splits <- unlist(strsplit("computer",split=""))
> splits
[1] "c" "o" "m" "p" "u" "t" "e" "r"
对于第二部分,您可以使用以下代码:
subseqs <-
unlist(
lapply(1:length(splits),FUN=function(x){
lapply(1:(length(splits)+1-x),FUN=function(y){
paste(splits[y:(y+x-1)],collapse="") })
})
)
> subseqs
[1] "c" "o" "m" "p" "u" "t" "e"
[8] "r" "co" "om" "mp" "pu" "ut" "te"
[15] "er" "com" "omp" "mpu" "put" "ute" "ter"
[22] "comp" "ompu" "mput" "pute" "uter" "compu" "omput"
[29] "mpute" "puter" "comput" "ompute" "mputer" "compute" "omputer"
[36] "computer"
【讨论】:
你可以使用
strsplit("computer", "\\b")
和
library("RWeka")
gsub(" ", "",
NGramTokenizer(paste(strsplit("computer", "\\b")[[1]], collapse=" "),
Weka_control(min=2,
max=5)),
fixed=TRUE)
# [1] "compu" "omput" "mpute" "puter" "comp"
# [6] "ompu" "mput" "pute" "uter" "com"
# [11] "omp" "mpu" "put" "ute" "ter"
# [16] "co" "om" "mp" "pu" "ut"
# [21] "te" "er"
用 2
【讨论】:
对于三个连续的字母组合:
x <- strsplit("computer", "\\b")
y <- combn(seq(x),3); m <- match(1:6,y[1,])
combn (x,3)[,m]
【讨论】: