0

我有一个包含很多句子的(正在运行的)文本。我有一个正则表达式,它能够提取以句号、问号或感叹号结尾的句子。一个句子的结尾必须跟在下一个句子的开头(空格/制表符/换行符和大写字母或数字)。我读取了存储在数据中的字符串并调用了正则表达式。

basic_pat = re.compile(r"[(']?\w.+[)']?[?.!](?=\s+[A-Z\d])")
result = basic_pat.findall(data)

如果我们不考虑缩写情况,这个正则表达式似乎是有效的。在文本中,我可能还有一些不以句号结尾的章节文本。例如:

这是第一章
这里是第一句话。这是第二句话。这里是第三个发送的ID。这是第四次发送...

我的问题是是否有可能有一个只读取章节文本的正则表达式以及一个读取句子的正则表达式。这些章节是一行中没有句号的松散文本。常规句子可能涵盖几行。也就是说,句子也可以在一行中包含没有句点的文本。是否可以用正则表达式区分这两种情况(章节与句子)?

4

1 回答 1

3

有些人在遇到问题时会想“我知道,我会使用正则表达式”。现在他们有两个问题。——杰米·扎温斯基

实际上,您应该做的是使用两个正则表达式(现在您将遇到四个问题)。

首先,将文本分解为交替的章节标题和非章节标题。然后检查每个非章节标题中的句子、段落和你有什么。

您将如何分解以下内容:

参观莱比锡,第一章:Thomaskirchhof St.

巴赫博物馆位于圣托马斯教堂对面的 Thomaskirchhof。范贝多芬在莱比锡的任何地方都没有博物馆。

处理自然语言非常困难。神在摧毁巴别塔时做得很彻底。

于 2011-11-06T20:19:08.293 回答