2013-06-07 3 views
6

일반 텍스트 파일 26 개, 즉 12 - 148kb, 총 1.2Mb의 코퍼스가 있습니다. Windows 7 랩톱에서 R을 사용하고 있습니다.tm에서 stemCompletion의 최대 크기는 어느 정도입니까?

나는 모든 정상적인 정리 작업 (정지 단어, 사용자 정의 중지 단어, 소문자, 숫자)을 수행하고 스템 완료를 원합니다. 예제에 표시된대로 원래의 코퍼스를 사전으로 사용하고 있습니다. 나는 그것이 (거의 5 용어로) 전혀 작동 할 것이라는 것을 확인하기 위해 몇 가지 간단한 벡터를 시도했다. 그리고 그것은 매우 빠르게 수행되었다.

exchanger <- function(x) stemCompletion(x, budget.orig) 
budget <- tm_map(budget, exchanger) 

어제부터 오후 4시에 작동했습니다. 진단하에있는 R Studio에서 요청 로그는 요청 번호가 다른 새 요청을 표시합니다. 작업 관리자는 메모리를 사용하여 표시하지만 미친 양은 표시하지 않습니다. 나는 거의 멈추고 싶지 않다. 진행 상황을 확인하는 방법에 대한 다른 아이디어 - 불행히도 휘발성 코퍼스입니까? 얼마나 오래 걸릴지에 대한 아이디어? dtm 이름 벡터를 사전으로 사용하여 가장 빈번하게 (또는 높은 tf-idf) 잘라내려고 생각했지만이 프로세스를 중지하기를 꺼립니다.

이것은 다른 많은 것들이 실행되는 일반적인 Windows 7 노트북입니다.

이 코퍼스는 stemCompletion에 비해 너무 큽니까? Python으로 옮겨가는 것보다 짧은, stemCompletion을 수행하거나 vice stem을 lemmatize 할 수있는 더 좋은 방법이있다. 웹 검색은 아무런 답을 얻지 못했다.

답변

1

내가 당신에게 당신의 문제를 재현 데이터가없는 명확한 답을 줄 수 없다,하지만 난 병목 현상이 stemCompletion 소스 코드에서 folllowing 라인에서 오는 거라 생각 : '당신이 주어

possibleCompletions <- lapply(x, function(w) grep(sprintf("^%s", w), dictionary, value = TRUE)) 

, 그 후 "유행"의 기본에 완료 휴리스틱을 유지했습니다,이 문제가 발생합니다 : 첫 번째 줄은 모음에 가능한 완성을 위해 사전에 대한 검사를 각 단어를 순환

possibleCompletions <- lapply(possibleCompletions, function(x) sort(table(x), decreasing = TRUE)) 
structure(names(sapply(possibleCompletions, "[", 1)), names = x) 

있다. 나는 당신의 코퍼스에 여러 번 나타나는 많은 단어를 가지고 있다고 생각합니다. 즉, 함수가 여러 번 호출되어 동일한 응답을 제공한다는 의미입니다. 다음과 같이 보일 것 (많은 단어를 반복했다 얼마나 자주 반복 된 방법에 따라)의 가능성이 더 빠른 버전 :

y <- unique(x) 

possibleCompletions <- lapply(y, function(w) grep(sprintf("^%s", w), dictionary, value = TRUE)) 

possibleCompletions <- lapply(possibleCompletions, function(x) sort(table(x), decreasing = TRUE)) 

z <- structure(names(sapply(possibleCompletions, "[", 1)), names = y) 

z[match(x, names(z))] 

그래서 그것은 단지 x의 고유 한 값보다는 x의 모든 값을 반복합니다. 이 수정 된 버전의 코드를 작성하려면 CRAN에서 소스를 다운로드하고 기능을 수정해야합니다 (R 폴더의 completion.R에서 찾았 음).

아니면 그냥 파이썬을 사용하고 싶을 수도 있습니다.

+0

이 답장을 보내 주셔서 감사합니다. 소스를 망친 것에 익숙하지 않지만 ... RStudio의 스크립트 창에서이 명령을 스크립트에 넣을 수 있습니까? 나는 근본적으로 소스를 편집하고 저장하는 것과 같은 전체 소스를 넣는 경우에만 추측합니까? – ChristinaP

+0

당신 말이 맞습니다. 원본에서 전체 기능을 별도의 스크립트로 복사 한 다음 편집하십시오. 사용할 때마다 패키지를로드 한 다음 사용자 정의 함수를로드하여 패키지에서로드 한 내용을 대체하십시오. – SchaunW

0

숀 (Schaun) 다음의 크리스티나 (Cristina)는 귀하가 줄기 적용 신청서에 유일한 단어를 사용하기를 권장합니다. 내 말은, 당신의 고유 한 말로 당신의 PC가 완성된다는 것입니다. 당신의 모든 코퍼스에서 (모든 반복을 통해) 완성을 완료하십시오.

  1. 먼저 귀하의 코퍼스에서 고유 한 단어를 가져옵니다.독특한 (예산)

  2. 그들을, 당신이 < unique_budget.orig 고유의 텍스트

    에서 독특한 단어를 얻을 수 있습니다 - - 독특한 (budget.orig를)

  3. 독특한 $ 텍스트 < : exemplo의 경우 예산 %> % stemCompletion (사전 = unique_ - 이제

  4. , 당신은 당신의 unieque 단어

    독특한 $의 completition <의 stemcomplection을 적용 할 수 있습니다 budget.orig)

  5. 이제 코퍼스의 모든 단어와 완료를 가진 개체가 있습니다. 당신은 단지 당신의 코퍼스와 유일한 객체 사이에 조인을 적용해야합니다. 두 객체가 완성되지 않은 단어에 대해 동일한 변수 이름을 가지는지 확인하십시오.이 gonne이 키입니다.

이렇게하면 PC의 작업 횟수가 줄어 듭니다.

관련 문제