【问题标题】:can't remove blank lines in txt file with R无法使用 R 删除 txt 文件中的空行
【发布时间】:2016-06-13 09:24:31
【问题描述】:

我正在使用 R 进行文本分析,需要将句子的第一个字母转换为小写,同时保持其他大写单词的原样。所以我使用了命令

     x <- gsub("(\\..*?[A-Z])", '\\L\\1', x, perl=TRUE)

这有效,但部分有效。问题是,对于文本分析,我必须将 pdf 文件转换为 txt 格式,现在 txt 文件包含很多空行(分页符,可能返回),因此我使用的命令不会转换大写字母出现在新行上。我试图在 gsub 中使用多个 \s、\r、\n 的不同组合来消除空行,但没有任何效果。当我执行 tm-package 的 inspect(x) 时,输出如下所示:

[346]                                                                                                                                                                                                                                                  
[347]    Thank you.                                                                                                                                                                                                                                    
[348]                                                                                                                                                                                                                                                  
[349]    Vice President of Investor Relations                                                                                                                                                                                               
[350]   

如果有人可以帮助我,我将不胜感激!

【问题讨论】:

  • the first letters of the sentences 是什么意思?多少个字母?他们都是?其中一些?
  • 只是第一个大写字母,所以看起来像:[341] efficiency and productivity. we think that

标签: r text gsub blank-line


【解决方案1】:

根据您的输出,空行似乎是字符向量中的单独字符串。您需要使用grep 过滤掉那些:

empty_lines = grepl('^\\s*$', x)
x = x[! empty_lines]

然后你可以执行你的后续分析,但你可能仍然需要先连接这些行以获得单个字符串:

x = paste(x, collapse = '\n')

【讨论】:

  • @Kohrad Rudolph 谢谢!我已经尝试过了,但我收到以下错误消息:Error in UseMethod("meta", x) : no applicable method for 'meta' applied to an object of class "character"
  • @Daria 我的代码中没有调用“meta”,所以我不知道这个错误来自哪里。您要么使用不同的代码,要么您的 R 会话以非常奇怪的方式重新定义了一些核心 R 结构。
  • 我用x &lt;- gsub("^\\s+|\\s+$", "", x) 命令解决了这个问题。感谢您的帮助!
  • 您是不是要使用grepl 而不是grep? (! 的使用表明)另一种可能是trimws(x) == ""
  • 我个人在大多数情况下更喜欢grepl,并且也会在这里使用它,因为如您所知,grep 在没有匹配项时会出现问题。
【解决方案2】:

您可以使用^[A-Z] 获取新行,并使用或符号| 分隔两个案例

x <- gsub("(\\..*?[A-Z]|^[A-Z])", '\\L\\1', x, perl=TRUE)

您可以在上述步骤之前或之后删除空行

x <- x[x != ""]

【讨论】:

  • 谢谢!后者对我有用!但是,我仍然遇到问题,我将在下一条评论中发布一个示例。基本上在行的开头还有“额外”的空格......
  • [283] web tool. [284] No, we're not providing any specific targets for the second quarter. [285] Thank you.
  • 您可以使用gsub("^ ", "", x) 去除行首的空格
猜你喜欢
  • 2021-08-02
  • 1970-01-01
  • 2020-11-23
  • 1970-01-01
  • 2023-01-11
  • 1970-01-01
  • 1970-01-01
  • 2013-06-19
  • 1970-01-01
相关资源
最近更新 更多