在三词组列表中查找动词(部分匹配吗?)

时间:2018-09-17 00:20:08

标签: r regex match partial trigram

我知道关于局部匹配有很多问题,我已经读了很多,但是我仍然没有设法使用R提取我需要的东西。

简而言之,我的问题是我有一个超过一百万行的西班牙语三元组的数据集,我只想查找那些有动词的数据集。为了简化操作,我添加了一行西班牙语最常见的500个动词,以尝试将它们与三字母组匹配。

我有一个这样的数据集:

data <- data_frame(trigrams= c("no veo que", "no me gusta", "si habla de", "la mesa de", "el caso que"), fequency=c(112, 345, 578), verb=c("hablar", "gustar", "leer"))

第三列中的动词(“动词”)是不定式,我想将它们与第一列中的动词(“ trigram”)进行部分匹配。我认为,在这种情况下,能够使用for循环来迭代要部分匹配超过一百万个三字组的500个动词是理想的。

所以在这种情况下: “ gustar”应部分匹配“ no me gusta”,没有任何内容应匹配“ el caso que”之类的无动词卦。

我真的希望这是有道理的,我以前从未使用过如此大量的数据,而且对于正则表达式我还太陌生,无法自己真正解决这个问题。

1 个答案:

答案 0 :(得分:0)

我认为这种使用stringr的方法可能会对您有所帮助。您可能必须进行一些修改才能在dataframe中使用它。基本上,我们必须将每个动词(例如“ hablar”)转换为诸如'hablar*'之类的模式,然后执行str_extract()-

library(dplyr)
library(stringr)


trigrams <- c("no veo que", "no me gusta", "si habla de", "la mesa de", "el caso que")
verb <- c("hablar", "gustar", "leer")

# loop through verbs for each verb compare all possible matches in the trigrams vector
# convert the nested list into a vector
result <- lapply(paste(verb,"*", sep = ""),str_extract, string = trigrams) %>%
            unlist(.)
# filter out na values
result <- result[!is.na(result)]

result
#> [1] "habla" "gusta"

由reprex程序包(v0.2.0)于2018-09-16创建。