在 txt 文件中的段落之间添加额外的行

Adding extra lines between paragraphs in txt files

我有 5000 多个新闻文章的 txt 文件,它们看起来就像下面的一样。我正在尝试创建一个语料库,为文件夹中每个 txt 文件的每个段落创建一个文档。 Quanteda R 包中有一个命令 (corpus_reshape) 可以帮助我创建包含段落而不是完整文章的语料库作为文档。但是,该命令无法识别文章 body 中的单个“输入”段落,而是寻找文本之间较大的间隙以确定一段的开始和结束位置。换句话说,从下面的文本文件中,该命令仅为文件创建。第一份文件以“Paying fo the Papal Visit”开头,第二份文件以“Copyright 1979 The Washington Post”开头,第三份文件以“NO ONE KNOWS”开头,最后一份文件以“End of Document”开头。但是 body 的文章(在“Body”和“文本结束”之间实际上由 corpus_reshape 无法识别的四个段落组成。

所以,我需要以某种方式回溯所有 5,000 多个 txt 文件并增加文本 body 中段落之间的空行数,这样,当我创建语料库时,它可以准确解析出所有段落。我将不胜感激任何帮助。谢谢!

更新:下面我在示例中添加了 link 到 txt 文件的可下载副本以及从 txt 文件复制的粘贴文本。

可下载link:

https://drive.google.com/file/d/1SO5S5XgNlc4H-Ms8IEvK_ogZ57qSoTkw/view?usp=sharing

粘贴的文本:

支付教皇访问费用 华盛顿 Post 1979 年 9 月 16 日,星期日,最终版 版权所有 1979 华盛顿 Post 部分:Outlook;社论; B6 长度:403 字 Body 没有人知道教皇约翰保罗二世 week-long U.S 有多少。访问最终会产生成本——甚至是如何计算成本。但谁来买单已经成为三个城市不必要的争议话题。费城和波士顿的一些宗教团体和 civil-liberties 团体正在挑战 - 或者 nit-picking - 这些城市政府提出的在与户外教皇群众相关的设施上花费 public 的提议;在纽约,当地和罗马天主教官员一直在就谁来支付费用的问题进行谈判。 但总的来说,在华盛顿、芝加哥和得梅因,这些细节都得到了应有的处理:没有在后勤方面造成 separation-of-church-and-state 问题。一个城市为最顺利和最安全地处理重大事件而支出是合法的世俗市政职能。就连美国政教分离联合会的一位发言人也同意,用 public 的钱进行清理、警察加班、警察保护和交通管制并没有错。 接待世界名人和巨大的投票率确实是昂贵的,正如地区官员在与国会讨价还价以寻求更多的联邦帮助来解决这些法案时经常提醒我们的那样。尽管如此,在首都这里,无论是教皇、愤怒的美国农民、anti-war 示威者还是 civil-rights 游行者,public 特殊服务的支出被认为是正常且必不可少的。其他城市 hair-splitting 的大部分 papal-visit 开支都与 public 金钱是否应该支付教皇庆祝户外弥撒的平台有关。对于宪法争议来说,这是一个漫长的过程,不值得。 在这里,政教分离团体在他们的规划中展示的那种合作要好得多。例如,将有一个围绕着舞台和祭坛的链条link 围栏,教皇将在广场上做弥撒,并延伸到附近的其他区域。警方推荐围栏,估计耗资约25,000美元,教堂已同意支付舞台和祭坛周围的部分。为了帮助清理,教会计划在周一假期派出数百名童子军担任志愿者。这种访问方式比 drawn-out 争论和法律诉讼威胁要明智得多,对所有纳税人都有帮助。 文件结束

这将在这些段落的末尾添加 3 行。使用的逻辑是当行长度大于 50 时添加额外的行。您可能想修改它。之所以选择它,是因为您满意的“段落”中最长的一行是 46 个字符。

txt <- readLines("/home/david/Documents/R_code/misc files/WP_1979.9.16.txt")
spread <- ifelse( nchar(txt) < 50, 
                  paste0(txt, "\n") , # these lines are left alone
                  paste0( txt, "\n\n\n\n") ) # longer lines are padded
cat(spread, file="/home/david/Documents/R_code/misc files/spread.txt" )

cat 函数修改的行不多,但它确实省略了 readLines 输入时未包含的 returns。输入文本中的一些“行”是空的:

nchar(txt)
 [1]   0   0  26  19  41   0   0  34  31  17   4   0   0 566 519 643 672   0   0  15

现在 spread.txt 上的相同操作会产生不同的“图片”。我认为添加 "\n" 个字符的填充是改变计数的原因,但我认为语料库处理机器不会介意:

nchar( readLines("/home/david/Documents/R_code/misc files/spread.txt" ))
#------------
 [1]   0   1  27  20  42   1   1  35  32  18   5   1   1 567   0   0   0 520   0   0   0 644   0   0   0 673   0
[28]   0   0   1   1  16
>