如何使用正则表达式从NLTK语料库中找到大写字母?

问题描述 投票:0回答:2

我想制作一个包含所有大写字母的正则表达式单词列表。数据集是一堆称为语料库的生物学论文文本文件。

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)
python regex nlp nltk corpus
2个回答
0
投票
假设输入是文本,则有效

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对象具有.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()))

© www.soinside.com 2019 - 2024. All rights reserved.