如何从R中的语料库中删除文本?

时间:2019-03-27 23:23:34

标签: r data-science text-mining tm quanteda

我正在使用tm软件包中的corpus_segment函数将长文档分为几章。

运行模式之后,我仍然剩下几个不需要的章节。我想以某种方式从语料库中删除这些内容。

我尝试在文档中查找此内容,但老实说似乎无法找出正确的方法。

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 :(得分:0)

虽然我不确定您的正则表达式是否按照您想要的方式对文本进行了分段,但这不是您的问题的一部分,因此我将向您展示您的要求。这涉及通过方式加载 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"