Python 如何从这个函数中创建一个n-gram函数?

Python 如何从这个函数中创建一个n-gram函数?,python,string,n-gram,Python,String,N Gram,我有以下函数,它按写入字符串的顺序对字符串中的字符进行计数: def count_char(s): result = {} for i in range(len(s)): result[s[i]] = s.count(s[i]) return result 比如说。我们有: count_char("practice") {'p' : 1, 'r' : 1, 'a' : 1, 'c' : 2, 't' : 1, 'i' : 1, 'e'

我有以下函数,它按写入字符串的顺序对字符串中的字符进行计数:

def count_char(s):
    result = {}
    for i in range(len(s)):
        result[s[i]] = s.count(s[i])
    return result
比如说。我们有:

count_char("practice")
{'p' : 1, 'r' : 1, 'a' : 1, 'c' : 2, 't' : 1, 'i' : 1, 'e' : 1}
从这个函数中,我如何创建一个函数来计算字符串中每个n-gram出现的次数?比如说,

ngrams("tataki",n=2)
{'ta':2, 'at':1, 'ak':1, 'ki':1}

函数
ngrams
应该是对函数
count\u char
的修改,但我不确定此时该如何操作…

您可以在函数中添加一个长度参数;然后将切片从1个字符扩展到该长度:

def count_char(s,l=1):
结果={}
对于范围内的i(透镜-l+1):
结果[s[i:i+l]]=s.count(s[i:i+l])
返回结果
打印(计数字符(“实践”))
打印(计数字符('tataki',2))
输出:

{'p':1,'r':1,'a':1,'c':2,'t':1,'i':1,'e':1}
{'ta':2,'at':1,'ak':1,'ki':1}
请注意,只对不重叠的事件计数,因此
count\u char('ttt',2)
将返回1,而不是2。如果要计算重叠出现的次数,则需要手动进行。例如:

def count_char(s,l=1):
结果={}
对于范围内的i(透镜-l+1):
sub=s[i:i+l]
如果结果不正确:
结果[sub]=总和(s[j:j+l]==范围内j的sub(len(s)-l+1))
返回结果

当调用此函数时,该函数将返回
2
,称为
count\u char('ttt',2)

重叠
n-grams
?例如,
ngrams('ttt',2)
的输出应该是什么?我认为输出应该是
{'tt':2}