Datei (1) und Magie (5): Priorisierung eines Ergebnisses

7

Meine Frage folgt dieser: Datei (1) und Magie (5): Beschreibung anderer Formate .

Ich möchte eine FASTA-Sequenz beschreiben ( http://en.wikipedia.org/wiki/FASTA_format )

Es könnte eine DNA-Sequenz sein (nur mit ATGC)

>header
ATGCTAGCATAGCATCGATGCTGTAGCTACGTAGCTACGTCTACG

Ein "magisches" Muster wäre

>.*\n[ATGC]*

oder eine PROTEIN- Sequenz (ACDEFGHIKLMNPQRSTVWYBZX, die auch ATGC enthält)

>header
AHITKLMNPQRGHIKLMNPQRC

Ein "magisches" Muster wäre

>.*\n[ACDEFGHIKLMNPQRSTVWYBZX]*

Aber wenn ich diese regulären Ausdrücke verwende, sagt mir die Datei, dass es sich um ein Protein handelt, da es mit dem 2. regulären Ausdruck übereinstimmt. Gibt es eine Möglichkeit, ein Ergebnis zu priorisieren? Gibt es eine Möglichkeit zum Proritieren, etwa "Versuchen Sie kein anderes Muster, wenn dieses übereinstimmt?".

Pierre
quelle
2
Warum schränken Sie Ihr Format so ein? Sowohl U(Sec) als auch O(Pyl) sind korrekte und gültige Aminosäurecodes, und Sie können auch *für STOP sowie die verschiedenen IUPAC-Codes wie Yfür Pyrimidine usw. in Nukleotidsequenzen sowie einfach -für Lücken oder Xoder Nfür maskierte oder unbekannte Reste finden . Ich bin mir ziemlich sicher, dass die meisten Programme einige ziemlich komplexe Heuristiken verwenden werden, um zwischen DNA (und Sie scheinen hier RNA zu ignorieren) und Protein zu wählen. Ich bezweifle sehr, dass Sie es mit einer einfachen Regex tun können.
Terdon
Außerdem habe ich noch nie damit gespielt, daher weiß ich nicht, ob es funktionieren wird, aber Sie können das Muster möglicherweise verankern. So etwas wie >.*\n[ATCGXN-]*\nzum Beispiel für DNA (Ignorieren der anderen IUPAC-Codes ).
Terdon
Ich würde mir nicht die Mühe machen, alle Aminosäuren aufzuzählen. Verwenden Sie einfach "a-zA-Z \ * \ -". Das Wichtigste ist, Leerzeichen und Zahlen auszuschließen, die in E-Mail-Nachrichten erscheinen können, die oft so aussehen.> Von: [email protected] Betreff: Viel Lärm um nichts
vk5tu

Antworten:

2

Sie können Prioritäten mit einem "Stärke" -Wert festlegen. Aus Magie (5) :

Eine optionale Stärke kann in einer separaten Zeile angegeben werden, die sich auf die aktuelle magische Beschreibung im folgenden Format bezieht:

    !:strength OP VALUE

Der Operand OP kann sein: +, -, * oder / und VALUE ist eine Konstante zwischen 0 und 255. Diese Konstante wird unter Verwendung des angegebenen Operanden auf die aktuell berechnete Standardmagiestärke angewendet.

Fügen Sie diese Zeile hinzu, um die Priorität der PROTEIN-Beschreibung zu verringern:

!:strength - N

... wo Nist groß genug, um es unter die Punktzahl der DNA-Beschreibung zu bringen.

Die "aktuell berechnete Standardmagiestärke" eines Tests ist nicht sofort offensichtlich, aber Sie können das --listFlag verwenden, um alle anzuzeigen. Alternativ lesen Sie die Quelle - die verantwortliche Funktion ist apprentice_magic_strength. Es wird aus dem ersten Test des Eintrags berechnet. Wenn Sie also einem Typ Vorrang vor einem anderen geben möchten, ist es hilfreich, identische erste Zeilen zu haben. (Auf diese Weise muss Nnur 1 sein.)

Ein weiteres Problem: Ihre regulären Ausdrücke sind nicht streng genug. *kann mit null Zeichen übereinstimmen, sodass das Muster am Anfang jeder Zeile steht - Protein, DNA oder andere. Vergewissern Sie sich zum Verschärfen, dass die gesamte Zeile nur aus den zulässigen Zeichen besteht : \n[ATGC]+$, oder \n[ATGC]{num,}$(wobei num das kürzeste Muster ist, das Sie erwarten)

0       string  =>header
>&0      regex   \n[ATGC]+$     DNA

0       string  =>header
>&0      regex   \n[ACDEFGHIKLMNPQRSTVWYBZX]+$  PROTEIN
!:strength - 1
JigglyNaga
quelle
Die Grundlinienstärke beginnt also bei 20 und wird bei verschiedenen Vorgängen je nach Größe und Typ grob angehoben oder abgesenkt.
Pysis