가정하자 텍스트 데이터는 다음과 같습니다R은 : 문자 벡터에서 통제 어휘를 추출
이voc <- c("peter", "mary", "bob", "red", "green", "blue")
결과가 있어야한다 :
txt <- c("peter likes red", "mary likes green", "bob likes blue")
내가이 통제 어휘에서 단어 그 문자열을 줄이고 자 벡터 :
c("peter red", "mary green", "bob blue")
하나는 tm
라이브러리를 사용할 수 있지만, 만 제공 나 조밀 한 문서 용어 행렬 :
foo <- VCorpus(VectorSource(txt))
inspect(DocumentTermMatrix(foo, list(dictionary = voc)))
Non-/sparse entries: 6/12
Sparsity : 67%
Maximal term length: 5
Weighting : term frequency (tf)
Terms
Docs blue bob green mary peter red
1 0 0 0 0 1 1
2 0 0 1 1 0 0
3 1 1 0 0 0 0
벡터 요소 당 하나의 문자열로 벡터 솔루션을 얻으려면 어떻게해야합니까?
해결책은 빠릅니다. 솔루션의 비교 지금까지
내 데이터에, 제임스 솔루션은 약 4 배 빠른 Sotos보다 '나는 또한
편집 기본 R.의 큰 팬입니다. 하지만 내가 length(text)
1k에서 10k로 단계를 만들 때 그것은 메모리가 부족합니다. Sotos의 솔루션은 여전히 10k에서 실행됩니다.
내 데이터가 length(txt)
~ 1M 및 length(voc)
~ 5k라고 가정 할 때, Sotos의 솔루션은 메모리가 부족하지 않으므로 완료하는 데 18 시간이 걸릴 것으로 예상됩니다.
더 빠른 것은 없나요?
apply(sapply(paste0("\\b",voc,"\\b"), function(x) grepl(x,txt)), 1, function(x) paste(voc[x],collapse=" "))
[1] "peter red" "mary green" "bob blue"
sapply
부분은 당신이 TM 패키지를 사용하는 회원 행렬을 재현 :
사례가 아닌 정규식 접근 방법으로 충분합니까? 예 : 'sapply (strsplit (txt, "", TRUE), function (x) paste (collapse = "", x [x % in % voc])와 같은 것임' –
@alexis_laz 당신이 이긴다! 솔루션은 18 시간 대신 10 분 안에 완료됩니다. 솔루션으로 표시 할 수 있도록 전용 응답을 만드시겠습니까? – hyco