选择关键字周围的句子

时间:2014-10-10 02:26:51

标签: python-2.7

我是Python初学者。我试图解决这个问题,但我失败了。我需要在文本文件中找到一个关键字。如果整个文本的任何部分都有关键字,那么我需要选择关键字周围的句子,包括关键字。句子的数量是任意的,因此它可以是5或10.句子之间可能有一个空行,所以我也需要包括空白行。

例如:

让关键字为:补偿

让输入文字为:

"我们征求和获得代理人的附带费用,包括偿还银行和经纪人将代理材料转发给其委托人的费用,将由我们承担。我们的官员和员工可以通过亲自或通过邮件,电话和其他通信方式索取代理,无需额外补偿。"

我想要的输出例如:"成本附带......补偿......沟通。"

我尝试使用它:p = re.compile(r' [^。] compensation [^。] +。')p.findall(text)

使用上面的代码,我只能选择包含关键字的句子。我需要的是选择围绕关键字的句子。我需要控制包含关键字的句子之前和之后的句子数量。例如,如果我想在包含关键字的句子之前选择两个句子,包含关键字的句子和包含关键字的句子之后的两个句子,我该怎么办?

1 个答案:

答案 0 :(得分:0)

假设您的输入结构如此:< sentence> <周期> <句子GT; <周期>

然后,您需要首先选择可能以您的关键字开头的完整句子,以您的关键字结尾,每个匹配的关键字(尽管不太可能)开始和结束。然后你选择< sentence>的数量。 <周期>以前和以后一样。

import re

s = open('text.txt', 'r').read()
p = re.compile(r'(([^\.]*\.){2}[^\.]*compensation[^\.]*\.([^\.]*\.){3})')
for i in p.findall(s):
  print("match='" + i[0] + "'")

因为我们正在使用群组元字符'('和')',所以findall()将返回这些元组的列表,而不是我们想要的。所以我们在整个正则表达式周围添加一个组(它必然是第一组,因为它是最外层的组)。

编辑:另一种可能性是使用非捕获组(?:...)。 findall()只返回与那些匹配的完整匹配。

允许在(2)之前和之后(3)之间匹配的数字或句子变为运动(这应该很容易使用Python的字符串格式化设施)。

输出

  

匹配='神圣的培根。我们的招揽和附带的附带费用   获得代理人,包括偿还银行和   将代理材料转发给其负责人的经纪人将是   由我们承担。可以征求代理,无需额外补偿   我们的官员和员工,无论是亲自还是通过邮件,电话和   其他沟通方式。我的。天啊。神'

     

匹配=' C. D.我的赔偿是你的赔偿。 E. F. G。'

使用的文字

  

天哪。天啊。神圣的培根。我们的招揽和附带的附带费用   获得代理人,包括偿还银行和   将代理材料转发给其负责人的经纪人将是   由我们承担。可以征求代理,无需额外补偿   我们的官员和员工,无论是亲自还是通过邮件,电话和   其他沟通方式。我的。天啊。神。感觉。好。成为。   丛林之王。

     

一个。 B. C. D.我的赔偿是你的赔偿。 E. F. G.嗨。 Ijjk。   Lllme。