個人的な課題として、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のリストを作成することです。最初はラムダがそれを行う方法かもしれないと思っていましたが、その方法がわかりません。
また、私が見ている他の実装は、まったく異なる方法を取っています(驚くことではありません)。たとえば、こことここで、行き止まりになっているのではないかと思い始めています。
このアプローチをあきらめる前に、私は興味があります:1)この方法で任意のリストサイズを作成する1行またはpythonicメソッドはありますか?2)この方法で問題に取り組むことの欠点は何ですか?