我想使用tm包从多个文本文档的语料库中选择并保留基因名称。我使用自定义函数只保留“模式”中定义的基因并删除其他所有内容。这是我的代码
docs <- Corpus(DirSource("path of the directory containing text documents"))
f <- content_transformer(function(x, pattern)regmatches(x, gregexpr(pattern, x, ignore.case=TRUE)))
genes = "IL1|IL2|IL3|IL4|IL5|IL6|IL7|IL8|IL9|IL10|TNF|TGF|AP2|OLR1|OLR2"
docs <- tm_map(docs, f, genes)
代码工作得非常好。但是,如果我需要匹配更多的基因(比如> 5000个基因),那么接近它的最佳方法是什么?我不想将基因放在数组中并循环使用tm_map函数,以避免巨大的运行时间和内存限制。
答案 0 :(得分:1)
如果您只想要最快的矢量化固定字符串正则表达式,请使用stringi
包,而不是tm
。具体来说,查看stri_match*
函数(如果您只处理ASCII,则可能会更快找到stringr
- 查找Hadley的最新版本和注释)。
但是如果基因名称的正则表达式是固定的并且是预先知道的,并且您将在这些少数字符串上进行 lot 检索,那么您可以标记每个文档以便更快地检索。
(你没有完全告诉我们你的用例。你的运行时有多少是这个检索任务?0.1%?99%?你是否将基因存储为文本字符串?为什么不将它们标记化并将其转换为因子在输入时间?)
无论哪种方式,tm都不是一个非常可扩展的高性能软件包,所以请看其他方法。