私は、Python NLTKがどのようにしてバイグラムの単語を計算しやすくするかについて、ウェブ上にたくさんのドキュメンテーションを見ました。NLTKでは、バイグラムの単語を簡単に計算できます。手紙はどうですか?
文字はどうですか?
私がしたいことは、辞書を差し込み、異なる文字のペアの相対頻度を教えてもらいたいことです。
最終的には、見込みのある(しかし偽の)単語を生成するためのマルコフプロセスをいくつか作りたいと思います。ここで
私は、Python NLTKがどのようにしてバイグラムの単語を計算しやすくするかについて、ウェブ上にたくさんのドキュメンテーションを見ました。NLTKでは、バイグラムの単語を簡単に計算できます。手紙はどうですか?
文字はどうですか?
私がしたいことは、辞書を差し込み、異なる文字のペアの相対頻度を教えてもらいたいことです。
最終的には、見込みのある(しかし偽の)単語を生成するためのマルコフプロセスをいくつか作りたいと思います。ここで
がcollectionsモジュールからのカウンターを使用した例(モジュロ相対度数分布)である:
#!/usr/bin/env python
import sys
from collections import Counter
from itertools import islice
from pprint import pprint
def split_every(n, iterable):
i = iter(iterable)
piece = ''.join(list(islice(i, n)))
while piece:
yield piece
piece = ''.join(list(islice(i, n)))
def main(text):
""" return ngrams for text """
freqs = Counter()
for pair in split_every(2, text): # adjust n here
freqs[pair] += 1
return freqs
if __name__ == '__main__':
with open(sys.argv[1]) as handle:
freqs = main(handle.read())
pprint(freqs.most_common(10))
は使用方法:バイグラムはあなたが必要とするすべてである場合
$ python 14168601.py lorem.txt
[('t ', 32),
(' e', 20),
('or', 18),
('at', 16),
(' a', 14),
(' i', 14),
('re', 14),
('e ', 14),
('in', 14),
(' c', 12)]
、あなたは必要ありませんNLTK 。次のようにあなたはそれを行うだけでできます。
from collections import Counter
text = "This is some text"
bigrams = Counter(x+y for x, y in zip(*[text[i:] for i in range(2)]))
for bigram, count in bigrams.most_common():
print bigram, count
出力:
is 2
s 2
me 1
om 1
te 1
t 1
i 1
e 1
s 1
hi 1
so 1
ex 1
Th 1
xt 1
あなたは、単に言葉のあなたの文字列を取るが、文字ではなく、言葉によって、あなたのトークナイザのトークン化を持って、その後、実行されて何ができますかその文字トークンセットのバイグラムモデル – jdotjdot