각 키워드에 대해 (1) 문장 세트, (2) 키워드 세트 및 (3) 점수 (실수)를가집니다. 문장의 점수 = sum_over_keywords (문장 * 키워드 점수 내의 키워드 수)를 문장에 할당해야합니다.R : 여러 문자열에 대해 여러 패턴 수를 최적화하는 방법은 무엇입니까?
재현 예 : 이제
library(stringi)
# generate 200 synthetic sentences containing 15 5-character words each
set.seed(7122016)
sentences_splitted = lapply(1:200, function(x) stri_rand_strings(15, 5))
# randomly select some words from the sentences as our keywords
set.seed(7122016)
keywords = unlist(lapply(sentences_splitted, function(x) if(sample(c(TRUE,FALSE),size=1,prob=c(0.2,0.8))) x[1]))
len_keywords = length(keywords)
# assign scores to keywords
set.seed(7122016)
my_scores = round(runif(len_keywords),4)
, 문장을 득점 :
res = system.time(replicate(100,
unlist(lapply(sentences_splitted, function (x)
sum(unlist(lapply(1:len_keywords, function(y)
length(grep(paste0("\\<",keywords[y],"\\>"),x))*my_scores[y]
)))))))
나는 내가 할 수있는만큼 코드를 최적화하려고하지만 여전히 매우 느린입니다 :
user system elapsed
11.81 0.01 11.89
이 작업을 200,000 번 ... length(grep(paste0("\\<",keywords[y],"\\>"),x))
보다 빠른 것이 있습니까? 중첩 된 lapply
의 다른 것보다 사용해야합니까?
참고 :
- 이미 병렬로 내 노트북의 4 개 개의 코어를 사용하려면, 그래서 내가 정말 필요한 것은 기본 덩어리 위에 빠르게 표시하는 것입니다.
- 누군가가 스크립트를 제공하면 C의 C/C++/Fortran 코드를 호출하게되어 기쁩니다 (불행히도이 언어를 모른다는 사실을 알고 있습니다).
'res'에서 얻은 결과는 무엇입니까? 200 x 100 크기의 예제에서 모두 0을 얻고 있습니다. 예제의 출력을 확인할 수 있습니까? –
@PierreLafortune 새로운 R 세션을 시작하고 두 번 확인했습니다. 나는 여전히 같은 출력을 얻고 있습니다 : 즉,'6.23 0.00 6.32' – Antoine
죄송합니다. 나는 명시해야한다. 나는 당신이'replicate' 함수를 시스템 시간으로 감쌀 때가되는 것을 알게되었습니다. 그러나'system.time' 래퍼를 제거하면 실제 함수가 작동하지 않는 것을 볼 수 있습니다. 그것은 모두 0을 생성합니다. –