Если вы хотите исключить параграфов / предложений , которые содержат «фискальную политику», вам необходимо сначала преобразовать текст в абзацы, а затем отфильтровать термины, содержащие фразу исключения, и только затем .
Если вы отфильтруете текст до создания корпуса, вы исключите абзацы нефильтрованной фразы из входного текста, который также содержит фильтрующую фразу (фразы).
library("quanteda")
## Package version: 2.0.1
set.seed(10)
txt <- c(
"PAGE 1. A single sentence. Short sentence. Three word sentence. \n\n Quarentine is hard",
"PAGE 2. Very short! Shorter.\n\n quarantine is very very hard",
"Very long sentence, with three parts, separated by commas. PAGE 3.\n\n quarantine it's good tough to focus on paper.",
"Fiscal policy is a bad thing. \n\n SO is a great place where skilled people solve coding problems.",
"Fiscal policy is not as good as people may think",
"Economics is fun. \n\n I prefer Macro."
)
corp <- corpus(txt, docvars = data.frame(serial = 1:6)) %>%
corpus_reshape(to = "paragraphs")
tail(corp)
## Corpus consisting of 6 documents and 1 docvar.
## text3.2 :
## "quarantine it's good tough to focus on paper."
##
## text4.1 :
## "Fiscal policy is a bad thing."
##
## text4.2 :
## "SO is a great place where skilled people solve coding proble..."
##
## text5.1 :
## "Fiscal policy is not as good as people may think"
##
## text6.1 :
## "Economics is fun."
##
## text6.2 :
## "I prefer Macro."
Теперь мы можем подмножество на основе сопоставления с образцом.
corp2 <- corpus_subset(corp, !grepl("fiscal policy", corp, ignore.case = TRUE))
tail(corp2)
## Corpus consisting of 6 documents and 1 docvar.
## text2.2 :
## "quarantine is very very hard"
##
## text3.1 :
## "Very long sentence, with three parts, separated by commas. ..."
##
## text3.2 :
## "quarantine it's good tough to focus on paper."
##
## text4.2 :
## "SO is a great place where skilled people solve coding proble..."
##
## text6.1 :
## "Economics is fun."
##
## text6.2 :
## "I prefer Macro."
corpus_sample(corp2, size = 4)
## Corpus consisting of 4 documents and 1 docvar.
## text6.2 :
## "I prefer Macro."
##
## text1.2 :
## "Quarentine is hard"
##
## text2.2 :
## "quarantine is very very hard"
##
## text3.2 :
## "quarantine it's good tough to focus on paper."
Абзацы, содержащие «фискальную политику», пропали.
Обратите внимание, что здесь я использовал grepl()
, но Всеобъемлющая превосходящая замена - str_detect()
из stringi (или эквивалентные stringr оболочки). Это также дает вам больший контроль над возможностью использовать более быстрое фиксированное сопоставление и одновременно контролировать соответствие регистров.
all.equal(
grepl("fiscal policy", txt, ignore.case = TRUE),
stringi::stri_detect_fixed(txt, "fiscal policy", case_insensitive = TRUE),
stringr::str_detect(txt, fixed("fiscal policy"), case_insensitive = TRUE)
)
## [1] TRUE