# !pip install sklearn-crfsuite
Requirement already satisfied: sklearn-crfsuite in /usr/local/lib/python3.7/dist-packages (0.3.6) Requirement already satisfied: six in /usr/local/lib/python3.7/dist-packages (from sklearn-crfsuite) (1.15.0) Requirement already satisfied: python-crfsuite>=0.8.3 in /usr/local/lib/python3.7/dist-packages (from sklearn-crfsuite) (0.9.7) Requirement already satisfied: tabulate in /usr/local/lib/python3.7/dist-packages (from sklearn-crfsuite) (0.8.9) Requirement already satisfied: tqdm>=2.0 in /usr/local/lib/python3.7/dist-packages (from sklearn-crfsuite) (4.41.1)
# !pip install
# from Bio import SeqIO
from random import randrange
import numpy as np
import sklearn_crfsuite
from sklearn.metrics import accuracy_score
# sequences = SeqIO.parse('./kvasac.fasta', 'fasta')
# for sequence in sequences:
# print(sequence)
# break
file = open('./kvasac.fasta')
# [x[:-1] for x in file.read()[1:]]
all_cds = [''.join(x.split('\n')[1:]) for x in file.read().split('>')[1:]]
n = len(all_cds)
train_cds = all_cds[:int(n*0.7)]
test_cds = all_cds[int(n*0.7):]
def f(flag, i):
if flag:
return f'C{i%3}'
else:
return f'I{i%3}'
seqq = 'ATGTCGTAGTGCAacacacacaGTGTGTG'
mapa = list(map(lambda x: x.isupper(), seqq))
n = len(mapa)
encoded = [f(mapa[i], i) for i in range(n)]
print(encoded)
['C0', 'C1', 'C2', 'C0', 'C1', 'C2', 'C0', 'C1', 'C2', 'C0', 'C1', 'C2', 'C0', 'I1', 'I2', 'I0', 'I1', 'I2', 'I0', 'I1', 'I2', 'I0', 'C1', 'C2', 'C0', 'C1', 'C2', 'C0', 'C1']
def pad(sequence, k):
n = len(sequence)
mapping = ['A','T','C','G']
prefix = ''
suffix = ''
for _ in range(k):
j = randrange(0, 4)
prefix += mapping[j]
j = randrange(0, 4)
suffix += mapping[j]
mapa = list(map(lambda x: x.isupper(), sequence[3:-2]))
X = list(prefix + sequence + suffix)
y = ['N' for _ in range(k)] + ['start0','start1','start2'] + [f(mapa[i], i) for i in range(n - 6)] + ['end0','end1','end2'] + ['N' for _ in range(k)]
return X, y
k = 100
X_train = []
y_train = []
for cds in train_cds:
X, y = pad(cds, k)
X_train.append(X)
y_train.append(y)
k = 100
X_test = []
y_test = []
for cds in test_cds:
X, y = pad(cds, k)
X_test.append(X)
y_test.append(y)
def extract_features(X):
all_features = []
stop_codons = ['taa','tga','tag']
for seq in X:
features = []
for i in range(len(seq)):
feature = {
'label': seq[i].lower()
}
if i >= 1:
feature.update({
'-1:label': seq[i - 1].lower(),
'last_gt': ''.join([seq[i - 1].lower(), seq[i].lower()]) == 'gt',
'last_ag': ''.join([seq[i - 1].lower(), seq[i].lower()]) == 'ag',
})
if i >= 2:
feature.update({
'-2:label': seq[i - 2].lower(),
'start': ''.join([seq[i - 2].lower(), seq[i - 1].lower(), seq[i].lower()]) == 'atg',
'stop': ''.join([seq[i - 2].lower(), seq[i - 1].lower(), seq[i].lower()]) in stop_codons
})
features.append(feature)
all_features.append(features)
return all_features
X_train_features = extract_features(X_train[:100])
y_train_classes = y_train[:100]
X_train[0]
['G', 'G', 'A', 'A', 'T', 'G', 'C', 'A', 'A', 'C', 'G', 'C', 'A', 'T', 'T', 'C', 'G', 'G', 'G', 'A', 'C', 'T', 'A', 'C', 'A', 'A', 'G', 'G', 'A', 'G', 'T', 'G', 'T', 'A', 'G', 'A', 'C', 'G', 'G', 'T', 'G', 'A', 'A', 'G', 'G', 'A', 'G', 'T', 'C', 'C', 'G', 'A', 'T', 'T', 'T', 'A', 'G', 'T', 'A', 'A', 'C', 'C', 'T', 'C', 'A', 'C', 'T', 'T', 'G', 'G', 'C', 'A', 'T', 'C', 'A', 'T', 'G', 'G', 'G', 'A', 'T', 'C', 'A', 'C', 'G', 'G', 'T', 'A', 'A', 'A', 'C', 'G', 'T', 'G', 'A', 'G', 'A', 'G', 'G', 'C', 'A', 'T', 'G', 'A', 'C', 'T', 'C', 'T', 'A', 'C', 'A', 'A', 'G', 'A', 'A', 'T', 'C', 'T', 'G', 'A', 'T', 'A', 'A', 'A', 'T', 'T', 'T', 'G', 'C', 'T', 'A', 'C', 'C', 'A', 'A', 'G', 'G', 'C', 'C', 'A', 'T', 'T', 'C', 'A', 'T', 'G', 'C', 'C', 'G', 'G', 'T', 'G', 'A', 'A', 'C', 'A', 'T', 'G', 'T', 'G', 'G', 'A', 'C', 'G', 'T', 'T', 'C', 'A', 'C', 'G', 'G', 'T', 'T', 'C', 'C', 'G', 'T', 'G', 'A', 'T', 'C', 'G', 'A', 'A', 'C', 'C', 'C', 'A', 'T', 'T', 'T', 'C', 'T', 'T', 'T', 'G', 'T', 'C', 'C', 'A', 'C', 'C', 'A', 'C', 'T', 'T', 'T', 'C', 'A', 'A', 'A', 'C', 'A', 'A', 'T', 'C', 'T', 'T', 'C', 'T', 'C', 'C', 'A', 'G', 'C', 'T', 'A', 'A', 'C', 'C', 'C', 'T', 'A', 'T', 'C', 'G', 'G', 'T', 'A', 'C', 'T', 'T', 'A', 'C', 'G', 'A', 'A', 'T', 'A', 'C', 'T', 'C', 'C', 'A', 'G', 'A', 'T', 'C', 'T', 'C', 'A', 'A', 'A', 'A', 'T', 'C', 'C', 'T', 'A', 'A', 'C', 'A', 'G', 'A', 'G', 'A', 'G', 'A', 'A', 'C', 'T', 'T', 'G', 'G', 'A', 'A', 'A', 'G', 'A', 'G', 'C', 'A', 'G', 'T', 'T', 'G', 'C', 'C', 'G', 'C', 'T', 'T', 'T', 'A', 'G', 'A', 'G', 'A', 'A', 'C', 'G', 'C', 'T', 'C', 'A', 'A', 'T', 'A', 'C', 'G', 'G', 'G', 'T', 'T', 'G', 'G', 'C', 'T', 'T', 'T', 'C', 'T', 'C', 'C', 'T', 'C', 'T', 'G', 'G', 'T', 'T', 'C', 'T', 'G', 'C', 'C', 'A', 'C', 'C', 'A', 'C', 'C', 'G', 'C', 'C', 'A', 'C', 'A', 'A', 'T', 'C', 'T', 'T', 'G', 'C', 'A', 'A', 'T', 'C', 'G', 'C', 'T', 'T', 'C', 'C', 'T', 'C', 'A', 'G', 'G', 'G', 'C', 'T', 'C', 'C', 'C', 'A', 'T', 'G', 'C', 'G', 'G', 'T', 'C', 'T', 'C', 'T', 'A', 'T', 'C', 'G', 'G', 'T', 'G', 'A', 'T', 'G', 'T', 'G', 'T', 'A', 'C', 'G', 'G', 'T', 'G', 'G', 'T', 'A', 'C', 'C', 'C', 'A', 'C', 'A', 'G', 'A', 'T', 'A', 'C', 'T', 'T', 'C', 'A', 'C', 'C', 'A', 'A', 'A', 'G', 'T', 'C', 'G', 'C', 'C', 'A', 'A', 'C', 'G', 'C', 'T', 'C', 'A', 'C', 'G', 'G', 'T', 'G', 'T', 'G', 'G', 'A', 'A', 'A', 'C', 'C', 'T', 'C', 'C', 'T', 'T', 'C', 'A', 'C', 'T', 'A', 'A', 'C', 'G', 'A', 'T', 'T', 'T', 'G', 'T', 'T', 'G', 'A', 'A', 'C', 'G', 'A', 'T', 'C', 'T', 'A', 'C', 'C', 'T', 'C', 'A', 'A', 'T', 'T', 'G', 'A', 'T', 'A', 'A', 'A', 'G', 'G', 'A', 'A', 'A', 'A', 'C', 'A', 'C', 'C', 'A', 'A', 'A', 'T', 'T', 'G', 'G', 'T', 'C', 'T', 'G', 'G', 'A', 'T', 'C', 'G', 'A', 'A', 'A', 'C', 'C', 'C', 'C', 'A', 'A', 'C', 'C', 'A', 'A', 'C', 'C', 'C', 'A', 'A', 'C', 'T', 'T', 'T', 'G', 'A', 'A', 'G', 'G', 'T', 'C', 'A', 'C', 'C', 'G', 'A', 'C', 'A', 'T', 'C', 'C', 'A', 'A', 'A', 'A', 'G', 'G', 'T', 'G', 'G', 'C', 'A', 'G', 'A', 'C', 'C', 'T', 'T', 'A', 'T', 'C', 'A', 'A', 'G', 'A', 'A', 'G', 'C', 'A', 'C', 'G', 'C', 'T', 'G', 'C', 'C', 'G', 'G', 'C', 'C', 'A', 'A', 'G', 'A', 'C', 'G', 'T', 'G', 'A', 'T', 'C', 'T', 'T', 'G', 'G', 'T', 'T', 'G', 'T', 'C', 'G', 'A', 'C', 'A', 'A', 'C', 'A', 'C', 'C', 'T', 'T', 'C', 'T', 'T', 'G', 'T', 'C', 'C', 'C', 'C', 'A', 'T', 'A', 'T', 'A', 'T', 'C', 'T', 'C', 'C', 'A', 'A', 'T', 'C', 'C', 'A', 'T', 'T', 'G', 'A', 'A', 'C', 'T', 'T', 'C', 'G', 'G', 'T', 'G', 'C', 'A', 'G', 'A', 'C', 'A', 'T', 'C', 'G', 'T', 'T', 'G', 'T', 'C', 'C', 'A', 'C', 'T', 'C', 'C', 'G', 'C', 'T', 'A', 'C', 'A', 'A', 'A', 'G', 'T', 'A', 'C', 'A', 'T', 'C', 'A', 'A', 'C', 'G', 'G', 'T', 'C', 'A', 'C', 'T', 'C', 'A', 'G', 'A', 'C', 'G', 'T', 'T', 'G', 'T', 'G', 'C', 'T', 'C', 'G', 'G', 'T', 'G', 'T', 'C', 'C', 'T', 'G', 'G', 'C', 'C', 'A', 'C', 'T', 'A', 'A', 'T', 'A', 'A', 'C', 'A', 'A', 'G', 'C', 'C', 'A', 'T', 'T', 'G', 'T', 'A', 'C', 'G', 'A', 'G', 'C', 'G', 'T', 'C', 'T', 'G', 'C', 'A', 'G', 'T', 'T', 'C', 'T', 'T', 'A', 'C', 'A', 'A', 'A', 'A', 'C', 'G', 'C', 'C', 'A', 'T', 'T', 'G', 'G', 'T', 'G', 'C', 'T', 'A', 'T', 'C', 'C', 'C', 'A', 'T', 'C', 'T', 'C', 'C', 'T', 'T', 'T', 'C', 'G', 'A', 'T', 'G', 'C', 'T', 'T', 'G', 'G', 'T', 'T', 'G', 'A', 'C', 'C', 'C', 'A', 'C', 'A', 'G', 'A', 'G', 'G', 'T', 'T', 'T', 'G', 'A', 'A', 'G', 'A', 'C', 'T', 'T', 'T', 'G', 'C', 'A', 'T', 'C', 'T', 'A', 'C', 'G', 'T', 'G', 'T', 'C', 'A', 'G', 'A', 'C', 'A', 'A', 'G', 'C', 'T', 'G', 'C', 'C', 'C', 'T', 'C', 'A', 'G', 'C', 'G', 'C', 'C', 'A', 'A', 'C', 'A', 'A', 'A', 'A', 'T', 'C', 'G', 'C', 'T', 'G', 'A', 'A', 'T', 'T', 'C', 'T', 'T', 'G', 'G', 'C', 'A', 'G', 'C', 'A', 'G', 'A', 'C', 'A', 'A', 'G', 'G', 'A', 'A', 'A', 'A', 'C', 'G', 'T', 'T', 'G', 'T', 'C', 'G', 'C', 'A', 'G', 'T', 'C', 'A', 'A', 'C', 'T', 'A', 'C', 'C', 'C', 'A', 'G', 'G', 'T', 'T', 'T', 'G', 'A', 'A', 'G', 'A', 'C', 'A', 'C', 'A', 'C', 'C', 'C', 'T', 'A', 'A', 'C', 'T', 'A', 'C', 'G', 'A', 'C', 'G', 'T', 'A', 'G', 'T', 'G', 'T', 'T', 'A', 'A', 'A', 'G', 'C', 'A', 'A', 'C', 'A', 'C', ...]
crf = sklearn_crfsuite.CRF(
algorithm='lbfgs',
c1=0.1,
c2=0.1,
max_iterations=100,
all_possible_transitions=False
)
crf.fit(X_train_features, y_train_classes)
/usr/local/lib/python3.7/dist-packages/sklearn/base.py:197: FutureWarning: From version 0.24, get_params will raise an AttributeError if a parameter cannot be retrieved as an instance attribute. Previously it would return None. FutureWarning)
CRF(algorithm='lbfgs', all_possible_states=None, all_possible_transitions=False,
averaging=None, c=None, c1=0.1, c2=0.1, calibration_candidates=None,
calibration_eta=None, calibration_max_trials=None, calibration_rate=None,
calibration_samples=None, delta=None, epsilon=None, error_sensitive=None,
gamma=None, keep_tempfiles=None, linesearch=None, max_iterations=100,
max_linesearch=None, min_freq=None, model_filename=None, num_memories=None,
pa_type=None, period=None, trainer_cls=None, variance=None, verbose=False)
X_test_features = extract_features(X_test[:100])
y_test_classes = y_test[:100]
# X_test_features = extract_features(X_test)
# crf.predict([X_test_features[0]])[0]
y_pred = crf.predict(X_train)
crf.score(X_train_features, y_train_classes)
0.7500655906560038
crf.score(X_test_features, y_test_classes)
0.8803769717331845
crf.state_features_
{('-1:label:a', 'C0'): 0.021887,
('-1:label:a', 'C1'): -0.041637,
('-1:label:a', 'C2'): 0.124894,
('-1:label:a', 'I0'): 0.492561,
('-1:label:a', 'I1'): 0.358263,
('-1:label:a', 'I2'): -0.052745,
('-1:label:a', 'N'): 0.267346,
('-1:label:a', 'end0'): -0.076681,
('-1:label:a', 'end2'): -0.231454,
('-1:label:a', 'start0'): -0.652239,
('-1:label:a', 'start1'): 0.289456,
('-1:label:c', 'C0'): 0.213721,
('-1:label:c', 'C1'): 0.16011,
('-1:label:c', 'C2'): 0.302011,
('-1:label:c', 'I0'): 0.583185,
('-1:label:c', 'I1'): 0.486105,
('-1:label:c', 'I2'): 0.158923,
('-1:label:c', 'N'): 0.574064,
('-1:label:c', 'end0'): -0.160485,
('-1:label:c', 'start0'): -0.24738,
('-1:label:g', 'C0'): 0.133503,
('-1:label:g', 'C1'): 0.132004,
('-1:label:g', 'C2'): 0.104177,
('-1:label:g', 'I0'): 0.886636,
('-1:label:g', 'I1'): 0.471061,
('-1:label:g', 'I2'): 0.060261,
('-1:label:g', 'N'): 0.467573,
('-1:label:g', 'end0'): -0.243318,
('-1:label:g', 'end2'): -0.30699,
('-1:label:g', 'start0'): -0.489503,
('-1:label:t', 'C0'): 0.119116,
('-1:label:t', 'C1'): 0.114843,
('-1:label:t', 'C2'): 0.194108,
('-1:label:t', 'I0'): 0.647121,
('-1:label:t', 'I1'): 0.579597,
('-1:label:t', 'I2'): 0.221314,
('-1:label:t', 'N'): 0.40256,
('-1:label:t', 'end0'): -0.466109,
('-1:label:t', 'end1'): 1.178975,
('-1:label:t', 'start0'): -0.465242,
('-1:label:t', 'start2'): 0.193269,
('-2:label:a', 'C0'): 0.131669,
('-2:label:a', 'C1'): 0.007512,
('-2:label:a', 'C2'): -0.003429,
('-2:label:a', 'I0'): 0.181033,
('-2:label:a', 'I1'): 0.551044,
('-2:label:a', 'I2'): 0.239053,
('-2:label:a', 'N'): 0.256104,
('-2:label:a', 'end0'): -0.39054,
('-2:label:a', 'end1'): -0.79531,
('-2:label:a', 'start0'): -0.912412,
('-2:label:a', 'start1'): -1.296421,
('-2:label:a', 'start2'): 0.050507,
('-2:label:c', 'C0'): 0.286841,
('-2:label:c', 'C1'): 0.23954,
('-2:label:c', 'C2'): 0.131392,
('-2:label:c', 'I0'): 0.204207,
('-2:label:c', 'I1'): 0.435524,
('-2:label:c', 'I2'): 0.287319,
('-2:label:c', 'N'): 0.566255,
('-2:label:c', 'end0'): -0.316274,
('-2:label:c', 'end1'): -0.447818,
('-2:label:c', 'start0'): -0.440391,
('-2:label:c', 'start1'): -0.637331,
('-2:label:g', 'C0'): 0.050961,
('-2:label:g', 'C1'): 0.129538,
('-2:label:g', 'C2'): 0.233915,
('-2:label:g', 'I0'): 0.147365,
('-2:label:g', 'I1'): 0.172516,
('-2:label:g', 'I2'): 0.452989,
('-2:label:g', 'N'): 0.467676,
('-2:label:g', 'end0'): -0.34103,
('-2:label:g', 'end1'): -1.095051,
('-2:label:g', 'start0'): -0.483582,
('-2:label:g', 'start1'): -0.838647,
('-2:label:t', 'C0'): 0.20546,
('-2:label:t', 'C1'): 0.126784,
('-2:label:t', 'C2'): 0.109387,
('-2:label:t', 'I0'): 0.228239,
('-2:label:t', 'I1'): 0.658125,
('-2:label:t', 'I2'): 0.351378,
('-2:label:t', 'N'): 0.34757,
('-2:label:t', 'end0'): -0.210073,
('-2:label:t', 'end1'): -0.336199,
('-2:label:t', 'end2'): -0.652646,
('-2:label:t', 'start0'): -0.135352,
('-2:label:t', 'start1'): -0.82906,
('label:a', 'C0'): -0.029359,
('label:a', 'C1'): 0.120504,
('label:a', 'C2'): 0.003761,
('label:a', 'I0'): 0.379407,
('label:a', 'I1'): 0.176052,
('label:a', 'I2'): 0.282477,
('label:a', 'N'): 0.173677,
('label:a', 'end1'): 0.421729,
('label:a', 'end2'): 0.001253,
('label:a', 'start0'): 0.987329,
('label:c', 'C0'): 0.146389,
('label:c', 'C1'): 0.313779,
('label:c', 'C2'): 0.227503,
('label:c', 'I0'): 0.341892,
('label:c', 'I1'): 0.255161,
('label:c', 'I2'): 0.402646,
('label:c', 'N'): 0.59475,
('label:g', 'C0'): 0.243706,
('label:g', 'C1'): 0.042626,
('label:g', 'C2'): 0.117353,
('label:g', 'I0'): 0.459008,
('label:g', 'I1'): 0.100071,
('label:g', 'I2'): 0.160953,
('label:g', 'N'): 0.476096,
('label:g', 'end1'): 0.365938,
('label:g', 'end2'): -0.468155,
('label:g', 'start2'): 0.547968,
('label:t', 'C0'): 0.068537,
('label:t', 'C1'): 0.213291,
('label:t', 'C2'): 0.127326,
('label:t', 'I0'): 0.362379,
('label:t', 'I1'): 0.243285,
('label:t', 'I2'): 0.450496,
('label:t', 'N'): 0.421715,
('label:t', 'end0'): 0.048126,
('label:t', 'start1'): 0.533138,
('last_ag', 'C0'): -0.045783,
('last_ag', 'C1'): 0.294139,
('last_ag', 'C2'): 0.004936,
('last_ag', 'I0'): -0.057131,
('last_ag', 'I1'): 0.194248,
('last_ag', 'I2'): 0.046827,
('last_ag', 'N'): 0.146564,
('last_ag', 'end0'): -1.773187,
('last_ag', 'end1'): -1.449687,
('last_ag', 'end2'): 0.19426,
('last_ag', 'start0'): -0.968693,
('last_ag', 'start1'): -2.427671,
('last_ag', 'start2'): -2.096358,
('last_gt', 'C0'): 0.180026,
('last_gt', 'C1'): -0.019666,
('last_gt', 'C2'): 0.314349,
('last_gt', 'I0'): 0.173217,
('last_gt', 'I1'): -0.023718,
('last_gt', 'I2'): 0.07422,
('last_gt', 'N'): 0.13615,
('last_gt', 'end0'): 0.05107,
('last_gt', 'end1'): -0.912427,
('last_gt', 'end2'): -1.141334,
('last_gt', 'start0'): -1.326271,
('last_gt', 'start1'): -2.009662,
('last_gt', 'start2'): -1.324616,
('start', 'C0'): -0.020915,
('start', 'C1'): 0.15884,
('start', 'C2'): -0.016193,
('start', 'I0'): -0.159581,
('start', 'I1'): 0.034748,
('start', 'I2'): 0.141029,
('start', 'N'): 0.025626,
('start', 'end0'): -0.961817,
('start', 'end1'): 0.481501,
('start', 'end2'): -1.468197,
('start', 'start0'): -0.366838,
('start', 'start1'): -0.385388,
('start', 'start2'): 2.486266,
('stop', 'C0'): 0.186128,
('stop', 'C1'): 0.108213,
('stop', 'C2'): -1.722325,
('stop', 'I0'): 0.363195,
('stop', 'I1'): 0.17774,
('stop', 'I2'): -0.126046,
('stop', 'N'): 0.404135,
('stop', 'end0'): -1.803947,
('stop', 'end1'): -2.038625,
('stop', 'end2'): 1.15257,
('stop', 'start0'): -0.410297,
('stop', 'start1'): -1.168023,
('stop', 'start2'): -2.088092}
text_seq = 'CCCACACACCCCACACACCACACACACCACACCCACACCCACACACACCACACCACACCCACACCCACACCACACCCACACACCCACACCACACCCACACCCACACCACACCCACACCCACACCACACCCACACACCACACCCACACACCACACACCACACCCACACACCACACCACACCCACCACACCCACACACCCACACACCACACCACACACCACACCACACCCACACACACACATCCTAACACTACCCTAACACAGCCCTAATCTAACCCTGGCCAACCTGTCTCTCAACTTACCCTCCATTACCCTGCCTCCACTCGTTACCCTGTCCCATTCAACCATACCACTCCGAACCACCATCCATCCCTCTACTTACTACCACTCACCCACCGTTACCCTCCAATTACCCATATCCAACCCACTGCCACTTACCCTACCATTACCCTACCATCCACCATGACCTACTCACCATACTGTTCTTCTACCCACCATATTGAAACGCTAACAAATGATCGTAAATAACACACACGTGCTTACCCTACCACTTTATACCACCACCACATGCCATACTCACCCTCACTTGTATACTGATTTTACGTACGCACACGGATGCTACAGTATATACCATCTCAAACTTACCCTACTCTCAGATTCCACTTCACTCCATGGCCCATCTCTCACTGAATCAGTACCAAATGCACTCACATCATTATGCACGGCACTTGCCTCAGCGGTCTATACCCTGTGCCATTTACCCATAACGCCCATCATTATCCACATTTTGATATCTATATCTCATTCGGCGGTCCCAAATATTGTATAACTGCCCTTAATACATACGTTATACCACTTTTGCACCATATACTTACCACTCCATTTATATACACTTATGTCAATATTACAGAAAAATCCCCACAAAAATCACCTAAACATAAAAATATTCTACTTTTCAACAATAATACATAAACATATTGGCTTGTGGTAGCAACACTATCATGGTATCACTAACGTAAAAGTTCCTCAATATTGCAATTTGCTTGAACGGATGCTATTTCAGAATATTTCGTACTTACACAGGCCATACATTAGAATAATATGTCACATCACTGTCGTAACACTCTTTATTCACCGAGCAATAATACGGTAGTGGCTCAAACTCATGCGGGTGCTATGATACAATTATATCTTATTTCCATTCCCATATGCTAACCGCAATATCCTAAAAGCATAACTGATGCATCTTTAATCTTGTATGTGACACTACTCATACGAAGGGACTATATCTAGTCAAGACGATACTGTGATAGGTACGTTATTTAATAGGATCTATAACGAAATGTCAAATAATTTTACGGTAATATAACTTATCAGCGGCGTATACTAAAACGGACGTTACGATATTGTCTCACTTCATCTTACCACCCTCTATCTTATTGCTGATAGAACACTAACCCCTCAGCTTTATTTCTAGTTACAGTTACACAAAAAACTATGCCAACCCAGAAATCTTGATATTTTACGTGTCAAAAAATGAGGGTCTCTAAATGAGAGTTTGGTACCATGACTTGTAACTCGCACTGCCCTGATCTGCAATCTTGTTCTTAGAAGTGACGCATATTCTATACGGCCCGACGCGACGCGCCAAAAAATGAAAAACGAAGCAGCGACTCATTTTTATTTAAGGACAAAGGTTGCGAAGCCGCACATTTCCAATTTCATTGTTGTTTATTGGACATACACTGTTAGCTTTATTACCGTCCACGTTTTTTCTACAATAGTGTAGAAGTTTCTTTCTTATGTTCATCGTATTCATAAAATGCTTCACGAACACCGTCATTGATCAAATAGGTCTATAATATTAATATACATTTATATAATCTACGGTATTTATATCATCAAAAAAAAGTAGTTTTTTTATTTTATTTTGTTCGTTAATTTTCAATTTCTATGGAAACCCGTTCGTAAAATTGGCGTTTGTCTCTAGTTTGCGATAGTGTAGATACCGTCCTTGGATAGAGCACTGGAGATGGCTGGCTTTAATCTGCTGGAGTACCATGGAACACCGGTGATCATTCTGGTCACTTGGTCTGGAGCAATACCGGTCAACATGGTGGTGAAGTCACCGTAGTTGAAAACGGCTTCAGCAACTTCGACTGGGTAGGTTTCAGTTGGGTGGGCGGCTTGGAACATGTAGTATTGGGCTAAGTGAGCTCTGATATCAGAGACGTAGACACCCAATTCCACCAAGTTGACTCTTTCGTCAGATTGAGCTAGAGTGGTGGTTGCAGAAGCAGTAGCAGCGATGGCAGCGACACCAGCGGCGATTGAAGTTAATTTGACCATTGTATTTGTTTTGTTTGTTAGTGCTGATATAAGCTTAACAGGAAAGGAAAGAATAAAGACATATTCTCAAAGGCATATAGTTGAAGCAGCTCTATTTATACCCATTCCCTCATGGGTTGTTGCTATTTAAACGATCGCTGACTGGCACCAGTTCCTCATCAAATATTCTCTATATCTCATCTTTCACACAATCTCATTATCTCTATGGAGATGCTCTTGTTTCTGAACGAATCATAAATCTTTCATAGGTTTCGTATGTGGAGTACTGTTTTATGGCGCTTATGTGTATTCGTATGCGCAGAATGTGGGAATGCCAATTATAGGGGTGCCGAGGTGCCTTATAAAACCCTTTTCTGTGCCTGTGACATTTCCTTTTTCGGTCAAAAAGAATATCCGAATTTTAGATTTGGACCCTCGTACAGAAGCTTATTGTCTAAGCCTGAATTCAGTCTGCTTTAAACGGCTTCCGCGGAGGAAATATTTCCATCTCTTGAATTCGTACAACATTAAACGTGTGTTGGGAGTCGTATACTGTTAGGGTCTGTAAACTTGTGAACTCTCGGCAAATGCCTTGGTGCAATTACGTAATTTTAGCCGCTGAGAAGCGGATGGTAATGAGACAAGTTGATATCAAACAGATACATATTTAAAAGAGGGTACCGCTAATTTAGCAGGGCAGTATTATTGTAGTTTGATATGTACGGCTAACTGAACCTAAGTAGGGATATGAGAGTAAGAACGTTCGGCTACTCTTCTTTCTAAGTGGGATTTTTCTTAATCCTTGGATTCTTAAAAGGTTATTAAAGTTCCGCACAAAGAACGCTTGGAAATCGCATTCATCAAAGAACAACTCTTCGTTTTCCAAACAATCTTCCCGAAAAAGTAGCCGTTCATTTCCCTTCCGATTTCATTCCTAGACTGCCAAATTTTTCTTGCTCATTTATAATGATTGATAAGAATTGTATTTGTGTCCCATTCTCGTAGATAAAATTCTTGGATGTTAAAAAATTATTATTTTCTTCATAAAGAAGCTTTCAAGATATAAGATACGAAATAGGGGTTGATAATTGCATGACAGTAGCTTTAGATCAAAAAGGAAAGCATGGAGGGAAACAGTAAACAGTGAAAATTCTCTTGAGAACCAAAGTAAACCTTCATTGAAGAGCTTCCTTAAAAAATTTAGAATCTCCCATGTCAACGGGTTTCCATACCTCCCCAGCATCATACATCTTTTTTCAAAGAAACTTCAAATGCCTCTTTTATGCAAGGGGCAAAATCCTGAAATGACTTAAACTTAGCAGTTTCGTCTTTTTTCAAAGAGAATGGTTGAAGAAGAATTGTTTTGGACGCTTATTGACAATCTGTTGCATTGATAAAGTACCTACTATCCCAGACTATATTTGTATACAAGTACAAAATTAGGTTTGTTGAAACAACTTTCCGATCATTGGTGCCCGTATCTGATGTTTTTTTAGTAATTTCTTTGTAAATACAGGGAGTTGTTTCGAAAGCTTATGAGAAAAATACATGAATGACAGGTAAAAATATTGGCTCGAAAAAGAGGACAAAAAGAGAAATCATAAATGAGTAAACCCACTTGCTGGACATTATCCAGTAAAGGCTTGGTAGTAACCATAATATTACCCAGGTACGAAACGCTAAGAACTTGAAAGACTCATAAAACTTCCAGGTTAAGCTATTTTTGAAAATATTCTGAGGTAAAAGCCATTAAGGTCCAGATAACCAAGGGACAATAAACCTATGCTTTTCTTGTCTTCAATTTCAGTATCTTTCCATTTTGATAATGAGCTAGTGATCCGGAAAGCTACTTTATGATGTTTCAAGGCCTGAAGTTTGAATATTTATGTAGTTCAACATCAAATGTGTCTATTTTGTGATGAGGCAACCGTCGACAACCTTATTATCGAAAAAGAACAACAAGTTCACATGCTTGTTACTCTCTATAACTAGAGAGTACTTTTTTTGGAAGCAAGTAAGAATAAGTCAATTTCTACTTACCTCATTAGGGAAAAATTTAATAGCAGTTGTTATAACGACAAATACAGGCCCTAAAAAATTCACTGTATTCAATGGTCTACGAATCGTCAATCGCTTGCGGTTATGGCACGAAGAACAATGCAATAGCTCTTACAAGCCACTACATGACAAGCAACTCATAATTTAAGTGGATAGCTTGTGATAAATTGAATTTTCTCTGTTTAGTACTTGCCGAATAGTTACTTGTTAGTTGCAGATGCTTTTTGATGACAAAGTTATCAATCTCAATATTAAACTTTTTAGGCTTTCAGGTTTAATCTTTCTTTGAGGGTGTATTAATTTTCATACAAATATTTGATTCATTATTCGTTTTACTGTTACATTAGACCTGCTCATTACATGGAGTAACTTAAGTTTTCTCAAACGCTTGATAGCATGATTTGATGTAGTAAAAAAAAAGGCAGAGTTTCCAAAAAAAATTGTTAATCGACAAAGTTAATATTATGGTGGTAGTATCTCAAATATCTGGATAACCAGATCGTACATCTCTGATAAACAATCTTTGCCACTGCTTTATCCTTTTAAATTGTATTGAGTGCTTCAGTCATTGCAAAATTTTACGAGATTTAAAATTTGTGAACCCGACCTTACCGAGAAATGATGAGCTAATTTTTATAGGTCGACCCTTCTGTCGCTTACTGGGTTGATTATCTTGTGCTTTCTTAGTATCTATCACAAAGGAGACAAAATCGTTGATAAAAAGTGCATCAACATTCCCAGCCAGAAAATGCACATCATAAAGACATGTTATTCAAGAGCCACGACCGTCTTCAATTTATCTTTTATAAAAAACCCTTGTTCTACTGACAGGATGGAATAGATATTAAATATACATTTTGCATTTTTTTTTTTTTCTGTATTGAAGATTTGTATATGAAAGATGTTTATACATCAAATGCTTTGAATAAAGCCATCTTAATTTCAATTTCATGCCCTCCTTCACCGTTTTCTGTTGGTCTAGAGGTAGCTTGTTGTGGTCACTAATGAGAACTTAAATAGTTTTCAACTGCTGGTGATAAATCAATAATTTATGTTCTTAACCTAACATTTGATGACCTTTGATGCGTTGGTTATGTTGAAGACAAATTGCCTCTAATCAGTTCCATTAAGAAATCTTCTTAACTCCTCCAAATATTCTGCCCATACGATACCTATTTGTTTACTTTGTCATTTTGCCATAAGATTGGTATCCACTTCTTGTCTGTAAAATAATTAGAAAGTAGCACAATTTTTACAGTAATGTAGCACGCGTAACTCCTAAACTTTGTCATAATGGTTGAAATGAATGTATGATATAAAAACTCGGACCCTGTTTTACTTCTTTTATAGAACCTTATTTTTGACGCAGGGAGGCGACATTTATCCAAATTAAGTTTTGACATGGCGCATCAGGGAATAAAAAAAACTTTATTATGTGGCCGAATCAACATTAATCAAATGCACTAATATTGTAACGTTCTTACAAAGGGCAGACAACTTGAGAACTTTCATGCGTGCAACAGTATTAATATTTTACTGTCTTGATATCGTTATCCTCATCGTAACGTGAATTTTTTTGTCTCATACGTTAAGGTAAATTTTGATGACCCCCGTTGTCCTTGTTTGCCTTACTGTATAAAGCACCCTTTTATTGTTTAGAATACTAGAATGATAACTGCATTCGGACTATGAAAGAAAAAATGGTAGTAGCAAAGGATAGGCATCGCCGTATTTACTACTTTGTAAACCAGTGGATTTTTGCTCAACATATAAAAAACTAAAGACCTTTTTTTCATCAATATACTTCTGAGACGTGCAGATGTGATATTCGGGTTTGAGCTTGTAGTCAACGAAGCGGGTTCATGGGCAAATTTTCTTTTTTTTCCCTTTTTTTTTGTCTAGATTATTTCGAATATGAGTTAATCATACGTTGATTAGTACTGTTGGTCTCTCATTGAAATTTTACGTGACACCATCATTTTACTTCCACATAAGTTCTAATGTTACGTAGTTCAATTTTAGTCGACCTAGCTTCATATTTATTTTAGAAGCAATTCGTAATTATCATTTTGCTTTCGAAGAAAATTAAGACTTCATTTACTATTCTCGTGATATTTTAGTAGGCGCTTCTTTTGTATCGAACCATTTTATTGCAATGGCCCTTAAGTTACCGTTATTCATACCAATTTGACGTTAATTTTAAATGCGTTCTGAAGTTTCTTAAATAACCCGGATTGGTTAGGTTCAGCCATGCCTGGCGCGTACATTGAGGCATTAGAAGATCCGCAGATAAATAATAAGCTTAGTAAATCCTAAAGATAACAACTAAAATTATATTTCCATCAGCTCAATACCGCAGTACTTTGAAACCTGATTTATATATTGCAGAACTTAATTAAAAGTACATTGTAGTTCAAAAAATAAATATCAAACTTTTGGACCCTCTCTTATTGCCTCCCAATTAATTAAAACATCTTTTCTTCCAATCTACAGGTTTGAAAAGGTAATAAGTAATATAAACTTGAGAACCAAAAAAAAAAAAAAAAAAAATACTGATCCTTACAGGTTTTAAGGTTGCAAAGGGAACATTTATTGAAAGGAGCTAACAATAGTGGGTATGAGTAAAGATATATAGATCGATATTTTGAATTCTAAATGATGAACTAGGGAAGTAATTTAGGTGAAACATTGCAACCAATCATTTTACACTTTTGGTTGCACGTAATGTACCTTTTTATGATATTTTTTTTTTATAGTAGTAGTGTGAAAATTTCTTCAGGACTTGCAAAAAGAATCTAACTGATCTTCGGATGAGCCTTTATCGATTATTTTTTTCCTAAATATAATACTTTACAAGCGAATGTTTTGTTAGGAGAAAGATATAAAAATTATGCGGCATAGGCATATTATCCAATAAAAAGGAAATTTATATATAAACTTCATTTACGTCATAAGAAAATGTTAAGTTCTCTTAACGAAAACTGTGCGAATTTTGTGTTAAAGCTGGATGATGAGAAATTATTCTCGTATTATTTTTCATCAGATACTGATAAGGTTTCAACGTCTTTTGACGTTGGCTTTTCCACACCATGTTTAGAGTTATAAAGCACAATACCGTTCTTCTTGGCATTGTTCCTTTCATCACGTTTATAGAAGTAGAGTACAACAAAAGTCCAAATGGAGAGACAAAAAGCAGAACATGCAGTGAAAGTAAACCCCTTTAAATACCTGGGAGCTTCTTCTGTTTTCCAAACCAAAACACTTATCCATGCGGTAGATGATTGAGCCATAATATTCATTGTAACTAAAGTAATAGCTCTAGTTTGAGCATCTCGGCGACAAATATCGTTTTGCCAAGAGTATAAAACAGGAGCCATAGCCCAACCAAAACATTGCAGCATAAATGCAAACCATTTGGCTCCTTCTGCGACGTCCCAAGCGGCTAATATGGAGTTACCAATGATATTGAAAACCTGAGTAAAAATAATCGCAAACCAACGAGAGTGTAATTTATCTGCAATAATACCAGTAAGCATCAAATAAACCATACCTAAACCCGGAGTAATCATGGATAACTGATTGAGCTTAGGAATAGAGTATCTTTTCAAAGATTTCAACCATAGTAGGTATGCCCCAGATGAAACATTACTGTCATTCCAACAGAAAATATTCCATAAAGTTAAAATGTATATTTTCCAATCACTGAAAATTGTTTTCCACAGTTTAATATCGAATACTTTTGTTTCAAAATCACTTTTACCTGTTTGGTTTTCTTTTAATCTTTTCCTCGCCAACCTAATTTCATCATCAGTTAAGAAAATAGAATAACAGTTGTATGGGTCACCTGGCAGGGAGTAAAATCCAATAAGGCCCACTACGACAGACACAATAGCGTCAATAATAAAGTTCCATCTCCATCCCTCTAAACCATTTACACCATTTAACGATGAATATACGGCTGACTGGATCCCACCAGCGGATAGAATACCGATATACTGGCCCAAATAGTAAAAAGCAGAACGACGCACCATTTCATCATGTTTGTAAAAGGAACCAAACAAATATTGGTATGCCAAATAACTTGGCGCTTCAAAAGCCCCAATGAAAAACCTAATTGCTTTCAAGTGTGGTACAGAATTGACATATGCAGCACCAACGGTTAAAAGCGACCAACATAAGTCGAGGCTTGGTAAAACATAGTTTAATGGGAGCTTGTTCAGGTAAATCAAAAATGGCAATTGAAATATAATATTACCAACTGTGTACATTACTTGAGTATGCACCAAATCATTACCTTGAAAGCCTAAATCTTCCTTCATTCCCGAAACGTAAGCGTTGTTTATATTAACCGTATCCAGATATTTCACCCAATAAGCAATACAAGAATAAAAGGCTAAAAGGACATCCAATTTAATTAATAATTTTTTTTCTTTGAAAGAGGTACCCTGTTTGAACCAACTATACCATTTATTGTGAGATCTTTCCTTTTCATTGATCCGATACTCTTGTTCATCGAAAAATCTCCACCATGGCCTATCGGCTTCATCTCTATATTCATAACTTCTAGTAACGTTCACATTGTCTTTATGTTCACTATAGCTACTAGTCTCAAAATGTAGTTGATCTTTTTCACTTGTAGTCGTGATGAAATTTTCAGCTGTTTCATGACTCTGGATACTGTTGGAGATAGTGACAATTTCTGTTGAATTTAAGTCATCTGGCAGGTCTTCCACCTGCCGCTTTACTGGAATAAAACCCCATTTTAGTCTTTTGTAAGGATCTACAATAATCTCTTTAACAATTGAATACATGTATGTTATTTATATATGCAGTAGTTCTCTTTGTAATTTTTTTTAACAAATAGAGAGTAAGATATGTAGCGAATGTCCATTCATCATAACAGGTAAACTAGATGCTCTTTTATATAGTCTGGTTGTATAAATAATTTATATCCTCATCTAAACGCATGTCTCCGCTTGGTTTCTTATCTATTTGTGGAGGCACCCGTAGTACTGTGCTTTCGTATTTTTTTATTTATTTATTATTTGTAGCAGTTTTTTTCCAGTGACACAATCTTTACCATTACACAGTTTTTACTATTTCTAATGATTACATTGGACCATCGGAAAACTGCGCTAACTTTGGATAACGCCACAGAACGTGATCTGACTATTGTAAAGGTGTCATTCGGTAAGGTAAACCTTCAAGGCGTCCACACCTTTAACCATATAACAGCGTAAACTCTTGTTAAAATACAGGGGTAAGACATTGGTGGATATTCAACAAGATCCGATACCTCCAATTCCGATTTCTACAAATTGTGCTCTACATATTACTGCGATGCAATTATCCACACATAAAATCGATGCCTTTAGAAAAAGACATAAAGCAGACGGCATTGTAGATATTTGACCAATTAGAATTGAATGAGATGAATATCTCACCAAGCTATTCGATATTATAGATAAAGTTTGTATCTTAGTTATGCATTGTGAGTTGGTTGCTCTACTCGCGGTTACCAGTCTCTTCTAAAAAATCTAAGGCCAATGGTATCCATGACATTTCTGCACTTTTTGTAATTGGTTTAGTTATGAAAGGAACGTCAAACCAAATGGTTTTTCAGATAAGAAATTGACAGTATCTGAGAATTTGCTATCAAAGCTCAGAGGATTTACATATTTTAACGTAATTAAAACATTTTTATGTTCGATATATTAGCAAATAGCGTATTAATATACAGCTGTTGCGCTCATGGTAAAATTTAGCGATATACTTTGCATCTTGGCTGCAAAGAAGAATGAATCGGATATACTATTTTTGATCATAATGACGGACATCATGATATAATAACGTTATACGGATAACTTTATTTCAAAAGCACCATCATGTTATCTCTTGTAAAAAGAAGTATTCTTCATTCAATACCAATTACTCGTCACATTCTTCCAATCCAATTAATATTGGTTAAAATGAACCATGTGCAAATCAGAAACATAAAATTATATCACTTTATTTCATATGGTTTCATGCTTACAAAGCTTACTGTCTTTCTCTTTAACTTATTTTTCTACAGGCTACGAATTCTTTGCAGGCTTACTTTACTCATATTATCATTACCTGTACAAATATATATTAAAGAAATCCAAACAAAAATGCTTGAAAAGCATACAGCTTCCGATACATCATGTATATAGAAAATCACAGTACAAAAATTTTGAATTTATGTATAACCGTTTCGCCTGATATATGTAAGAGCTCTTGATTGTCGGAATAGTTCGGGAATTCTGGGTGGAACTAGTAGCTGGAGATGCGTTCTAAAGGATCTAAAATCAGACTCACCCCAAAAACCAAAATTTTGATATTCAACTTTAGTATTAGCCAGTCTTAAAATGATTTTTTGCCAAGAAAGCCGAAGTTTAACGAGCGTTTTAAAATATGCACAAGTCCATTAATTAAATTTGATCACAGTGATTACCAATTTTGTTGAAAGCAGTAATTTGTGACGTCCGTTTTTGGCACAAGTAAAAAATATTTGTTTTGAAGTCTAGTTACAAGAAGCTACTGAAAACACAGGGCTGGATATAGATGTTTATAAGCTCCTCCCATG'
seq_feats = extract_features([text_seq])
res = crf.predict(seq_feats)[0]
res.index('start0')
511