我想把一个句子分成二元组。例如:
"My name is really nice. This is so awesome."
- >
["My name","name is", "is really", "really nice.", "This is", "is so", "so awesome."]
任何帮助?
答案 0 :(得分:0)
首先,您可以再次使用split('.')
在您的字符串中分割句子split
每个句子,然后使用zip()连接它们!
>>> [' '.join(i) for s2 in s.split('.') for i in zip(s2.split(),s2.split()[1:])]
['My name', 'name is', 'is really', 'really nice', 'This is', 'is so', 'so awesome']
>>>
答案 1 :(得分:0)
你可以通过积极的前瞻来做到这一点,
>>> import re
>>> s = "My name is really nice. This is so awesome."
>>> m = re.findall(r'(?=(\b\w+\b \S+))', s)
>>> m
['My name', 'name is', 'is really', 'really nice.', 'This is', 'is so', 'so awesome.']
模式说明:
(?=...)
前瞻是零长度断言,就像行的开头和结尾,以及单词的开头和结尾一样。它不会消耗字符串中的字符,但只断言是否可以匹配。()
捕获用于捕获符合()内部模式的字符的组。\b
字边界。它匹配单词字符和非单词字符。\w+
匹配一个或多个单词字符。\S+
匹配空格和以下非空格字符。findall
函数通常会在捕获的组内打印字符。如果没有捕获组,那么它将打印匹配。在我们的例子中,它将打印组索引1中存在的字符。要匹配重叠的字符,您需要将模式放在前瞻中。答案 2 :(得分:0)
def ngrams(words, n):
return [words[i:i+n] for i in range(len(words)-n+1)]
输出:
In [67]: ngrams("My name is really nice".split(),2)
Out[67]: [['My', 'name'], ['name', 'is'], ['is', 'really'], ['really', 'nice']]