簡體   English   中英

R 匹配短語中的整個單詞

[英]R match whole words in phrases

我有一個字符向量

var1 <- c("pine tree", "forest", "fruits", "water")

和一個清單

var2 <- list(c("tree", "house", "star"),  c("house", "tree", "pine tree", "tree pine", "dense forest"), c("apple", "orange", "grapes"))

我想將 var1 中的單詞與 var2 中的單詞匹配,並提取 var2 中的最大匹配元素。 例如,

[[1]]
[1] "tree"  "house" "star" 

與 var1 有 1 場比賽

[[2]]
[1] "house"        "tree"         "pine tree"    "tree pine"    "dense forest"

與 var1 有 4 個匹配項

[[3]]
[1] "apple"  "orange" "grapes"

與 var1 有 0 個匹配

所需的輸出如下:

[[2]]
[1] "house"        "tree"         "pine tree"    "tree pine"    "dense forest"

我試過

sapply(var1, grep,  var2, ignore.case=T, value=T)

沒有獲得所需的輸出。

如何解決? 代碼片段將不勝感激。 謝謝。

我們為grepl創建一個模式字符串 ('pat'),首先將 'var1' 用空格'\\\\s+'分割。 輸出將是一個列表。 我們使用sapply循環遍歷列表,使用帶有collapse= '|' paste ,然后使用另一個paste將整個向量折疊為單個字符串。 | v1用作grepl模式時充當OR sum向量 ('v1') 將用於根據問題中描述的條件對list 'var2' 進行子集化。

 pat <- paste(sapply(strsplit(var1, '\\s+'), function(x)
     paste(unique(c(x, paste(x, collapse=' '))), collapse='|')),
     collapse='|')
 v1 <- sapply(var2, function(x) sum(grepl(pat, x)))
 v1
 #[1] 1 4 0
 var2[which.max(v1)]
 #[[1]]
 #[1] "house"        "tree"         "pine tree"    "tree pine"    "dense forest"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM