def n_gram(uni,n): return [uni[k:k+n] for k in range(len(uni)-n+1)]
リスト内包表記でサクッと書けます。
>>> n_gram('python',2) ['py', 'yt', 'th', 'ho', 'on'] >>> n_gram(u'abcde',3) [u'abc', u'bcd', u'cde']
日本語の場合はユニコード文字列になっていないとおかしくなるので注意。
>>> print ", ".join(n_gram(u'パイソンマスターへの道',5)) パイソンマ, イソンマス, ソンマスタ, ンマスター, マスターへ, スターへの, ターへの道 >>> n_gram(u'パイソンマスターへの道',5) [u'\u30d1\u30a4\u30bd\u30f3\u30de', u'\u30a4\u30bd\u30f3\u30de\u30b9', u'\u30bd\u30f3\u30de\u30b9\u30bf', u'\u30f3\u30de\u30b9\u30bf\u30fc', u'\u30de\u30b9\u30bf\u30fc\u3078', u'\u30b9\u30bf\u30fc\u3078\u306e', u'\u30bf\u30fc\u3078\u306e\u9053']
ちなみに、文字列を1文字ずつのリストにするだけならもっと簡単。
>>> [ s for s in 'python'] ['p', 'y', 't', 'h', 'o', 'n']
0 件のコメント:
コメントを投稿