下面的函数(我在 Chris van den Berg 的this博客文章中找到)提取字符串中所有3个连续字符的n-gram:
import re
def ngrams(string, n = 3):
string = re.sub(r'[,-./]|\sBD', r'', string)
ngrams = zip(*[string[i:] for i in range(n)])
return [''.join(ngram) for ngram in ngrams]
例如,将字符串Stack Overflow
传递到上面定义的函数将返回以下列表:
print(ngrams('Stack Overflow', n = 3))
['Sta', 'tac', 'ack', 'ck ', 'k O', ' Ov', 'Ove', 'ver', 'erf', 'rfl', 'flo', 'low']
我的目标是修改此功能,使其既包含3个连续字符的n-gram,也包含和单词。也就是说,对于上面显示的相同示例,我希望输出如下:
['Stack', 'Overflow', 'Sta', 'tac', 'ack', 'ck ', 'k O', ' Ov', 'Ove', 'ver', 'erf', 'rfl', 'flo', 'low']
答案 0 :(得分:1)
您可以这样做:
import re
def ngrams(string, n = 3):
string = re.sub(r'[,-./]|\sBD', r'', string)
ngrams = zip(*[string[i:] for i in range(n)])
return string.split(' ') + [''.join(ngram) for ngram in ngrams]
print(ngrams('Stack Overflow', n = 3))
哪个给你:
['Stack', 'Overflow', 'Sta', 'tac', 'ack', 'ck ', 'k O', ' Ov', 'Ove', 'ver', 'erf', 'rfl', 'flo', 'low']