如何从我拥有的这个函数创建一个 n-gram 函数?
How to create a n-gram function from this function that I have?
我有以下函数可以按字符串的写入顺序计算字符串中的字符数:
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_char
的修改,但我现在不知道该怎么做...
您可以为您的函数添加一个长度参数;然后将您的切片从 1 个字符扩展到该长度:
def count_char(s, l = 1):
result = {}
for i in range(len(s)-l+1):
result[s[i:i+l]] = s.count(s[i:i+l])
return result
print(count_char("practice"))
print(count_char('tataki', 2))
输出:
{'p': 1, 'r': 1, 'a': 1, 'c': 2, 't': 1, 'i': 1, 'e': 1}
{'ta': 2, 'at': 1, 'ak': 1, 'ki': 1}
请注意,str.count
只计算非重叠次数,因此 count_char('ttt', 2)
将 return 1,而不是 2。如果你想计算重叠次数,你需要手动执行.例如:
def count_char(s, l = 1):
result = {}
for i in range(len(s)-l+1):
sub = s[i:i+l]
if sub not in result:
result[sub] = sum(s[j:j+l] == sub for j in range(len(s)-l+1))
return result
此函数将 return 2
调用为 count_char('ttt', 2)
。
我有以下函数可以按字符串的写入顺序计算字符串中的字符数:
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_char
的修改,但我现在不知道该怎么做...
您可以为您的函数添加一个长度参数;然后将您的切片从 1 个字符扩展到该长度:
def count_char(s, l = 1):
result = {}
for i in range(len(s)-l+1):
result[s[i:i+l]] = s.count(s[i:i+l])
return result
print(count_char("practice"))
print(count_char('tataki', 2))
输出:
{'p': 1, 'r': 1, 'a': 1, 'c': 2, 't': 1, 'i': 1, 'e': 1}
{'ta': 2, 'at': 1, 'ak': 1, 'ki': 1}
请注意,str.count
只计算非重叠次数,因此 count_char('ttt', 2)
将 return 1,而不是 2。如果你想计算重叠次数,你需要手动执行.例如:
def count_char(s, l = 1):
result = {}
for i in range(len(s)-l+1):
sub = s[i:i+l]
if sub not in result:
result[sub] = sum(s[j:j+l] == sub for j in range(len(s)-l+1))
return result
此函数将 return 2
调用为 count_char('ttt', 2)
。