Мне нужно найти строку ДНК для шаблона GGG + N (1-7) + GGG + N (1-7) + GGG - PullRequest
0 голосов
/ 07 июня 2018

Где N = нуклеотид A, C, T или G.Между каждым GGG находится от 1 до 7 'N' нуклеотидов.Я не уверен, как обращаться с 'N', поскольку это может быть 1 из 4 оснований, а также неизвестное количество из них.

Ответы [ 2 ]

0 голосов
/ 07 июня 2018

Честно говоря, это то, что вы хотите, это выражение регулярного выражения.Я не достаточно знаком с Python, но думаю, вы захотите распараллелить сканирование.Я сделал некоторую биоинформатику в C ++, но мы искали известные строки, и если вы использовали методы, основанные на хэше, 3 базы слишком малы, чтобы отключить imo, учитывая, что GGG ​​будет иметь миллионы повторов в геноме.

import re
matches = re.search('GGG.{1,7}GGG.{1,7}GGG',genome)

Даже в этом случае не работает подход «скользящего окна».АКА, вы бы хотели, чтобы он возвращал 2 результата, если вход был GGG + N (1-7) + GGG + N (1-7) + GGG + N (1-7) + GGG заметить 3-й N (1-7)+ Повторение GGG?

Для этого вы, вероятно, захотите

import re
matches = re.search('GGG(.{1,7}GGG){2,}',genome)

, затем сделайте второй проход по результатам, чтобы найти их.Этот подход, хотя и «легкий», требует довольно много памяти, поскольку он создает подстроки, поэтому большие геномы сталкиваются с небольшой проблемой.

Следующая оптимизация - создание собственного анализатора паттернов, который не тратит впустую потраченные усилия.памяти и позволяет искать частичную подстроку без дублирования строковых данных.Наличие нескольких копий генома в памяти может быть невероятно дорогим, когда это несжатый текст.

Эта проблема хорошо подходит для многопоточности, хотя, если вы можете нацеливаться на подстроки геномов.

0 голосов
/ 07 июня 2018

Если вас беспокоит только «N», попробуйте следующий шаблон, когда вы будете выполнять регулярное выражение.

pattern = '[ACTG]{1,7}'

Это должно соответствовать / искать и т. Д. Независимо от того, какое значение N существует плюс GGG.Если вы не хотите совпадать с GGG и знаете, что существует как минимум 4 базы, замените 1 на 4.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...