2017-12-23 26 views
1

R :문헌 기간 매트릭스는 예를 들어 I 문서 기간 매트릭스 DTM을

dtm 
    <<DocumentTermMatrix (documents: 50, terms: 50)>> 
    Non-/sparse entries: 220/2497 
    Sparsity   : 100% 
    Maximal term length: 7 
    Weighting   : term frequency (tf) 

이제 I는 행렬들의리스트에 전송하려는 각 문서를 나타낸다. 그래서, 한 번에, 각 행을

[[1]] 
     [,1] [,2] [,3] [,4] 
    [1,] 23 33 42 117 
    [2,] 2 1 3  1 

    [[2]] 
     [,1] [,2] [,3] [,4] 
    [1,] 2 19 93 168 
    [2,] 2 2 1  1 

내가 DTM에서 모든 비 - 제로 항목을 찾는 생각하고와 행렬로를 생성 :이 패키지 STM의 형식적 요건을 충족하는 것입니다

mat = matrix() 
    dtm.to.mat = function(x){ 
     mat[1,] = x[x != 0] 
     mat[2,] = colnames(x[x != 0]) 
     return(mat) 
    } 
    matrix = list(apply(dtm, 1, dtm.to.mat)) 

그러나

 x[x != 0] 

은 작동하지 않습니다. 오류 메시지 :

$ operator is invalid for atomic vectors 

나는 이것이 왜 그런지 궁금합니다. 사전에 x를 행렬로 변경하면이 오류가 표시되지 않습니다. 그러나, 나는 실제로 약 2,500,000 라인의 dtm을 가지고있다. 나는 이것이 매우 비효율적 일 것을 두려워한다.

답변

1

나 다시!

데이터가 특히 이상하지 않은 한 stm 패키지의 입력으로 dtm을 사용하지 않습니다. 함수 stm::textProcessor을 사용하십시오. 임의 길이의 문자 벡터에서 원본 (처리되지 않은) 텍스트로 문서를 지정할 수 있습니다.

당신이 당신의 공변량 당신의 원시 텍스트와 df$meta입니다 df$documents라는 열이있는 dataframe df가 있다고 가정 :

processed <- textProcessor(df$documents, metadata = df$meta, lowercase = TRUE, 
    removestopwords = TRUE, removenumbers = TRUE, removepunctuation = TRUE, 
    stem = TRUE, wordLengths = c(3, Inf)) 

stm_50 <- stm(documents = processed$documents, vocab = processed$vocab, 
    K = 50, prevalence = ~ meta, init.type = "Spectral", seed = 57468) 

이 50 항목을 실행 당신이 원하는대로 당신은 또한 메타 데이터를 지정할 수 있습니다 STM.

textProcessor은 빈 문서와 관련 메타 데이터를 처리합니다.

편집 :stm::textProcessor는 기술적으로 tm 패키지 단지 래퍼입니다. 그러나 관련 공변량을 다루는 동안 문제 문서를 제거하도록 설계되었습니다.

또한 공변량이 여러 개인 경우 메타 데이터 인수에 데이터 프레임을 사용할 수 있습니다. 이 경우 두 번째 방정식에서 유행 인자를 수정해야합니다.

+0

안녕하세요, Jamie! 고맙습니다. 내가 dtm 입력을 사용한 이유는 내가 중국어 텍스트를 다루고 있기 때문입니다. textProcessor의 처리 된 $ vocab은 나에게 오직 garbles만을 주었다. 함수에서 인코딩 매개 변수가 보이지 않지만 "language ="매개 변수도 작동하지 않습니다. – user7453767

1

너는 stm에 좋은 변환기가 있기 때문에 나는이 quanteda 포장에 전환 할 것입니다 같이 까다로운 무언가가있는 경우에. tm을 붙이고 싶다면 stm::convertCorpus을 사용하여 개체를 목록 구조로 변경하려면 stm 필요하십니까?