私はngramsが必要です。私はnltk.utils.ngrams
を使ってngramsを得ることができますが、実際にはngrams関数はジェネレータオブジェクトを返します。私はいつもそれを繰り返すことができ、ngramsをリストに格納することができます。しかし、これらのngramを繰り返し実行することなく、リスト内でこれらのngramを取得するための、より直接的な方法がありますか?ジェネレータで反復処理を行う代わりに、NTLKを使用して複数のngramオーダを取得する方法はありますか?
答えて
@ georgのコメントはかなり釘付けです。
In [12]: from nltk.util import ngrams
In [13]: g = ngrams([1,2,3,4,5], 3)
In [14]: list(g)
Out[14]: [(1, 2, 3), (2, 3, 4), (3, 4, 5)]
In [15]: g = ngrams([1,2,3,4,5], 3)
In [16]: map(lambda x: x, g)
Out[16]: [(1, 2, 3), (2, 3, 4), (3, 4, 5)]
確かに!私のPythonインタプリタで何かが起きています...初めて試してみることを拒否しました。今働く。ありがとう! –
短い質問ですが、 'list'でジェネレータをインスタンス化/マテリアライズできるときに' map'を使っているのはなぜですか?効率に違いはありますか? – alvas
@alvas私が知っているわけではありません。私はちょうど異なった方法を見せようとしていた。 –
または代わりnltk
なし:
from itertools import chain
def ngrams(L, n = 2):
orders = [n] if type(n) is int else sorted(list(n))
return list(chain(*[zip(*[L[i:] for i in range(n)]) for n in orders]))
>>> ngrams([1,2,3,4,5], n = 3)
[(1, 2, 3), (2, 3, 4), (3, 4, 5)]
>>> ngrams([1,2,3,4,5], n = [2,3])
[(1, 2), (2, 3), (3, 4), (4, 5), (1, 2, 3), (2, 3, 4), (3, 4, 5)]
実際ngramsの複数の注文を取得するための組み込み関数がありますeverygrams
を呼び出し、https://github.com/nltk/nltk/blob/develop/nltk/util.py#L504
>>> from nltk import everygrams
>>> sent = 'a b c'.split()
# By default, it will extract every possible order of ngrams.
>>> list(everygrams(sent))
[('a',), ('b',), ('c',), ('a', 'b'), ('b', 'c'), ('a', 'b', 'c')]
# You can set a max order or ngrams.
>>> list(everygrams(sent, max_len=2))
[('a',), ('b',), ('c',), ('a', 'b'), ('b', 'c')]
# Or specify a range.
>>> list(everygrams(sent, min_len=2, max_len=3))
[('a', 'b'), ('b', 'c'), ('a', 'b', 'c')]
- 1. forループでnuke.allNodes()を使用して複数のノードノードクラスを反復処理する方法はありますか?
- 2. BigIntegerを反復処理に使用する方法はありますか?
- 3. Meteorのコレクションを反復処理中にインデックスを取得する方法はありますか?
- 4. Android上でPathオブジェクトを反復処理する方法はありますか?
- 5. Handlebars.jsで地図を反復処理する方法はありますか?
- 6. forループを使用して辞書を反復処理する方法はありますか?
- 7. 間接参照を使用して配列を反復処理する方法はありますか?
- 8. JSONを複数のレベルで反復処理する方法は?
- 9. ツリー内のインスタンスを反復処理する方法はありますか?
- 10. Rails、結果を反復処理する代わりに配列を返すモデルメソッド
- 11. Dapper DynamicParametersオブジェクトを反復処理する方法はありますか?
- 12. customattributeを使用する代わりにコントローラーのアクションの承認を処理する代わりの方法
- 13. ソケットから複数の値を反復処理する方法
- 14. ポインタや参照を使用せずにバイナリツリーを反復処理する方法はありますか?
- 15. jqueryで複数選択オプションを反復処理する方法
- 16. 前の行を参照しながらpandasデータフレームを反復処理する方法はありますか?
- 17. 反復処理の最初のデータを取得する方法
- 18. Python:pandasデータフレームを反復処理している間に値を取得し、オブジェクト型を取得する方法はありますか?
- 19. JavaでBufferedImageのピクセルをより高速に反復処理する方法はありますか?
- 20. PowerShellで多数のファイルを含むフォルダを反復処理する方法はありますか?
- 21. JS - 参照の代わりに反復で変数の値を取得する方法?
- 22. Excel VBAでオートフィルタ作業表の行のみを反復処理する方法はありますか?
- 23. isEqualの代わりに 'contains'を使用する方法はありますか?
- 24. XMLの代わりにSGMLを使用する理由はありますか?
- 25. trueの代わりに!0を使用する理由はありますか?
- 26. 複数選択オプションを反復処理する方法
- 27. SQLite-Net Extensionsを使用して複数の関連テーブルを反復処理する方法はありますか?
- 28. mysqldump - LFの代わりに改行を取得する方法
- 29. 既存のすべてのグループを自動的に反復処理する方法はありますか?
- 30. DBContextジェネレータに代わるものはありますか?
'someList =リスト(someGenerator)を参照してください' - それはうまくいくのだろうか? – georg
nope。空のリストを返す... –