#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. Большое вам спасибо! Я поместил часть своего кода выше, особенно потому, что хотел бы отфильтровать несколько ключевых слов в названии.