![](/img/trans.png)
[英]Find n words starting with capital letter before 2 words of capital letters (regex)
[英]How to find a capital letter words from an NLTK corpus using regex?
我想用一個由所有大寫字母組成的正則表達式制作一個單詞列表。 數據集是一堆稱為語料庫的生物論文文本文件。
len(corpus.fileids())
的結果是 487,這意味着語料庫中有 487 篇論文。
這樣做的主要原因是收集詞表來過濾基因名稱等生物詞(ATP,BRCA)
這是我一直在嘗試的一些代碼。 (ps我正在使用python3)
我堅持使用函數來調用語料庫中的所有文件。 對於單個文件,我認為這會起作用。
capital = re.findall(r'[A-Z]+', GNICorpus)
但問題是我必須通過語料庫中的論文 txt 文件中的所有單詞來 go 並且不知道。 第一次審判
import re
import nltk
from nltk.corpus import*
x = [
(file)
for file in Corpus.fileids()
for w in Corpus.words(file)
if w.upper()
]
第二次審判
capital = re.findall(r'[A-Z]+', Corpus)
capital
第三次審判
for fileid in Corpus.fileids():
words = Corpus.words(fileid)
capital = re.findall(r'[A-Z]+', words)
您的正則表達式將匹配一個單詞中的單個(或多個)大寫字母。
例如:
Corpus = "These are SOME words and someTHAT shouldNot match"
result = re.findall(r'[A-Z]+', Corpus)
>> ['T', 'SOME', 'THAT', 'N']
你最好使用這個正則表達式(其中 \b 是單詞邊界):
# \b[A-Z]+\b
Corpus = "These are SOME words and someTHAT shouldNot match"
result = re.findall(r'\b[A-Z]+\b', Corpus)
>> ["SOME"]
但這一切都取決於你在尋找什么。
您可能不需要為此目的使用正則表達式,但在您的用例中它更快 =)
import re
text = "These are SOME words and someTHAT shouldNot match"
result = re.findall(r'\b[A-Z]+\b', text)
使用https://docs.python.org/3/library/stdtypes.html#str.isupper ,這也有效:
text = "These are SOME words and someTHAT shouldNot match"
result = [word for word in text.split() if word.isupper()]
GNICorpus
來自https://www.ncbi.nlm.nih.gov/pubmed/30309207很可能來自https://github.com/Ewha-Bio/Genomics-Informatics-Corpus
from nltk.corpus import PlaintextCorpusReader
root_dir = 'Genomics-Informatics-Corpus/GNI Corpus 1.0'
GNICorpus = PlaintextCorpusReader(root_dir, '.*\.txt', encoding='utf-8')
GNICorpus
object 有一個.raw()
function 將連接 object 中的所有文件並返回單個str
。
>>> type(GNICorpus.raw())
str
在這種情況下,正則表達式可以應用於原始字符串,例如
re.findall(r'\b[A-Z]+\b', GNICorpus.raw())
要使用str.isupper
function 而不是正則表達式,可以使用.words()
ZC1C425268E68385D14AB5074C17A9 即循環遍歷語料庫 object 中的每個標記,
[word for word in GNICorpus.words() if word.isupper()]
您會發現正則表達式比遍歷.words()
快得多。 如果您有興趣,在線上有很多正則表達式與 Python 的原生字符串討論。
代替[AZ]
,我們可以指定[ATCG]
序列:
from collections import Counter
Counter(re.findall(r'\b[ATCG]+\b', GNICorpus.raw()))
[出去]:
Counter({'G': 1249,
'CA': 958,
'A': 6558,
'CCCTC': 21,
'C': 2981,
'T': 1284,
'CTCT': 3,
'AG': 64,
'AACC': 3,
'AA': 28,
'CC': 131,
'TCGA': 122,
'GT': 427,
'GAGGGAGGGAGCGAGA': 3,
'GC': 122,
'GA': 102,
'TGACGTCA': 3,
'TCA': 15,
'GCG': 4,
'AGG': 12,
'ACA': 3,
'GCA': 3,
'GTG': 3,
'AGT': 6,
'GAA': 3,
'GAC': 18,
'AGA': 6,
'ACC': 7,
'CTT': 11,
'TGC': 12,
'AGC': 3,
'TCC': 7,
'TTC': 6,
'GTT': 4,
'ACG': 12,
'ATG': 4,
'GAG': 9,
'GGG': 3,
'AAT': 3,
'ACAGC': 3,
'AT': 35,
'TG': 270,
'GGTCAACAAATCATAAAGATATTGG': 3,
'TAAACTTCAGGGTGACCAAAAAATCA': 3,
'TA': 17,
'CT': 61,
'CGC': 20,
'TC': 100,
'GG': 23,
'CG': 15,
'AC': 6,
'CCCTCT': 4,
'TT': 124,
'CAGT': 3,
'TCTG': 3,
'ATCC': 61,
'AAAAACAACAAGATAA': 3,
'GATA': 6,
'CACCC': 3,
'ATC': 275,
'GGCGCCATCTT': 3,
'TCTGAGCC': 3,
'CGCC': 3,
'GCTA': 7,
'AAA': 2,
'AAG': 30,
'GTA': 4,
'ATT': 4,
'AAC': 4,
'CAT': 8,
'GGC': 6,
'TAA': 6,
'TTT': 9,
'CAG': 3,
'TGG': 3,
'CCT': 11,
'CTC': 273,
'CCG': 12,
'GCT': 271,
'TAG': 3,
'TAT': 7,
'CAC': 6,
'TAC': 8,
'TCG': 3,
'TTG': 6,
'ATA': 21,
'TTAGGG': 3,
'CACTA': 3,
'TATA': 19,
'CCA': 31,
'CCC': 4,
'CGT': 3,
'CGA': 3,
'CGG': 3,
'GTC': 268,
'GGCAGG': 246,
'CGTGCCCCAGCCCAGTC': 1,
'TTCCAGTACAGCCCATCCAATAAG': 1,
'TGCGAGGGCTGCGAGGTC': 1,
'TGTCAGCTTGCGTGTGGTTGC': 1,
'GTAACCCGTTGCACCCCATT': 1,
'CCATCCAATCGGTAGTAGCG': 1,
'GACGATGCTCCCCGGGCTGTATTC': 1,
'TCTCTTGCTCTGGGCCTCGTCACC': 1,
'TCTTAACTGCCGGATCCACAAAAA': 1,
'ATCTCCGCCAACAGCTTCTCCTTC': 1,
'GGGCAGCCTCCGTTTGATGGT': 1,
'CGCTTGGCAGGGTGTTTGGTC': 1,
'GCCATCGAGGAGTGCCAATACC': 1,
'GGCCACACCTGCTGAAGAGATG': 1,
'GTAGCCCCAGTGGAGAGCCTTGTG': 1,
'ATGCCAGTGGGGAGTTTGTTATCG': 1,
'TGAATCGGACCCACTTGAGAGG': 1,
'CAGGAGCGGCTTGTTTGAGGTA': 1,
'GGAGGCGCCGAGACTTAGGT': 1,
'GCGGGTGAGCACAGCAGAGC': 1,
'TCATCCCGAATAAAAGCGAAGAGC': 1,
'AGGGCAACAACATTAGCAGGAGAT': 1,
'GATGTGATCCGACATTACA': 1,
'CTAGAACTGCTCTGTATGT': 1,
'CAATTCGGCAAGTAATGGA': 1,
'GTCTCTTCGGGAACTGCAAG': 1,
'TGGGACACAGGCACTGTAGA': 1,
'GCTCTCTGCTCCTCCTGTTC': 1,
'CAATACGACCAAATCCGTTG': 1,
'ATCG': 10,
'TCGT': 2,
'TGAT': 1,
'CGTG': 1,
'CGTT': 1,
'CATC': 1,
'GTGA': 1,
'ATCGT': 4,
'TCGTG': 1,
'TCGTT': 1,
'CGTGA': 1,
'CATCG': 1,
'GTGAT': 1,
'CGTGAT': 1,
'CATCGT': 1,
'TCGTGA': 1,
'TCGTGAT': 1,
'ATCGTGACT': 1,
'CGTGATT': 2,
'GTGACT': 1,
'ATCGTT': 1,
'ATCGTGAGA': 1,
'GTGAAG': 1,
'GTGATTG': 1,
'GTGATT': 1,
'TCGTGACT': 3,
'TCGATTG': 3,
'TCGTGAGA': 3,
'TTACT': 3,
'ACT': 5,
'ATTG': 2,
'GATTG': 1,
'TGTGTAGAGCTCCTCG': 1,
'TTAAA': 1,
'GGCG': 1,
'TACCTGCATGCTGCGGTGAAG': 1,
'AGGGCTGTGTAGAAGTACTCGC': 1,
'TTTT': 2,
'AATAAA': 1,
'TCGTGCA': 1,
'TCTACCTCGACAG': 1,
'CCTCCTCCT': 1,
'CCTTGGTTTTC': 1,
'GAAATCCCATCACCATCTTCCAGG': 1,
'GAGCCCCAGCCTTCTCCATG': 1,
'AACACCA': 1,
'CGCTCCCGCCTTACTTCGCA': 1,
'TTAGCTTGCCTCGTCCCC': 1,
'TTTCGACACTGGATGGCG': 1,
'TTGCGTTGCGTAGGGGGGAT': 1,
'TTTAAA': 2,
'GATATC': 1,
'AGTATC': 1,
'CGTCTGTGAGGGGAGCGTTT': 1,
'TGATTTTGATGACGAGCGTAAT': 1,
'GATGTGAGAACTGTATCCTAGCAAG': 1,
'GGCTGGCCTGTTGAACAAGTCTGGA': 1,
'ATAC': 1,
'GTCGGAGTCAACGGATTTG': 1,
'TGGGTGGAATCA': 1,
'TATTGGA': 1,
'AGAAAAAGCAACCACGAAGC': 1,
'AAACCTCTGTCTGTGAGTGCC': 1,
'TATT': 1,
'ACCC': 1,
'GCCA': 15,
'CAAT': 1,
'AGAC': 11,
'GCTCCCGCCTTACTTCGCAT': 1,
'CGGGGACGAGGCAAGCTAA': 1,
'GCCGCCATCCAGTGTCG': 1,
'TTGCGTTGCGTAGGGGGG': 1})
如果我們想將最小字符設置為 4,而不是+
,您可以使用{4,}
:
from collections import Counter
Counter(re.findall(r'\b[ATCG]{4,}\b', GNICorpus.raw()))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.