Я хочу подсчитать количество вхождений всех биграмм (пар смежных слов) в файле с помощью 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
Я столкнулся с примером объектов счетчика в 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 или регулярного выражения, также будет оценен.