Поиск глаголов в списке триграмм (с частичным совпадением?) - PullRequest
0 голосов
/ 17 сентября 2018

Я знаю, что есть много вопросов о частичных совпадениях, и я прочитал столько, сколько смог, но мне все еще не удалось извлечь то, что мне нужно, используя 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"))

Глаголы в третьем столбце («глагол») являются инфинитивами, и я хотел бы частично сопоставить их с глаголами в первом («триграмма»).Я думаю, что было бы идеально, в этом случае, иметь возможность использовать цикл for, чтобы перебрать 500 глаголов, которые я хочу частично сопоставить с моими более чем одним миллионом триграмм.

, поэтому в этом случае: «gustar» должен частично соответствовать «no me gusta», и ничто не должно совпадать с триграммами verbless, такими как «el caso que».

Я действительно надеюсь, что это имеет смысл, я никогда раньше не работал с таким количеством данных иЯ слишком новичок в регулярных выражениях, чтобы понять это самостоятельно.

1 Ответ

0 голосов
/ 17 сентября 2018

Я думаю, что этот подход с использованием stringr может помочь вам. Возможно, вам придется внести некоторые изменения, чтобы использовать его в dataframe. В основном мы должны преобразовать каждый глагол, такой как «хаблар», в шаблон, такой как '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"

Создано в 2018-09-16 пакетом представлением (v0.2.0).

...