【问题标题】:string matching in RR中的字符串匹配
【发布时间】:2013-11-08 08:08:24
【问题描述】:

我有四个字。它们是 wordA、wordB、wordX 和 wordY。我有一个由 1 列(消息)组成的数据集,消息列的数据类型是因子。我想计算 (wordX 和 wordY) 的出现总数,然后从每行中 (wordA 和 wordB) 的出现中减去它,然后将结果放入该行的新列中。

例如,如果消息列的文本是“wordD wordA wordX wordA wordC wordA wordB wordY”,则该值应等于 wordA-wordX+wordA+wordA+wordB-wordY= 1-1+1+1+1 -1= +2。

我编写了这段代码,但它不计算重复的单词。如果您能帮助我,我将不胜感激。

for(i in 1:nrow(dataset){
counter=0

if(length(grep("wordA",dataset[i,1],)==1)){
counter=counter+1;
}
if(length(grep("wordB",dataset[i,1])==1)){
counter=counter+1;
}
if(length(grep("wordX",dataset[i,1])==1)){
counter=counter-1;
}
if(length(grep("wordY",dataset[i,1])==1)){
counter=counter-1;
}
dataset[i,2]=counter;
}   

【问题讨论】:

  • 请查看link。一个良好的可重复示例将帮助其他人更轻松地解决您的问题。
  • 问题描述中似乎有“行”和“列”的混淆,匹配的内容也很模糊。生成创建 set_A 和 set_B 的代码,并解释为什么“消息列”应该有一个值或 +2。

标签: r pattern-matching


【解决方案1】:

您也可以使用gregexpr,它会找到给定模式的每次出现并输出每个匹配项的起始位置。

messages <- c("wordD wordA wordX wordA wordC wordA wordB wordY",
              "wordX wordA wordY wordY wordC wordD wordB wordY",
              "wordB wordA wordX wordA wordB wordA wordB wordY")
score <- sapply(gregexpr("wordA|wordB", messages), length) - 
            sapply(gregexpr("wordX|wordY", messages), length)

【讨论】:

    【解决方案2】:

    我不完全确定这是否是您要查找的内容,但这是我认为您可能会问的内容。您想根据存在的单词对句子或短语向量的每个元素(例如mess&lt;-c("some stuff here", "some stuff not here", "most stuff here"))进行评分。某些单词的存在会使分数增加+1,而其他单词的存在会使分数增加-1。在我的示例中,添加 +1 的单词是“here”和“stuff”,添加 -1 的单词是“some”和“most”。

    # vector  
    mess <- c("some stuff here", "some stuff not here", "most stuff here")
    
    positiveword <- lapply(strsplit(mess," "), function(x)grepl("here|stuff",x))
    positiveword <- lapply(positiveword, sum)
    
    negativeword <- lapply(strsplit(mess," "), function(x)grepl("some|most",x))
    negativeword <- lapply(negativeword, sum)
    score <- unlist(positiveword) - unlist(negativeword)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-02
      • 2019-10-06
      • 2013-05-29
      • 2013-04-15
      • 2015-03-26
      • 2015-04-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多