2013-05-22 9 views
1

나는 1944.txt, 1978.txt라는 이름으로 39 개의 텍스트 파일로 구성된 코퍼스를 가지고 있습니다. 2013.txt.R : 문서 기간의 문서에서 '사기'와 관련된 상위 10 개 용어 찾기 R

저는이를 R에 가져오고 TM 패키지를 사용하여 문서 용어 매트릭스를 만들었습니다. 용어 'fraud'와 관련된 단어가 1945 년에서 2013 년까지 어떻게 변했는지 조사하려고합니다. 원하는 출력 결과는 행 제목으로 년을 포함하고 열이 상위 10 또는 5 단어 인 39x105 행렬입니다. .

도움을 주시면 감사하겠습니다.

미리 감사드립니다. 내 TDM의

구조는 :

> str(ytdm) 
List of 6 
$ i  : int [1:6791] 5 7 8 17 32 41 42 55 58 71 ... 
$ j  : int [1:6791] 1 1 1 1 1 1 1 1 1 1 ... 
$ v  : num [1:6791] 2 4 2 2 2 8 4 3 2 2 ... 
$ nrow : int 193 
$ ncol : int 39 
$ dimnames:List of 2 
    ..$ Terms: chr [1:193] "abus" "access" "account" "accur" ... 
    ..$ Docs : chr [1:39] "1947" "1976" "1977" "1978" ... 
- attr(*, "class")= chr [1:2] "TermDocumentMatrix" "simple_triplet_matrix" 
- attr(*, "Weighting")= chr [1:2] "term frequency" "tf" 

My ideal output is like this: 


1947 account accur gao medicine fed ...... 
1948 access ............. 
. 
. 
. 
. 
. 
. 

답변

3

는 귀하의 예를 복제하지만 findAssocs()는 당신이 찾고있는 무엇을 아마 할 수 없습니다. 당신은 연 단위로 동료들만보고 싶기 때문에 매년 dtm이 필요합니다.

> library(tm) 
> data(crude) 
> # i don't have your data so pretend this is corpus of docs for each year 
> names(crude) <- rep(c("1999","2000"),10) 
> # create a dtm for each year 
> dtm.list <- lapply(unique(names(crude)),function(x) TermDocumentMatrix(crude[names(crude)==x])) 
> # get associations for each year 
> assoc.list <- lapply(dtm.list,findAssocs,term="oil",corlimit=0.7) 
> names(assoc.list) <- unique(names(crude)) 
> assoc.list 
$`1999` 
prices barrel. 
    0.79 0.70 

$`2000` 
    15.8  opec  and  said prices,  sell  the analysts clearly  fixed 
    0.94  0.94  0.92  0.92  0.91  0.91  0.88  0.85  0.85  0.85 
    late meeting  never  that trying  who winter emergency  above  but 
    0.85  0.85  0.85  0.85  0.85  0.85  0.85  0.84  0.83  0.83 
    world  they  mln market agreement before  bpd buyers energy prices 
    0.82  0.80  0.79  0.78  0.75  0.75  0.75  0.75  0.75  0.75 
     set through  under  will  not  its 
    0.75  0.75  0.75  0.74  0.72  0.70 

> # or if you want the 5 top terms 
> assoc.list <- lapply(dtm.list,function(x) names(findAssocs(x,"oil",0)[1:5])) 
> names(assoc.list) <- unique(names(crude)) 
> assoc.list 
$`1999` 
[1] "prices" "barrel." "said." "minister" "arabian" 

$`2000` 
[1] "15.8" "opec" "and"  "said" "prices," 
+0

안녕 데이빗, 나는 그것이 특정 용어와 관련된 용어를 반환 findAssocs을 사용했지만, 내 경우에는, 나는 따라서 매트릭스를 만드는 생각, 그 관련 단어가 시간이 지남에 따라 변경하는 방법을 찾을 필요 연도/상위 n 관련 용어, 동일한 묘사. 언제든지 제안 해주십시오. – koder

+0

나는, 내가 오해 한 것을 본다. 나는 당신이 약간의 차이가 필요할 것이기 때문에 당신이 매년 여러 문서를 가지고 있지 않다면 dtm과 같은 bag-of-words 접근법을 사용하여 가능할 지 확신하지 못합니다. 그렇게하지 않으면 문서를 이산 할 수 있습니다. 예를 들어 10 년 단위로 문서를 그룹화 한 다음 dtm을 작성하고 각각에 대해 findAssocs를 실행하십시오. – David

+0

사실, 나는 매년 여러 문서를 가지고 있습니다. 나는 문서 용어 행렬을 만들고 시도 할 수 있도록 텍스트를 concaenated했습니다. – koder