Подсчитайте количество биграмм в предложениях в кадре данных - PullRequest
0 голосов
/ 13 июля 2020

У меня есть набор данных, который выглядит примерно так:

sentences <- c("sample text in sentence 1", "sample text in sentence 2")
id <- c(1,2) 

df <- data.frame(sentences, id)

Я хотел бы иметь счетчик, по которому я могу видеть появление определенных биграмм. Допустим, у меня есть:

trigger_bg_1 <- "sample text"

Я ожидаю, что на выходе будет 2 (так как в двух предложениях есть два вхождения «образца текста». Я знаю, как подсчитать слова следующим образом:

trigger_word_sentence <- 0

for(i in 1:nrow(df)){
  words <- df$sentences[i]
  words = strsplit(words, " ")
  
  for(i in unlist(words)){ 
    if(i == trigger_word_sentence){
      trigger_word_sentence = trigger_word_sentence + 1
    }
  }
}

Но я не могу заставить что-то работать для биграммы. Есть мысли о том, как мне изменить код, чтобы заставить его работать?

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

Ответы [ 3 ]

1 голос
/ 13 июля 2020

Если вы хотите подсчитать предложения, в которых есть совпадение, вы можете использовать grep:

length(grep(trigger_bg_1, sentences, fixed = TRUE))
#[1] 2

Если вы хотите подсчитать, сколько раз вы найдете trigger_bg_1, вы можете использовать gregexpr:

sum(unlist(lapply(gregexpr(trigger_bg_1, sentences, fixed = TRUE)
 , function(x) sum(x>0))))
#[1] 2
0 голосов
/ 13 июля 2020

Если вас действительно интересуют биграммы , а не просто набор словосочетаний, пакет quanteda может предложить более содержательный и c способ продвижения вперед:

Данные:

sentences <- c("sample text in sentence 1", "sample text in sentence 2")
id <- c(1,2) 
df <- data.frame(sentences, id)

Решение:

library(quanteda)
# strip sentences down to words (removing punctuation):
words <- tokens(sentences, remove_punct = TRUE)
# make bigrams, tabulate them and sort them in decreasing order:
bigrams <- sort(table(unlist(as.character(tokens_ngrams(words, n = 2, concatenator = " ")))), decreasing = T)

Результат:

bigrams
in sentence sample text     text in  sentence 1  sentence 2 
          2           2           2           1           1 

Если вы хотите проверить счетчик частоты указанного c биграммы:

bigrams["in sentence"]
in sentence 
          2
0 голосов
/ 13 июля 2020

Вы могли бы sum a grepl

sum(grepl(trigger_bg_1, df$sentences))
[1] 2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...