pythonの勉強をしています。
自然言語処理のNgramについてのコードを理解しようとしたのですが、躓いてしまったためご教示お願い致します。
python
1def ngrams(seq, n): 2 return [seq[i:i+n] for i in range(len(seq)-n+1)] 3 4sent = ["I", "have", "an", "apple"] 5 6print(ngrams(sent, 2)) 7 8# [['I', 'have'], ['have', 'an'], ['an', 'apple']]
*上記のコードは引用させていただきました。
https://termina.io/posts/n-gram-explanation-and-implementation
自分の認識:
逆算的な考え方をしてみました。
出力結果になるようにするには
seq[i:i+n]の部分のインデックス値が
[0:1][1:2][2:3]
となる必要があると考えたのですが
forループを基準として考えた場合
- リストngramの引数は2で
- リストlenはリストの要素をカウントするため
for i in range(4-2+1)
つまり、iは3になり最初のインデックス値から
[3:5]
となるのではないかと考えました。
どうして異なるのかがわかりません。
ご教示いただけると幸いです。
よろしくお願い致します。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/06/10 14:32
2020/06/10 14:43
2020/06/10 14:45 編集
2020/06/10 14:50