Я хочу подсчитать количество вхождений всех биграмм (пару смежных слов) в файл с помощью python. Здесь я имею дело с очень большими файлами, поэтому я ищу эффективный способ. Я попытался использовать метод count с регулярным выражением "\ w +\s\w +" в содержимом файла, но он не оказался эффективным.
например. Скажем, я хочу подсчитать количество биграмм из файла a.txt, который имеет следующий контент:
"the quick person did not realize his speed and the quick person bumped "
Для вышеуказанного файла набор bigram и их счет будут следующими:
(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, который используется для подсчета униграмм (одиночных слов). Он также использует подход с регулярным выражением.
Пример выглядит следующим образом:
>>> # 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 или регулярного выражения.