66678


洋書のプログラムなんですが、

[code]

    meta(nb_all[[1]])
    Error in UseMethod("meta", x) : 
      no applicable method for 'meta' applied to an object of class "character"
    
[/code]

というエラーが出てしまいます。個人的に原因は二つのコーパスオブジェクトを結合できていないからと考えています。どうすれば`meta(nb_all[[1]])`が動くようになりますか？  
以下プログラムです。

[code]

    #映画レビューの感情分析
    path_to_neg_folder <- "aclImdb/train/neg"
    path_to_pos_folder <- "aclImdb/train/pos"
    library("tm")
    nb_pos <- Corpus(DirSource(path_to_pos_folder),
                       readerControl = list(language = "en"))
    nb_neg <- Corpus(DirSource(path_to_neg_folder),
                       readerControl = list(language = "en"))
    nb_all <- c(nb_pos, nb_neg, recursive = T)
    #エラー
    meta(nb_all[[1]])
    Error in UseMethod("meta", x) : 
      no applicable method for 'meta' applied to an object of class "character"
    
[/code]

データは二つのファイルに分かれています。データは映画の感想が書かれています。  
`meta(nb_all[[1]])`も以下のようになってほしいです。

[code]

    meta(nb_pos[[1]])
      author       : character(0)
      datetimestamp: 2020-05-16 08:55:32
      description  : character(0)
      heading      : character(0)
      id           : 0_9.txt
      language     : en
      origin       : character(0)
    
[/code]

`str(nb_all)`を実行すると

[code]

    > str(nb_all)
     Named chr [1:25002] "Bromwell High is a cartoon comedy. It ran at the same time as some other programs about school life, such as \""| __truncated__ ...
     - attr(*, "names")= chr [1:25002] "content.0_9.txt" "content.1_7.txt" "content.10_9.txt" "content.100_7.txt" ...
    
[/code]

`str(nb_pos)`を実行すると（長いので最後だけ）

[code]

     $ 10085_10.txt:List of 2
      ..$ content: chr "I just saw this movie today with my children (son, 10 and daughter, 4.5) at the 3rd Annual Roger Ebert Overlook"| __truncated__
      ..$ meta   :List of 7
      .. ..$ author       : chr(0) 
      .. ..$ datetimestamp: POSIXlt[1:1], format: "2020-05-16 09:03:08"
      .. ..$ description  : chr(0) 
      .. ..$ heading      : chr(0) 
      .. ..$ id           : chr "10085_10.txt"
      .. ..$ language     : chr "en"
      .. ..$ origin       : chr(0) 
      .. ..- attr(*, "class")= chr "TextDocumentMeta"
      ..- attr(*, "class")= chr [1:2] "PlainTextDocument" "TextDocument"
      [list output truncated]
     - attr(*, "class")= chr [1:2] "SimpleCorpus" "Corpus"
    
[/code]

というふうになります。  
`nb_pos`と`nb_all`で出てくる結果が違うので  
うまく二つのコーパスをマージできていないと考えています。  
どうすれば`meta(nb_all[[1]])`が動くようになりますか？


CC BY-SA 4.0
2020-05-16T09:11:55.367
66668
2020-05-16T17:52:58.150
2020-05-16T12:01:56.823
34824
34824
question
r
meta（）関数を使用して、corpus でメタデータを確認できません。(映画レビューの感情分析)


`nb_pos` は `SimpleCorpus` クラスのインスタンスなのですが、

[code]

    > class(nb_pos)
    [1] "SimpleCorpus" "Corpus"      
    
[/code]

S3 generic function である `c` で結合(combine)するとリストになります。

[code]

    > class(c(nb_pos, nb_neg))
    [1] "list"
    
    > names(c(nb_pos, nb_neg))
    [1] "content" "meta"    "dmeta"   "content" "meta"    "dmeta"
    
[/code]

nb_pos と nb_neg は同じキー("content", "meta", "dmeta")を持っているのですが、`c`
での単純結合ではキー毎に結合してくれません。これは SimpleCorpus クラスで `tm_combine`(S3 generic
function)が実装されていないからなので、以下の様にします。

[code]

    > nb_all <- mapply(c, c(nb_pos), c(nb_neg))
    > class(nb_all) <- class(nb_pos)
    
[/code]

`nb_pos` と `nb_reg` をリストに変換してキー毎に要素を結合します。そして、`nb_all` のクラスを `SimpleCorpus`
に設定します。


CC BY-SA 4.0
2020-05-16T15:14:01.867
66678
2020-05-16T17:52:58.150
2020-05-16T17:52:58.150
66668
answer