2013年11月14日木曜日

[Python] 文字列のN-Gramを出力する

Pythonで文字列のN-Gramのリストを作成する。

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 件のコメント:

コメントを投稿

Related Posts Plugin for WordPress, Blogger...