Python を使用して、ファイル内のすべてのバイグラム (隣接する単語のペア) の出現回数をカウントしたいと考えています。ここでは、非常に大きなファイルを扱っているので、効率的な方法を探しています。ファイルの内容に対して正規表現 "\w+\s\w+" を使用して count メソッドを使用しようとしましたが、効率的であることがわかりませんでした。
たとえば、次の内容を持つファイル a.txt からバイグラムの数を数えたいとしましょう:
"the quick person did not realize his speed and the quick person bumped "
上記のファイルでは、バイグラム セットとそのカウントは次のようになります。
(the,quick) = 2
(quick,person) = 2
(person,did) = 1
(did, not) = 1
(not, realize) = 1
(realize,his) = 1
(his,speed) = 1
(speed,and) = 1
(and,the) = 1
(person, bumped) = 1
ユニグラム (単一の単語) をカウントするために使用される Python の Counter オブジェクトの例に出くわしました。また、正規表現アプローチも使用します。
例は次のようになります。
>>> # Find the ten most common words in Hamlet
>>> import re
>>> from collections import Counter
>>> words = re.findall('\w+', open('a.txt').read())
>>> print Counter(words)
上記のコードの出力は次のとおりです。
[('the', 2), ('quick', 2), ('person', 2), ('did', 1), ('not', 1),
('realize', 1), ('his', 1), ('speed', 1), ('bumped', 1)]
Counter オブジェクトを使用してバイグラムの数を取得できるかどうか疑問に思っていました。Counter オブジェクトまたは正規表現以外のアプローチも高く評価されます。