Python 按字符串的元素拆分,并使用{用于拆分的元素:该文本块}创建字典

Python 按字符串的元素拆分,并使用{用于拆分的元素:该文本块}创建字典,python,python-2.7,split,text-analysis,Python,Python 2.7,Split,Text Analysis,考虑以下案文: "Mr. McCONNELL. yadda yadda jon stewart is mean to me. The PRESIDING OFFICER. Suck it up. Mr. McCONNELL. but noooo. Mr. REID. Really dude?" 以及要拆分的单词列表: ["McCONNELL", "PRESIDING OFFICER", "REID"] 我想让输出成为字典 {"McCONNELL": "yadda yadd jon stew

考虑以下案文:

"Mr. McCONNELL. yadda yadda jon stewart is mean to me. The PRESIDING OFFICER. Suck it up. Mr. McCONNELL. but noooo. Mr. REID. Really dude?" 
以及要拆分的单词列表:

["McCONNELL", "PRESIDING OFFICER", "REID"]
我想让输出成为字典

{"McCONNELL": "yadda yadd jon stewart is mean to me. but noooo.", 
"PRESIDING OFFICER": "Suck it up. "
"REID": "Really dude?"}
因此,我需要一种按列表元素(在任何名称上)拆分的方法,然后知道它拆分的是哪一个,并能够将其映射到拆分中的文本块。如果有多个文本块具有相同的说话人(“在本例中为McCONNELL”),只需连接字符串即可


编辑:这是我一直在使用的函数。在这个例子中它是有效的,但是当我在更大范围内尝试它时,它并不健壮(并且不清楚为什么它会出错)

使用“标准库”定义拆分。提示:拆分“分隔符”-正则表达式-可以是以下形式:
(WORD1 | WORD2 | WORD3)

请参见重新拆分的结果

import re

text = "Mr. McCONNELL. yadda yadda jon stewart is mean to me. The PRESIDING OFFICER. Suck it up. Mr. McCONNELL. but noooo. Mr. REID. Really dude?"

speakers = ["McCONNELL", "PRESIDING OFFICER", "REID"]

speakers_re = re.compile('(' + '|'.join([re.escape(s) for s in speakers]) + ')')

print speakers_re.split(text)
结果:

['Mr. ', 'McCONNELL', 
 '. yadda yadda jon stewart is mean to me. The ', 
 'PRESIDING OFFICER', '. Suck it up. Mr. ', 
 'McCONNELL', '. but noooo. Mr. ', 'REID', '. Really dude?']
删除不必要的标点符号也可以通过regexps或字符串的简单.rstrip()和.lstrip()方法来完成。

使用标准库来定义拆分。提示:拆分“分隔符”-正则表达式-可以是以下形式:
(WORD1 | WORD2 | WORD3)

请参见重新拆分的结果

import re

text = "Mr. McCONNELL. yadda yadda jon stewart is mean to me. The PRESIDING OFFICER. Suck it up. Mr. McCONNELL. but noooo. Mr. REID. Really dude?"

speakers = ["McCONNELL", "PRESIDING OFFICER", "REID"]

speakers_re = re.compile('(' + '|'.join([re.escape(s) for s in speakers]) + ')')

print speakers_re.split(text)
结果:

['Mr. ', 'McCONNELL', 
 '. yadda yadda jon stewart is mean to me. The ', 
 'PRESIDING OFFICER', '. Suck it up. Mr. ', 
 'McCONNELL', '. but noooo. Mr. ', 'REID', '. Really dude?']
删除不必要的标点符号也可以通过regexps或字符串的简单.rstrip()和.lstrip()方法来完成。

使用标准库来定义拆分。提示:拆分“分隔符”-正则表达式-可以是以下形式:
(WORD1 | WORD2 | WORD3)

请参见重新拆分的结果

import re

text = "Mr. McCONNELL. yadda yadda jon stewart is mean to me. The PRESIDING OFFICER. Suck it up. Mr. McCONNELL. but noooo. Mr. REID. Really dude?"

speakers = ["McCONNELL", "PRESIDING OFFICER", "REID"]

speakers_re = re.compile('(' + '|'.join([re.escape(s) for s in speakers]) + ')')

print speakers_re.split(text)
结果:

['Mr. ', 'McCONNELL', 
 '. yadda yadda jon stewart is mean to me. The ', 
 'PRESIDING OFFICER', '. Suck it up. Mr. ', 
 'McCONNELL', '. but noooo. Mr. ', 'REID', '. Really dude?']
删除不必要的标点符号也可以通过regexps或字符串的简单.rstrip()和.lstrip()方法来完成。

使用标准库来定义拆分。提示:拆分“分隔符”-正则表达式-可以是以下形式:
(WORD1 | WORD2 | WORD3)

请参见重新拆分的结果

import re

text = "Mr. McCONNELL. yadda yadda jon stewart is mean to me. The PRESIDING OFFICER. Suck it up. Mr. McCONNELL. but noooo. Mr. REID. Really dude?"

speakers = ["McCONNELL", "PRESIDING OFFICER", "REID"]

speakers_re = re.compile('(' + '|'.join([re.escape(s) for s in speakers]) + ')')

print speakers_re.split(text)
结果:

['Mr. ', 'McCONNELL', 
 '. yadda yadda jon stewart is mean to me. The ', 
 'PRESIDING OFFICER', '. Suck it up. Mr. ', 
 'McCONNELL', '. but noooo. Mr. ', 'REID', '. Really dude?']


删除不必要的标点符号也可以通过regexps或字符串的简单.rstrip()和.lstrip()方法来完成。

这很好。到目前为止你试过什么?堆栈溢出不是代码编写服务。我将添加我尝试过的凌乱函数。没问题。。。在我给出的例子中,它可以很好地工作,但是它不够健壮,有时不能正确地对齐说话人和文本块。这不是真正的分裂,它是一种稍微复杂一点的解析。另外,如果你真的按照你的要求去做,你会得到
”。yadda yadda jon stewart对我来说很刻薄。但是,noooo.Mr.“
,和
”。真的吗?
作为你的输出字符串。这真的是你想要的吗?如果没有,你能用英语描述一下你想要什么吗?因为如果不能的话,很难翻译成Python。是的,我对混乱的匹配没意见。我可能会在拆分后清理一下(比如如果“the”、“Mr.”等”的最后一个单词)“在更大范围内尝试时不健壮”是一件很难调试的事情。你们能给我们一个实际的可复制的测试用例,包括输入、预期和实际输出吗?或者,如果你不能找出一个可复制的测试用例,至少给我们你尝试过的,这样其他人就可以了?这很好。到目前为止你试过什么?堆栈溢出不是代码编写服务。我将添加我尝试过的凌乱函数。没问题。。。在我给出的例子中,它可以很好地工作,但是它不够健壮,有时不能正确地对齐说话人和文本块。这不是真正的分裂,它是一种稍微复杂一点的解析。另外,如果你真的按照你的要求去做,你会得到
”。yadda yadda jon stewart对我来说很刻薄。但是,noooo.Mr.“
,和
”。真的吗?
作为你的输出字符串。这真的是你想要的吗?如果没有,你能用英语描述一下你想要什么吗?因为如果不能的话,很难翻译成Python。是的,我对混乱的匹配没意见。我可能会在拆分后清理一下(比如如果“the”、“Mr.”等”的最后一个单词)“在更大范围内尝试时不健壮”是一件很难调试的事情。你们能给我们一个实际的可复制的测试用例,包括输入、预期和实际输出吗?或者,如果你不能找出一个可复制的测试用例,至少给我们你尝试过的,这样其他人就可以了?这很好。到目前为止你试过什么?堆栈溢出不是代码编写服务。我将添加我尝试过的凌乱函数。没问题。。。在我给出的例子中,它可以很好地工作,但是它不够健壮,有时不能正确地对齐说话人和文本块。这不是真正的分裂,它是一种稍微复杂一点的解析。另外,如果你真的按照你的要求去做,你会得到
”。yadda yadda jon stewart对我来说很刻薄。但是,noooo.Mr.“
,和
”。真的吗?
作为你的输出字符串。这真的是你想要的吗?如果没有,你能用英语描述一下你想要什么吗?因为如果不能的话,很难翻译成Python。是的,我对混乱的匹配没意见。我可能会在拆分后清理一下(比如如果“the”、“Mr.”等”的最后一个单词)“在更大范围内尝试时不健壮”是一件很难调试的事情。你们能给我们一个实际的可复制的测试用例,包括输入、预期和实际输出吗?或者,如果你不能找出一个可复制的测试用例,至少给我们你尝试过的,这样其他人就可以了?这很好。到目前为止你试过什么?堆栈溢出不是代码编写服务。我将添加我尝试过的凌乱函数。没问题。。。在我给出的例子中,它可以很好地工作,但是它不够健壮,有时不能正确地对齐说话人和文本块。这不是真正的分裂,它是一种稍微复杂一点的解析。而且,如果你真的按照你的要求去做,你会得到
”。yadda yadda jon stewart对我来说很刻薄。但是没有。先生“