【发布时间】:2017-03-19 15:06:30
【问题描述】:
我正在尝试从语料库中删除撇号,但前提是它们是段落中的第一个字符。我看过关于在一个句子中找到第一个单词的帖子,但不是一个段落。
我尝试这样做的原因是因为我正在分析文本。我想去掉所有标点符号,但在单词中间留下撇号和破折号only。为了开始这个,我做了:
library(tm)
library(qdap)
#docs is any corpus
docs.test=tm_map(docs, PlainTextDocument)
docs.test=tm_map(docs.test, content_transformer(strip), char.keep=c("'","-"))
for(j in seq(docs.test))
{
docs[[j]] <- gsub(" \'", " ", docs[[j]])
}
这成功删除了所有撇号,除了那些在新行开始的撇号。要删除新行上的内容,我尝试过:
for(j in seq(docs.test))
{
docs[[j]] <- gsub("\r\'", " ", docs[[j]])
docs[[j]] <- gsub("\n\'", " ", docs[[j]])
docs[[j]] <- gsub("<p>\'", " ", docs[[j]])
docs[[j]] <- gsub("</p>\'", " ", docs[[j]])
}
总的来说,我认为找到一种方法来提取段落的第一个单词会很有用。对于我的具体问题,我正在尝试将其作为解决这些撇号的一种方式。我目前正在使用包 qdap 和 tm,但可以使用更多。
有什么想法吗?
谢谢!
【问题讨论】:
-
一种选择是使用tidytext 框架并使用标记器:
library(gutenbergr); library(tidyverse); library(tidytext); moby_dick <- gutenberg_download(2489); moby_dick %>% unnest_tokens(paragraph, text, token = 'paragraphs') %>% group_by(paragraph_n = row_number()) %>% unnest_tokens(word, paragraph) %>% slice(1)正则表达式也可以工作,但它的外观取决于文本的存储方式。 -
我尝试了你的建议,并且做了 fullplay= data_frame(file=c2name) %>% mutate(text = map(file, read_lines)) fullplay % unnest_tokens_(word, text) %>% mutate_(linenumber = row_number()) 我得到一个错误: unnest_tokens_(as.vector(fullplay)) 中的错误:unnest_tokens 期望输入的所有列都是原子向量(而不是列表)所以我尝试了这个 fullplay.new =unlist(fullplay$text) fullplay.new % unnest_tokens_(word, text) %>% mutate_(linenumber = row_number()) 出现错误 Error in tbl[[input_col]] : invalid subscript输入“关闭”
-
看不到数据结构很难说,但如果你有问题所暗示的语料库,请尝试 tidytext 的
tidy方法将其强制转换为 data.frame。
标签: r tm corpus punctuation paragraphs