[英]Python extract sentence after a keyword is found
我有一个基于我提取的一些文本和关键字列表的字符串。 我想遍历字符串并仅提取找到关键字的句子之后的句子,并删除句号。
细绳
'Test string. removing data. keyword extraction. data number. 11123. final answer.'
这是我的关键短语列表:
lst= ['Test string', 'data number']
所需的 output:
['removing data', '11123']
请有人帮我指出正确的方向吗? 谢谢
这是我的建议:
s='Test string. removing data. keyword extraction. data number. 11123. final answer.'
temp = [i.strip() for i in s.split('.')]
res = [temp[temp.index(i)+1] for i in lst]
print(res)
Output:
['removing data', '11123']
它能做什么:
temp = [i.strip() for i in s.split('.')]
s.split('.')将您的字符串转换为字符串列表,按点分隔。 所以你把每个句子分开:
['Test string', ' removing data', ' keyword extraction', ' data number', ' 11123', ' final answer', '']
这被放在一个列表理解中,它从上面的列表中创建一个带有剥离值的新列表( i.strip()删除前导和尾随空格)。 所以你最终得到:
['Test string', 'removing data', 'keyword extraction', 'data number', '11123', 'final answer', '']
在最后一步有两件有趣的事情:
直截了当更安全:
res = [temp[idx+1] for idx, val in enumerate(temp) if val in lst]
有关枚举的更多信息,请查看文档。
这是一个解决方案。 本质上,您根据点和空格拆分输入以制作列表。 然后你遍历看看它是否存在。 如果是,则将下一个元素添加到 output 列表中。
代码:
input = 'Test string. removing data. keyword extraction. data number. 11123. final answer.'
input_as_list = input.split('. ')
lst = ['Test string', 'data number']
result = []
for i in range(0, len(input_as_list)):
for item in lst:
if input_as_list [i] == item :
result.append(input_as_list [i+1])
print(result)
结果:
['removing data', '11123']
使用list comprehension 、 re.split
和enumerate
:
import re
my_str = 'Test string. removing data. keyword extraction. data number. 11123. final answer.'
key_phrases = ['Test string', 'data number']
my_str_phrases = re.split(r'[.]\s*', my_str)
print([my_str_phrases[idx + 1] for idx, item in enumerate(my_str_phrases) if item in key_phrases])
# ['removing data', '11123']
笔记:
[.]\s*
:文字点(需要是字符 class []
的一部分或像这样转义:.),后跟 0 次或多次出现的空格。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.