Общее выравнивание последовательностей - PullRequest
0 голосов
/ 25 мая 2020

Я пишу программу, предназначенную для сопоставления двух последовательностей. У меня уже есть два списка, которые содержат объекты SeqRecord с суффиксами F и R отдельно. Теперь я хотел бы выбрать одну последовательность из списка F и найти наиболее похожую из списка R. Я хотел бы основывать свой поиск на seq_record.id. А затем выполните глобальное сопоставление для этих двух похожих последовательностей. И повторите то же самое для каждой последовательности в списке f.

Вот примеры имен идентификаторов из списка f: B IE -1_ITS5; В IE -2_ITS5; В IE -3_ITS5; КАЗ-5_ITS5

А вот из списка r: B IE -1_ITS4; В IE -2_ITS4; В IE -3_ITS4; KAZ-5_ITS4

Дело в том, чтобы, например, для последовательности с номером id B IE -1_ITS5 найти в списке r последовательность B IE -1_ITS4 и выполнить для них глобальную последовательность выравнивание.

Сопоставление первого с первым, второго со вторым не является предпочтительным вариантом, потому что могут быть последовательности, в которых не будет никакой пары.

Спасибо за любой ответ

1 Ответ

1 голос
/ 25 мая 2020

Я использовал алгоритм сопоставления строк, чтобы найти оценку сходства двух строк и нашел наиболее похожую строку:

import difflib
import numpy as np

def getScore(item1,item2):
    return float(difflib.SequenceMatcher(None, item1, item2).ratio()*100)

def getMostSimilar(f,r):
    result={}
    for i in f:
        scores=[0]*len(r)
        for ind,j in enumerate(r):
            scores[ind]=getScore(i,j)
        print(scores)
        ind = np.argmax(scores)
        result[i]=r[ind]
    return result

f=['BIE-1_ITS5','BIE-2_ITS5','BIE-3_ITS5','KAZ-5_ITS5']
r=['BIE-1_ITS4','BIE-2_ITS4','BIE-3_ITS4','KAZ-5_ITS4']

print(getMostSimilar(f,r))

Я получил следующий результат:

[90.0, 80.0, 80.0, 50.0]
[80.0, 90.0, 80.0, 50.0]
[80.0, 80.0, 90.0, 50.0]
[50.0, 50.0, 50.0, 90.0]
{'BIE-1_ITS5': 'BIE-1_ITS4',
 'BIE-2_ITS5': 'BIE-2_ITS4',
 'BIE-3_ITS5': 'BIE-3_ITS4',
 'KAZ-5_ITS5': 'KAZ-5_ITS4'}

Напечатанный Dictionary - это отображение наиболее похожих предметов.

Примечание: Это не возвращает уникальное сопоставление, так как для этого потребуется дополнительная информация о том, как сопоставить, т.е. * корпуса выключателя)

...