我想制作一个包含所有大写字母的正则表达式单词列表。数据集是一堆称为语料库的生物学论文文本文件。
len(corpus.fileids())
的结果为487,这意味着语料库中有487个论点。
主要原因是收集单词列表以过滤生物单词,例如基因名称等(ATP,BRCA)
这里是我一直在尝试的一些代码。(附:我正在使用python3)
我一直坚持使用函数来调出语料库中的所有文件。对于单个文件,我认为这可以工作。
capital = re.findall(r'[A-Z]+', GNICorpus)
但是问题是我必须遍历语料库中这些txt文件中的所有单词,并且不知道。1次试用
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)
import re
text = "These are SOME words and someTHAT shouldNot match"
result = re.findall(r'\b[A-Z]+\b', text)
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
对象具有.raw()
函数,它将连接对象中的所有文件并返回单个str
。
>>> type(GNICorpus.raw())
str
在这种情况下,可将正则表达式应用于原始字符串,例如
re.findall(r'\b[A-Z]+\b', GNICorpus.raw())
并且要使用str.isupper
函数代替正则表达式,可以使用.words()
函数遍历语料库对象中的每个标记,即>>
[word for word in GNICorpus.words() if word.isupper()]
您会发现,正则表达式比遍历
.words()
快得多。如果您有兴趣,在线上有很多正则表达式与Python的本机字符串讨论。
但是等等!如果我们可以用这种方法找到“基因序列”怎么办?
from collections import Counter Counter(re.findall(r'\b[GTAC]+\b', GNICorpus.raw()))
[out]:
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[GTAC]{4,}\b', GNICorpus.raw()))