生物信息学中很多数据集是在论文的附件中提供的,这种方式提供的数据集很多时候会将FASTA格式的序列数据,连同一些说明性的注释一起写在一个PDF文件里面。在这种情况下,如果要使用这样的数据集无外乎有两种方法,一是给作者发邮件,索要原始的数据集,另外一个,就是自行处理PDF格式的数据。对于第一种方法,即便作者回复极为迅速,也少不了要几个小时的等待,而如果采用第二种方法,那么就要知道如何有效的从PDF文件里提取数据了。如果你像我一样,已经习惯了在Linux里面完成大多数工作的话,那么这并不是一个很困难的事情。
从PDF文件提取数据的第一步是使用pdftotext程序来把PDF文件转换成txt文件。
pdftotext data.pdf
就会生成data.txt文件了。
如此生成的data.txt文件里面是会有众多的格式控制符号的,可以用cat -vET来查看这些字符,然后再用tr -d “\XXX”的方法将这些控制符号删除。例如:原始word文档转换出来的PDF文件会有换页符号^L存在。这时候就要去查到^L是\014这个符号,然后就可以删除这些无用的控制符号了。
删除控制符号以后,如果数据主要是FASTA格式,其中有些标识行进行说明,可以用grep命令定位特征标示行,例如,特征标示行的开头的(1),(2)之类的项目符号的话,则可以用
cat data.txt | grep -nPe “^\(\d+\)”
来输出每一个标示行的行号。
如果各个标示行号之间都是FASTA格式的话,就可以使用命令行文本处理的技巧来将每一段FASTA文件中的序列ID提取出来了。
cat data.txt | head -n [第K+1标示行行号] | tail -n +[第K标示行行号] | grep -Pe "^>" | cut -d "|" -f 2 | sort | uniq
就可以输出各标示行之间的序列ID了。将输出重定向到磁盘文件,然后到UniProt查询,就可以得到完整的序列数据了。