quanteda: подстановка корпуса на основе ключевых терминов в колонке заголовка

#r #subset #corpus #quanteda

Вопрос:

У меня есть корпус из примерно 8000 новостных статей, связанных с миграцией, мигрантами, убежищем и беженцами. Тем не менее, я хотел бы разбить этот корпус на статьи, которые содержат только эти термины в названии, потому что, похоже, некоторые статьи упоминают миграцию, но не сосредоточены на миграции. Любые советы о том, как это сделать, тем более, что, естественно, каждое название будет включать термины, отличные от наших ключевых терминов? Большое спасибо!

 library(quanteda)
library(stringr)

text_corp <- quanteda::corpus(lemma_data_2008, 
                             text_field="Texte")

 

Я попробовал следующее (у меня есть 4 ключевых термина, связанных с мигрантами и беженцами, также я надеюсь охватить несколько)

 corpus_subset(text_corp, str_detect(titre, fixed(c("migrant", "réfugié", "asile", "migratoire"), ignore_case = TRUE)))

 

однако объект «титр» не удалось найти (титр-это название на французском языке), хотя он существовал в виде столбца до того, как я преобразовал его в корпус.

Затем я перейду к следующему:

 dfm1 <- dfm(text_corp, remove_punct = TRUE, 
            remove_numbers = TRUE, 
            remove_symbol = TRUE, 
            remove = c(stopwords("french"), stop), dfm_remove = TRUE) %>% 
            dfm_trim(min_termfreq = 0.9, 
                termfreq_type = "quantile", 
                max_docfreq = 0.1, docfreq_type = "prop")

 

Комментарии:

1. Пожалуйста, проясните вашу конкретную проблему или предоставьте дополнительные сведения, чтобы точно указать, что вам нужно. Поскольку это написано в настоящее время, трудно точно сказать, о чем вы просите.

Ответ №1:

Здесь нет воспроизводимого примера или более точной спецификации вашего желаемого результата, но я думаю, что могу догадаться об этом, так что продолжайте.

Вы можете использовать corpus_subset() это в сочетании с логическим условием для определения терминов в вашем названии. В приведенном ниже примере мы ищем «два» в названии, независимо от его регистра (верхний, нижний, регистр заголовка и т. Д.).

 library("quanteda")
## Package version: 3.1.0

corp <- corpus(c("Text A", "Text B", "Text C", "Text D"),
  docvars = data.frame(title = c(
    "One two three",
    "four five",
    "Two six",
    "Seven eight"
  ))
)
corp
## Corpus consisting of 4 documents and 1 docvar.
## text1 :
## "Text A"
## 
## text2 :
## "Text B"
## 
## text3 :
## "Text C"
## 
## text4 :
## "Text D"

library("stringr")
corpus_subset(corp, str_detect(title, fixed("two", ignore_case = TRUE)))
## Corpus consisting of 2 documents and 1 docvar.
## text1 :
## "Text A"
## 
## text3 :
## "Text C"
 

Примечание: Существуют и другие способы сопоставления строк с вашим заголовком (кроме stringr::str_detect() того ), такие как аналогичные функции в stringi, или base::grepl() . Выбирай сам.

Комментарии:

1. Большое вам спасибо! Я поместил часть своего кода выше, особенно потому, что хотел бы отфильтровать несколько ключевых слов в названии.