【问题标题】:Extract First Word of a Paragraph R提取段落 R 的第一个单词
【发布时间】: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 &lt;- gutenberg_download(2489); moby_dick %&gt;% unnest_tokens(paragraph, text, token = 'paragraphs') %&gt;% group_by(paragraph_n = row_number()) %&gt;% unnest_tokens(word, paragraph) %&gt;% 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


【解决方案1】:

您没有提供测试示例,但这是一个保留单词内撇号和连字符的函数。它在不同的包中,但如最后的示例所示,如果您需要,很容易将其强制转换为常规列表:

require(quanteda)

txt <- c(d1 = "\"This\" is quoted.",
         d2 = "Here are hypen-words.",
         d3 = "Example: 'single' quotes.",
         d4 = "Possessive plurals' usage.")

(toks <- tokens(txt, removePunct = TRUE, removeHyphens = FALSE))
## tokens from 4 documents.
## d1 :
## [1] "This"   "is"     "quoted"
##
## d2 :
## [1] "quanteda's"  "hypen-words"
## 
## d3 :
## [1] "Example" "single"  "quotes" 
##
## d4 :
## [1] "Possessive" "plurals"    "usage"  

您可以通过这种方式返回列表,当然如果您需要通过sapply()ing paste(x, collapse = " ") 等返回文档。

as.list(toks)
## $d1
## [1] "This"   "is"     "quoted"
## 
## $d2
## [1] "quanteda's"  "hypen-words"
## 
## $d3
## [1] "Example" "single"  "quotes" 
## 
## $d4
## [1] "Possessive" "plurals"    "usage" 

【讨论】:

    猜你喜欢
    • 2013-08-14
    • 2018-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-27
    • 2021-05-16
    • 2010-10-15
    相关资源
    最近更新 更多