我有一个包含很多句子的(正在运行的)文本。我有一个正则表达式,能够提取由句号,问题或感叹号终止的句子。句子的结尾必须跟着下一句的开头(白色空格/制表符/新行和大写字母或数字)。我读了一个存储在数据中的字符串,并调用了正则表达式。
basic_pat = re.compile(r"[(']?\w.+[)']?[?.!](?=\s+[A-Z\d])")
result = basic_pat.findall(data)
如果我们不考虑缩写案例,这个正则表达式似乎有效。 在文中我可能还有一些不以句号结尾的章节文本。例如:
这是第一章 这是第一句话。这是第二句。这是第三个发送的ids。这是 第四个发送......
我的问题是,是否有可能只有一个正则表达式只读取章节文本以及读取句子的正则表达式。这些章节是一行中没有句号的松散文本。常规句子可能涵盖几行。也就是说,句子也可以在没有句号的行中包含文本。是否有可能用正则表达式区分这两种情况(章节与句子)?
答案 0 :(得分:3)
有些人在遇到问题时会想“我知道,我会用 正则表达式。“现在他们有两个问题。 - 杰米·扎温斯基
实际上,你应该做的是使用两个正则表达式(现在你将有四个问题)。
首先,将文本分解为交替的章节标题而不是章节标题。然后检查每个非章节标题的句子,段落和你有什么。
你将如何分解以下内容:
访问莱比锡,第一章:Thomaskirchhof St.
巴赫博物馆位于托马斯基希霍夫圣托马斯教堂对面。 范贝多芬没有 莱比锡任何地方的博物馆。
处理自然语言非常困难。当他摧毁巴别塔时,上帝做了彻底的工作。