gpt4 book ai didi

python - 如何在 python 中将文本 block 标记为一个标记?

转载 作者:行者123 更新时间:2023-12-05 03:16:28 25 4
gpt4 key购买 nike

最近我正在研究一个由许多基因组 block 组成的基因组数据集。在之前的自然语言处理工作中,我使用了 nltk 中的 sent_tokenizeword_tokenize 来标记句子和单词。但是当我在基因组数据集上使用这些函数时,它无法正确标记基因组。下面的文字显示了基因组数据集的一部分。

>NR_004049 1
tattattatacacaatcccggggcgttctatatagttatgtataatgtat
atttatattatttatgcctctaactggaacgtaccttgagcatatatgct
gtgacccgaaagatggtgaactatacttgatcaggttgaagtcaggggaa
accctgatggaagaccgaaacagttctgacgtgcaaatcgattgtcagaa
ttgagtataggggcgaaagaccaatcgaaccatctagtagctggttcctt
ccgaagtttccctcaggatagctggtgcattttaatattatataaaataa
tcttatctggtaaagcgaatgattagaggccttagggtcgaaacgatctt
aacctattctcaaactttaaatgggtaagaaccttaactttcttgatatg
aagttcaaggttatgatataatgtgcccagtgggccacttttggtaagca
gaactggcgctgtgggatgaaccaaacgtaatgttacggtgcccaaataa
caact
>NR_004048 1
aatgttttatataaattgcagtatgtgtcacccaaaatagcaaaccccat
aaccaaccagattattatgatacataatgcttatatgaaactaagacatt
tcgcaacatttattttaggtatataaatacatttattgaaggaattgata
tatgccagtaaaatggtgtatttttaatttctttcaataaaaacataatt
gacattatataaaaatgaattataaaactctaagcggtggatcactcggc
tcatgggtcgatgaagaacgcagcaaactgtgcgtcatcgtgtgaactgc
aggacacatgaacatcgacattttgaacgcatatcgcagtccatgctgtt
atgtactttaattaattttatagtgctgcttggactacatatggttgagg
gttgtaagactatgctaattaagttgcttataaatttttataagcatatg
gtatattattggataaatataataatttttattcataatattaaaaaata
aatgaaaaacattatctcacatttgaatgt
>NR_004047 1
atattcaggttcatcgggcttaacctctaagcagtttcacgtactgttta
actctctattcagagttcttttcaactttccctcacggtacttgtttact
atcggtctcatggttatatttagtgtttagatggagtttaccacccactt
agtgctgcactatcaagcaacactgactctttggaaacatcatctagtaa
tcattaacgttatacgggcctggcaccctctatgggtaaatggcctcatt
taagaaggacttaaatcgctaatttctcatactagaatattgacgctcca
tacactgcatctcacatttgccatatagacaaagtgacttagtgctgaac
tgtcttctttacggtcgccgctactaagaaaatccttggtagttactttt
cctcccctaattaatatgcttaaattcagggggtagtcccatatgagttg
>NR_004052 1

当 ntlk 的 tokenizer 应用于此数据集时,每一行文本(例如 tattattatacacaatcccggggcgttctatatagttatgtataatgtat )都变成一个不正确的标记。一个序列 block 应该被视为一个标记。例如,在这种情况下,>NR_004049 1>NR_004048 1 之间的内容应被视为一个标记:

>NR_004049 1
tattattatacacaatcccggggcgttctatatagttatgtataatgtat
atttatattatttatgcctctaactggaacgtaccttgagcatatatgct
gtgacccgaaagatggtgaactatacttgatcaggttgaagtcaggggaa
accctgatggaagaccgaaacagttctgacgtgcaaatcgattgtcagaa
ttgagtataggggcgaaagaccaatcgaaccatctagtagctggttcctt
ccgaagtttccctcaggatagctggtgcattttaatattatataaaataa
tcttatctggtaaagcgaatgattagaggccttagggtcgaaacgatctt
aacctattctcaaactttaaatgggtaagaaccttaactttcttgatatg
aagttcaaggttatgatataatgtgcccagtgggccacttttggtaagca
gaactggcgctgtgggatgaaccaaacgtaatgttacggtgcccaaataa
caact
>NR_004048 1

因此每个以特殊单词开头的 block ,例如 >NR_004049 1 直到下一个特殊字符都应被视为一个标记。这里的问题是标记这种数据集,我不知道如何正确标记它们。我非常感谢能帮助我解决这个问题的答案。

更新:解决这个问题的一种方法是在每个 block 中附加所有行,然后使用 nltk 分词器。例如,这意味着要附加 >NR_004049 1>NR_004048 1 之间的所有行,以从多行中生成一个字符串,因此 nltk 分词器会将其视为一个标记。任何人都可以帮助我如何在每个 block 中附加行?

最佳答案

显然,您只需要连接两个 ID 之间的行即可。应该不需要 nltk 或任何分词器,只需一些编程;)


patterns = {}
with open('data', "r") as f:
id = None
current = ""
for line0 in f:
line= line0.rstrip()
if line[0] == '>' : # new pattern
if len(current)>0:
# print("adding "+id+" "+current)
patterns[id] = current
current = ""
# to find the next id:
tokens = line.split(" ")
id = tokens[0][1:]
else: # continuing pattern
current = current + line
if len(current)>0:
patterns[id] = current
# print("adding "+id+" "+current)


# do whatever with the patterns:
for id, pattern in patterns.items():
print(f"{id}\t{pattern}")

关于python - 如何在 python 中将文本 block 标记为一个标记?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74623917/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com