n-gramとyieldと
N-gramはn文字ずつの並びを索引として持つ。
詳しくはこの辺でも見てください。
http://gihyo.jp/dev/serial/01/make-findspot/0005
それの(格納とかはしていないのだけど)簡単なサンプル。
http://hiroshiykw.blogspot.com/2007/12/n-gram.html
これを見ていたらyieldとかあった。
なんか説明とか見るとジェネレータ関数がどうこうとかわからないことが書かれていたので、ちょっと自分で確認。以下は2文字ずつ区切るbigram.py(上のサイトのやつです)。
def bigram(data): if len(data) < 2: return print ("hoge",data[0],"+",data[1]) prev = data[0] for x in data[1:]: yield [prev, x] prev = x
実行結果
In [1]: import bigram In [2]: i = bigram.bigram("hello world") In [3]: i.next() ('hoge', 'h', '+', 'e') Out[3]: ['h', 'e'] In [4]: i.next() Out[4]: ['e', 'l'] In [5]: i.next() Out[5]: ['l', 'l'] ...
というわけで、関数のTopに戻るとかじゃなくてyieldを呼んだ時点で関数の実行を一時中断して値を返すだけに見える。
話は変わるけどsqlalchemy+bigram+markovとかやると面白いかな。