Искам да преброя броя на срещанията на всички биграми (двойка съседни думи) във файл с помощта на python. Тук имам работа с много големи файлове, така че търся ефективен начин. Опитах да използвам метода за преброяване с регулярен израз "\w+\s\w+" върху съдържанието на файла, но не се оказа ефективен.
напр. Да кажем, че искам да преброя броя на биграмите от файл 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
Попаднах на пример за обекти Counter в Python, който се използва за броене на униграми (единични думи). Той също така използва regex подход.
Примерът е следният:
>>> # 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 object или regex, също ще бъде оценен.