Как удалить текст из корпуса в R? - PullRequest
0 голосов
/ 28 марта 2019

Я делю длинный документ на главы, используя функцию corpus_segment в пакете tm.

После запуска шаблона у меня все еще остается пара нежелательных глав.Я бы хотел как-то удалить их из корпуса.

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

library(dplyr)
library(tm)
library(readtext)
frp2005 <- readtext("http://www.nsd.uib.no/polsys/data/filer/parti/H9368.html", encoding = "LATIN1")

tmp <- corpus(frp2005)

docvars(tmp, c("parti", "2005")) <- c("frp", 1)

frp_2005 <- tmp %>%
  corpus_segment(
    pattern ="\n[A-Z][a-z].*\\w\n.\\w",
    valuetype = "regex", 
    case_insensitive = FALSE)

Этот код приводит к тому, что документ разделен на 20 глав, 5 из которых я хотел бы удалить.

          Text Types Tokens Sentences parti 2005
  H9368.html.1   132    231        11   frp    1
  H9368.html.2     4      4         2   frp    1
  H9368.html.3   639   1421        80   frp    1
  H9368.html.4   728   1862       113   frp    1
  H9368.html.5   496   1217        71   frp    1

Как мне удалить, скажем, "H9368.html.4 "из этого корпуса?

1 Ответ

0 голосов
/ 03 апреля 2019

Хотя я не уверен, что ваше регулярное выражение сегментирует текст так, как вы хотели, это не было частью вашего вопроса, поэтому я покажу вам, что вы спросили.Это включает в себя загрузку пакета quanteda , кстати, и не требует ни tm , ни dplyr .

Вот как.

library("quanteda")
## Package version: 1.4.3
## Parallel computing: 2 of 12 threads used.
## See https://quanteda.io for tutorials and examples.
## 
## Attaching package: 'quanteda'
## The following object is masked from 'package:utils':
## 
##     View

frp2005 <- readtext::readtext("http://www.nsd.uib.no/polsys/data/filer/parti/H9368.html", encoding = "LATIN1")
tmp <- corpus(frp2005)
docvars(tmp, c("parti", "2005")) <- c("frp", 1)

frp_2005 <- tmp %>%
  corpus_segment(
    pattern = "\n[A-Z][a-z].*\\w\n.\\w",
    valuetype = "regex",
    case_insensitive = FALSE
  )

head(docnames(frp_2005))
## [1] "H9368.html.1" "H9368.html.2" "H9368.html.3" "H9368.html.4"
## [5] "H9368.html.5" "H9368.html.6"

Затем просто используйте corpus_subset() с исключением из имен документов, которые вы хотите исключить.Для более общего соответствия вы могли бы использовать grepl() или другую функцию, которая возвращает логическое значение для второго аргумента в corpus_subset().

corpus_subset(frp_2005, !docnames(frp_2005) %in% c("H9368.html.4")) %>%
  docnames() %>%
  head()
## [1] "H9368.html.1" "H9368.html.2" "H9368.html.3" "H9368.html.5"
## [5] "H9368.html.6" "H9368.html.7"
...