Извлечение n-граммов из 3 смежных символов и слов - PullRequest
0 голосов
/ 07 июля 2019

Функция ниже (которую я нашел в этом блоге Крис ван ден Берг ) извлекает все n-граммы 3 смежных символов в строке:

import re

def ngrams(string, n = 3):
    string = re.sub(r'[,-./]|\sBD', r'', string)
    ngrams = zip(*[string[i:] for i in range(n)])
    return [''.join(ngram) for ngram in ngrams]

В качестве примера, передача строки Stack Overflow функции, определенной выше, вернет следующий список:

print(ngrams('Stack Overflow', n = 3))

['Sta', 'tac', 'ack', 'ck ', 'k O', ' Ov', 'Ove', 'ver', 'erf', 'rfl', 'flo', 'low']

Моя цель состоит в том, чтобы изменить эту функцию так, чтобы она включала в себя оба n-грамма3 смежных символа и слова.То есть для того же примера, который показан выше, я бы хотел, чтобы вывод был следующим:

['Stack', 'Overflow', 'Sta', 'tac', 'ack', 'ck ', 'k O', ' Ov', 'Ove', 'ver', 'erf', 'rfl', 'flo', 'low']

1 Ответ

1 голос
/ 07 июля 2019

Вы можете сделать:

import re

def ngrams(string, n = 3):
    string = re.sub(r'[,-./]|\sBD', r'', string)
    ngrams = zip(*[string[i:] for i in range(n)])
    return string.split(' ') + [''.join(ngram) for ngram in ngrams]

print(ngrams('Stack Overflow', n = 3))

Что дает вам:

['Stack', 'Overflow', 'Sta', 'tac', 'ack', 'ck ', 'k O', ' Ov', 'Ove', 'ver', 'erf', 'rfl', 'flo', 'low']
...