在R列表功能中搜索

时间:2020-06-04 11:24:01

标签: r

我做了以下功能,以便仅输出包含“关键字”中所有单词的句子:

ricerca <- function(sentences,keywords){
  for(i in 1:length(keywords)){
    sentences <- lapply(sentences, function(x) grep(keywords[i], x, value = TRUE))
    sentences <-unlist(sentences[lengths(sentences) > 0])
    return (sentences)
  }
}

我使用unlist是因为输入的句子在get_sentences(sentimentr)列表中。

以下是其中的一部分:

> frasi_negative[4:5]
[[1]]
[1] "Per la musica non è male ma per le telefonate è completamente unutile."                               
[2] "L'altro interlocutore non mi sente."                                                                  
[3] "Quindi mi costringe a disabilitare il bluetooth per rispondere."                                      
[4] "Il problema ulteriore è che dopo pochi secondi il bluetooth si ricollega automaticamente alle cuffie."
[5] "Quindi bisogna disabilitarlo nuovamente e cosi via."                                                  
[6] "Da impazzire ..."                                                                                     
[7] "Altro problema è che a volte riponendo le cuffiette nella custodia non si spegnevano."                
[8] "Insomma prodotto molto economico e scarsamente funzionale."                                           
[9] "Lo sconsiglio."                                                                                       

[[2]]
[1] "L'auricolare sinistro non si è mai connesso all'altro."                                                                                                                                               
[2] "Provando a seguire le istruzioni oppure le dritte trovate in risposta alle domande qui su amazon non ho risolto, inoltre il lampeggiare delle lucine non corrispondeva mai a quello che era indicato."
[3] "Le ho rimandate indietro."                                                                                                                                                                            
[4] "Peccato perchè il suono della destra era ottimo e il prodotto molto carino" 

当我尝试使用函数时

ricerca(frasi_negative, c("audio","pessimo"))

输出显示仅包含一个关键字的句子。

> ricerca(frasi_negative, c("audio","pessimo"))
 [1] "Audio basso, bassi praticamente inesistenti se non aumentandoli a dismisura dal audio manager del telefono."                                                                                                                                                                                                                                                                                  
 [2] "Correndo, a seconda della posizione del telefono, l'audio scompare brevemente." 

您能告诉我为什么会发生这种情况,以及如何解决此问题吗?

非常感谢。

更新:

> dput(frasi_negative[4:5])
list(c("Per la musica non è male ma per le telefonate è completamente unutile.", 
"L'altro interlocutore non mi sente.", "Quindi mi costringe a disabilitare il bluetooth per rispondere.", 
"Il problema ulteriore è che dopo pochi secondi il bluetooth si ricollega automaticamente alle cuffie.", 
"Quindi bisogna disabilitarlo nuovamente e cosi via.", "Da impazzire ...", 
"Altro problema è che a volte riponendo le cuffiette nella custodia non si spegnevano.", 
"Insomma prodotto molto economico e scarsamente funzionale.", 
"Lo sconsiglio."), c("L'auricolare sinistro non si è mai connesso all'altro.", 
"Provando a seguire le istruzioni oppure le dritte trovate in risposta alle domande qui su amazon non ho risolto, inoltre il lampeggiare delle lucine non corrispondeva mai a quello che era indicato.", 
"Le ho rimandate indietro.", "Peccato perchè il suono della destra era ottimo e il prodotto molto carino"
))                                                                                                                   

2 个答案:

答案 0 :(得分:2)

您几乎只能用1行Base-R代码实现这一目标

sentences <- unlist(frasi_negative)[lengths(frasi_negative) > 0]
sentences[which(apply(sapply(keywords,grepl,sentences),1,all))]

带有keywords <- c("il","della")的示例 outpu [1] "Peccato perchè il suono della destra era ottimo e il prodotto molto carino"


编辑:不需要which函数,我们可以简化为:

sentences[apply(sapply(keywords,grepl,sentences),1,all)]

数据:

a <- c("Per la musica non è male ma per le telefonate è completamente unutile.","L'altro interlocutore non mi sente.","Quindi mi costringe a disabilitare il bluetooth per rispondere.","Il problema ulteriore è che dopo pochi secondi il bluetooth si ricollega automaticamente alle cuffie.","Quindi bisogna disabilitarlo nuovamente e cosi via.","Da impazzire ...","Altro problema è che a volte riponendo le cuffiette nella custodia non si spegnevano.","Insomma prodotto molto economico e scarsamente funzionale.","Lo sconsiglio.")                                                                                       
b<- c("L'auricolare sinistro non si è mai connesso all'altro.","Provando a seguire le istruzioni oppure le dritte trovate in risposta alle domande qui su amazon non ho risolto, inoltre il lampeggiare delle lucine non corrispondeva mai a quello che era indicato.","Le ho rimandate indietro.","Peccato perchè il suono della destra era ottimo e il prodotto molto carino")
frasi_negative <- list(a,b)

答案 1 :(得分:0)

Base R解决方案:

# Function; ricera => function
ricera <- function(sentences, keywords){
  keywords <- unique(keywords)
  matches <- lapply(sentences, function(w){
    matched <- lapply(keywords, function(x){grep(x, w, value = TRUE)})
    Reduce(function(y, z){intersect(y, z)}, matched)
    }
  )
  Filter(Negate(is.null), unlist(matches))
}

# Application: charater vector => stdout console
ricera(text_list, c("problema", "non"))

数据:

text_list <- list(c("Per la musica non è male ma per le telefonate è completamente unutile.",                             
"L'altro interlocutore non mi sente.",                                                                 
"Quindi mi costringe a disabilitare il bluetooth per rispondere.",                                    
"Il problema ulteriore è che dopo pochi secondi il bluetooth si ricollega automaticamente alle cuffie.",
"Quindi bisogna disabilitarlo nuovamente e cosi via.",                                               
"Da impazzire ...",                                                                                     
"Altro problema è che a volte riponendo le cuffiette nella custodia non si spegnevano.", 
"Insomma prodotto molto economico e scarsamente funzionale.",
"Lo sconsiglio."), 
c("L'auricolare sinistro non si è mai connesso all'altro.",                                                                                                                                               
"Provando a seguire le istruzioni oppure le dritte trovate in risposta alle domande qui su amazon non ho risolto, inoltre il lampeggiare delle lucine non corrispondeva mai a quello che era indicato.",
"Le ho rimandate indietro.",                                                                                                                                                                            
"Peccato perchè il suono della destra era ottimo e il prodotto molto carino"))