1

我正在尝试将字符串解析为其部分,检查每个部分是否存在于单独的词汇表中,然后仅重新组合那些部分在词汇表中的字符串。词汇表是单词的向量,与我要比较的字符串分开创建。最终目标是创建一个数据框,其中仅包含单词部分在词汇表中的那些字符串。

我编写了一段代码将数据解析为字符串,但无法弄清楚如何进行比较。如果您认为解析数据不是最佳解决方案,请告诉我。

这是一个例子:假设我有三个字符串:

"The elephant in the room is blue",
"The dog cannot swim",
"The cat is blue"

我的词汇由以下单词组成:

cat,    **the**,    **elephant**,    hippo,
**in**,    run,    **is**,    bike,
walk,    **room, is, blue, cannot**

在这种情况下,我将只选择第一个和第三个字符串,因为它们的每个单词部分都与我词汇表中的一个单词匹配。我不会选择第二个字符串,因为“狗”和“游泳”这两个词不在词汇表中。

谢谢!

根据请求,附上我迄今为止编写的用于清理字符串并将它们解析为唯一单词的代码:

animals <- c("The elephant in the room is blue", "The dog cannot swim", "The cat is blue")

animals2 <- toupper(animals)
animals2 <- gsub("[[:punct:]]", " ", animals2)
animals2 <- gsub("(^ +)|( +$)|(  +)", " ", animals2)

## Parse the characters and select unique words only
animals2 <- unlist(strsplit(animals2," "))
animals2 <- unique(animals2)
4

1 回答 1

3

在这里我会怎么做:

  1. 读取数据
  2. 清除词汇以删除多余的空格和 *
  3. 循环字符串,使用setdiff

我的代码是:

## read your data
tt <- c("The elephant in the room is blue",
"The dog cannot swim",
"The cat is blue")
vocab <- scan(textConnection('cat,    **the**,    **elephant**,    hippo,
**in**,    run,    **is**,    bike,
walk,    **room, is, blue, cannot**'),sep=',',what='char')
## polish vocab
vocab <- gsub('\\s+|[*]+','',vocab)
vocab <- vocab[nchar(vocab) >0]
##
 sapply(tt,function(x){
+     x.words <- tolower(unlist(strsplit(x,' '))) ## take lower (the==The)
+     length(setdiff(x.words ,vocab)) ==0
+ })
The elephant in the room is blue              The dog cannot swim                  The cat is blue 
                            TRUE                            FALSE                             TRUE 
于 2013-07-18T18:19:42.573 回答