我正在使用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”?
答案 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"