在 Python 中创建一个基本的 ngram 实现是一项个人挑战。从一元组开始到三元组:
def unigrams(text):
uni = []
for token in text:
uni.append([token])
return uni
def bigrams(text):
bi = []
token_address = 0
for token in text[:len(text) - 1]:
bi.append([token, text[token_address + 1]])
token_address += 1
return bi
def trigrams(text):
tri = []
token_address = 0
for token in text[:len(text) - 2]:
tri.append([token, text[token_address + 1], text[token_address + 2]])
token_address += 1
return tri
现在有趣的部分,推广到 n-gram。概括我在这里的方法的主要问题是创建进入 append 方法的长度为 n 的列表。我最初认为 lambdas 可能是一种方法,但我不知道如何。
此外,我正在研究的其他实现采取了完全不同的策略(不足为奇),例如here和here,所以我开始怀疑我是否处于死胡同。
在我放弃这种方法之前,我很好奇:1)是否有一种以这种方式创建任意列表大小的单行或 Pythonic 方法?2)以这种方式解决问题的缺点是什么?