簡體   English   中英

如何從我擁有的這個 function 創建一個 n-gram function?

[英]How to create a n-gram function from this function that I have?

我有以下 function 計算字符串中的字符,以便寫入字符串:

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}

從這個 function 中,我如何創建一個 function 來計算每個 n-gram 在字符串中出現的次數? 例如,

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

function ngrams應該是對 function count_char的修改,但我現在不知道該怎么做......

您可以在 function 中添加長度參數; 然后只需將切片從 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))

Output:

{'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)將返回 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

這個 function 將在被稱為count_char('ttt', 2)時返回2

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM