Михаил Юдин

Экстрактор биграмм

Вытаскивает биграммы (N-граммы) из текста в порядке частоты использования

Скрипт для генерации биграмм по произвольному тексту. Исходный текст передаётся скрипту первым параметром. Если нужны триграммы или N-граммы, просто замените “2” в параметре функции main.

#!/usr/bin/env python3
from collections import Counter
from re import findall
from sys import argv


def main(text, top, n=2):
    ngrams = []
    for word in findall(r'\w+', text.lower()):
        wlen = len(word)
        if wlen >= n:
            ngrams.extend({word[i:i + n] for i in range(wlen - n + 1)})
    print([k for k, _ in Counter(ngrams).most_common(top)])


if __name__ == '__main__':
    main(argv[1], argv[2] if len(argv) == 3 else 300)

Примеры использования:

./bigram_extractor.py test
['te', 'es', 'st']
curl -s https://raw.githubusercontent.com/davisp/couchdb/b0420f9006915149e81607615720f32f21c76725/share/www/script/test/lorem.txt | xargs | xargs -I {} ./bigram_extractor.py {}
['is', 'us', 'et', 'en', 'it', 'li', 'qu', 'or', 'el', 'er', 'es', 'in', 'll', 'ti', 'tu', 'ul', 'um', 'la', 'at', 'am', 'te', 'nt', 'di', 'se', 'ue', 'ri', 'on', 'ci', 'le', 'ac', 'ur', 'cu', 'st', 've', 'ra', 'ec', 'ne', 'su', 'ma', 'ni', 'ib', 're', 'me', 'na', 'ui', 'co', 'em', 'lu', 'si', 'al', 'ta', 'pi', 'ut', 'du', 'pe', 'as', 'tr', 'ia', 'vi', 'ct', 'ua', 'to', 'nd', 'id', 'ar', 'ic', 'nu', 'au', 'ce', 'ol', 'ae', 'nc', 'mo', 'sa', 'eu', 'rt', 'iq', 'od', 'bi', 'ie', 'po', 'sq', 'eg', 'ge', 'an', 'pu', 'im', 'fe', 'lo', 'ed', 'ip', 'ss', 'bu', 'do', 'un', 'da', 'sc', 'ro', 'va', 'ng', 'tt', 'gi', 'mp', 'no', 'ha', 'gu', 'uc', 'os', 'ad', 'ap', 'rc', 'pr', 'ug', 'rp', 'il', 'eq', 'be', 'ru', 'gn', 'fa', 'lt', 'ag', 'so', 'iu', 'ns', 'ph', 'io', 'rn', 'iv', 'ps', 'ju', 'eo', 'ab', 'ig', 'mi', 'pl', 'bh', 'sl', 'rd', 'nv', 'rb', 'pa', 'ee', 'ao', 'fr', 'ms', 'rh', 'ho', 'ob', 'bo', 'tp', 'vo', 'vu', 'lp', 'sp', 'mu', 'mc', 'bl', 'rr', 'ud', 'lv', 'cc', 'sm', 'rm', 'om', 'mm', 'if', 'ei', 'rs', 'he', 'dr', 'oi', 'hi', 'ea', 'av', 'gr', 'cr', 'eh', 'fu', 'ub', 'pt', 'oc', 'ot', 'cl', 'rq', 'ep', 'ii', 'oq']

Поблагодарить через СберБанк:

4274320107381801


Остались вопросы или есть пожелания, замечания — пишите в комментарии: