2014-11-06 50 views
0

此函数接受一个字符串文本,并返回一个包含字符串列表的列表,其中包含字符串文本中每个句子的一个列表。在Python中,如何获取字符串文本,并返回一个包含字符串列表的列表?

句子被字符串“。”,“?”或“!”之一分隔。我们忽略了其他标点符号分隔句子的可能性。所以'Mr.X'会变成2个句子,'不'会变成2个单词。

例如,文本是

Hello, Jack. How is it going? Not bad; pretty good, actually... Very very 
good, in fact. 

,函数返回:

['hello', 'jack'], 
['how', 'is', 'it', 'going'], 
['not', 'bad', 'pretty', 'good', 'actually'], 
['very', 'very', 'good', 'in', 'fact']] 

最令人困惑的部分是如何使功能检测字符。 ! ?以及如何使它成为一个列表的列表包含每个句子中的单词。 谢谢。

+0

're.split( “[。?!]”,all_text)'应该得到你的第一部分,'re.findall(“[a-zA-Z] +”,some_text)'会让你在文本块中的所有字母单词(仅字母) – 2014-11-06 15:41:27

回答

4

这听起来很像我的作业问题,所以我会提供一般提示,而不是确切的代码。

一个字符串上有split(char)函数。您可以使用它来根据特定字符拆分字符串。但是,您将不得不使用循环并多次执行分割。

您还可以使用正则表达式来查找匹配项(这将是一个更好的解决方案。)这可以让您一次找到所有匹配项。然后你会遍历这些匹配,并根据空格吐出它们,同时删除标点符号。

编辑:这是你可以用它来获取句群一下子正则表达式的例子:

\s*([^.?!]+)\s* 

的\ S周围的括号*将导致多余的空格被从结果中删除,并括号是一个捕获组。您可以使用re.findall()获取所有捕获结果的列表,然后您可以遍历这些项并使用re.split()和一些条件逻辑将所有单词附加到新列表中。

让我知道你是如何相处的,如果您有任何其他问题,请提供我们迄今为止的代码。

+0

这里匹配的含义是什么?我不需要一个具体的解决方案,但只是一个详细的解释,谢谢! – humberthumbert116 2014-11-08 00:25:15

+0

尝试使用regexhero.net或其他正则表达式工具。另一个用户遇到的“空行”问题是因为忽略了一个+,该值指定了至少一个项目的捕获组。 – lukevp 2014-11-08 01:05:18

+0

@ humberthumbert116,我注意到你没有选择一个可接受的答案。如果你觉得我的答案解决了你的问题,请接受它,以便我可以得到它的代表。否则,如果您有任何其他问题可以帮助我,请告诉我们。谢谢! – lukevp 2014-12-22 23:19:44

1

您可以使用re.split()

>>> s="Hello, Jack. How is it going? Not bad; pretty good, actually... Very very good, in fact." 
>>> import re 
>>> [re.split(r'\W',i) for i in re.split(r'\.|\?|\!',s) if len(i)] 

和删除空指数,你可以这样做:

>>> [[x for x in i if len(x)]for i in my_s] 
[['Hello', 'Jack'], ['How', 'is', 'it', 'going'], ['Not', 'bad', 'pretty', 'good', 'actually'], ['Very', 'very', 'good', 'in', 'fact']] 
+0

'[。?!]'有什么问题?而且这也会返回空字符串。 – 2014-11-06 15:44:53

+0

'[。?!]'也可以使用,关于空字符串,我会编辑答案! – Kasramvd 2014-11-06 15:48:27

相关问题