R语言 将字符串拆分为多个双字字符串

efzxgjgh  于 2023-02-01  发布在  其他
关注(0)|答案(4)|浏览(176)

我有一个很长的字符串(约1000个单词),我想把它分成两个单词的短语。
我有这个:

string <- "A B C D E F"

我想这样

"A B"
"B C"
"C D"
"D E"
"E F"

长字符串已经被清理和词干化,并且停用词已经被删除。
我尝试使用str_split,但是(我认为)这需要一个分隔符,这很复杂,因为我不想把A和B分开,只想把"AB"和"CD"分开,把"BC"和"DE"分开,等等。

x3naxklr

x3naxklr1#

按空格拆分,然后使用shift键 * 粘贴 *:

s <- unlist(strsplit(string, " ", fixed = TRUE))
sl <- length(s)
paste(s[1:(sl-1)], s[2:sl])
# [1] "A B" "B C" "C D" "D E" "E F"
jq6vz3qz

jq6vz3qz2#

tmp <- strsplit(string, " ")[[1]]
tmp
# [1] "A" "B" "C" "D" "E" "F"
sapply(seq_along(tmp)[-1], function(z) paste(tmp[z-1:0], collapse = " "))
# [1] "A B" "B C" "C D" "D E" "E F"
sulc1iza

sulc1iza3#

如果你已经使用了一些文本挖掘包(如清理、词干化和删除停用词),很可能会有一些东西生成n-gram(而不仅仅是bigram)。

string <- "A B C D E F"

quanteda::tokens_ngrams(quanteda::tokens(string), concatenator = " ")
#> Tokens consisting of 1 document.
#> text1 :
#> [1] "A B" "B C" "C D" "D E" "E F"

data.frame(s = string) |>
  tidytext::unnest_ngrams(input = "s", output = "bigrams", n = 2)
#>   bigrams
#> 1     a b
#> 2     b c
#> 3     c d
#> 4     d e
#> 5     e f

创建于2023年1月31日,使用reprex v2.0.2

qyzbxkaa

qyzbxkaa4#

一个选项是使用带有look ahead的正则表达式。

string <- "A B C D E F"

. <- gregexpr("\\S+\\s+(?=(\\S+))", string, perl=TRUE)[[1]]
attr(.,"match.length") <- attr(.,"match.length") + attr(., "capture.length")
regmatches(string, list(.))[[1]]
#[1] "A B" "B C" "C D" "D E" "E F"

相关问题