Вы можете попытаться использовать time series analysis
сезонность, чтобы получить похожие шаблоны в последовательности
, для этого вы можете попробовать преобразовать строку в целые числа и применить season_decompose с использованием statsmodels, затем выможно наблюдать период повторного паттерна из графика.
from matplotlib import pyplot
from statsmodels.tsa.seasonal import seasonal_decompose
a = 'AX 90 10 20 AX 30 14 50 ER 40 50 68'
a = list(map(ord,a))
series = pd.Series(a ,index = pd.date_range('1-1-2011',pd.to_datetime('1-1-2011')+np.timedelta64(len(a)-1,'D'),freq='D'))
result = seasonal_decompose(series, model='additive')
result.observed.plot()
result.trend.plot()
pyplot.rcParams["figure.figsize"] = (20,3)
pyplot.show()
Наблюдаемая сезонность и тренд последовательности
, затем с наблюдаемым периодом вы можете разделитьпоследовательность
Редактировать
Чтобы найти периодичность последовательности без визуального контроля,
Мы можем найти периодичность сигнала с использованием автокорреляция и с корреляционным запаздыванием сигнала, который показывает периодичность.с этим мы можем нарезать шаблон, чтобы получить аналогичные шаблоны
def autocorr(x):
n = x.size
norm = (x - np.mean(x))
result = np.correlate(norm, norm, mode='same')
acorr = result[n//2 + 1:] / (x.var() * np.arange(n-1, n//2, -1))
lag = np.abs(acorr).argmax() + 1
return lag
period = autocorr(np.array(a))
#Here the pattern is repeating for each period of 12 values, you can pick the period also
period = 12
for i in range(0,len(a),period):
print(''.join(map(chr,a[i:i+period])))
Out:
AX 90 10 20
AX 30 14 50
ER 40 50 68