使用 R 从文本中提取说话者的干预?或者是其他东西?

Extracting speaker interventions from a text using R? Or something else?

我们正在为学校开展一个关于魁北克国民议会中面向环境的演讲比例的文本挖掘项目。我们想提取多年来每位演讲者的发言清单。

我们的文档都是这样格式化的:

Mr. Smith : Blablabla

Mrs. Jones : Blablabla

我想做的是写出最简单的东西,使我能够提取这些干预措施。我在想一些事情:

“每次看到 [Mr. **** : ] 或 [Mrs. **** : ] 时,提取所有文本,直到看到另一个 [Mr. ** ** : ] 或 [**** 夫人 : ]。而且,理想情况下,将所有史密斯先生、琼斯夫人和威廉姆斯先生提取到单独的文件中,同时跟踪干预来自哪个文件。

我开始写一个非常基本的 gsub 行,它允许我用 @ 替换我想替换的事件,只是意识到我不想完全替换它们,而可能只是添加一个@ 在前面,这可能会使编写仅将 @s 分隔在不同文件中的内容变得更容易。

gsub("(Mr.|Mrs.)\s\w*\s:\s", "@", test)

我刚刚开始为这个项目自学 R,我需要一些关于下一步应该如何进行的见解。或者我应该改用其他东西吗?

如果你不想替换演讲者的名字,你可以使用所谓的'positive look ahead',像这样:

# some example data:
bla <- c("Mr. X : blablabla bla bla bla. Mrs. Y : bla bla blablablab Mr. XY : bla bla balblabla blabl abl" )

# replace with look ahead:
gsub("(?=(Mr.|Mrs.))", "@ ", bla, perl = T)
"@ Mr. X : blablabla bla bla bla. @ Mrs. Y : bla bla blablablab @ Mr. XY : bla bla balblabla blabl abl"

@ 是提取单个干预的良好起点。这可以这样做:

pattern <- "@.[^@]*" 
matches <- gregexpr(pattern, bla)
interventions <- regmatches(bla, matches)
interventions <- unlist(interventions)
interventions
[1] "@ Mr. X : blablabla bla bla bla. "      "@ Mrs. Y : bla bla blablablab "         "@ Mr. XY : bla bla balblabla blabl abl"