我有一個大的文本向量,我想搜索特定的字符或短語。正則表達式正在走向永恆。我如何快速搜索它?如何加快R中的文本搜索速度?
的樣本數據:
R <- 10^7
garbage <- replicate(R, paste0(sample(c(letters[1:5]," "),10,replace=TRUE),collapse=""))
我有一個大的文本向量,我想搜索特定的字符或短語。正則表達式正在走向永恆。我如何快速搜索它?如何加快R中的文本搜索速度?
的樣本數據:
R <- 10^7
garbage <- replicate(R, paste0(sample(c(letters[1:5]," "),10,replace=TRUE),collapse=""))
如果你確實需要的正則表達式,通常可以通過使用PCRE庫(通過設置perl=TRUE
)得到了默認的正則表達式引擎的性能提升。還有其他的性能提示在?grep
:
性能方面的考慮:
如果你正在做大量的正則表達式匹配的,包括 很長的字符串,你將要考慮使用的選項。 通常,PCRE將比默認正則表達式 引擎更快,'fixed = TRUE'更快(尤其是當每個模式 僅匹配幾次時)。
如果您在單字節語言環境工作,並具有顯着的UTF-8 字符串,在該區域設置有表示的,將它們轉換首先是作爲 只是一個UTF-8字符串將迫使 做的所有匹配Unicode,對於默認的POSIX 1003.2模式,其處罰約爲3倍。
如果您可以使用'useBytes = TRUE',那麼匹配前將檢查字符串 ,實際匹配會更快。 基於字節的匹配在UTF-8語言環境中通常是足夠的,因爲 一個字符的字節模式永遠不會匹配另一個字符的一部分。
沒有必要對正則表達式在這裏,他們的動力配備了計算成本。
您可以使用,fixed=TRUE
參數在R中的任何正則表達式函數中關閉正則表達式解析。速度上漲導致:
library(microbenchmark)
m <- microbenchmark(
grep(" ", garbage, fixed=TRUE),
grep(" ", garbage)
)
m
Unit: milliseconds
expr min lq median uq max neval
grep(" ", garbage, fixed = TRUE) 491.5634 497.1309 499.109 503.3009 1128.643 100
grep(" ", garbage) 1786.8500 1801.9837 1810.294 1825.2755 3620.346 100
很酷。如果你有很多重複的載體,大概有一些技巧可以起作用。 –