私は大規模な 100 万のドキュメント コーパスを扱っており、そこからドキュメント頻度マトリックスを作成するときにいくつかの変換を適用しました。
library(quanteda)
corpus_dfm <- dfm(tokens(corpus1M), # where corpus1M is already a corpus via quanteda::corpus()
remove = stopwords("english"),
#what = "word", #experimented if adding this made a difference
remove_punct = T,
remove_numbers = T,
remove_symbols = T,
ngrams = 1:2,
dictionary = lut_dict,
stem = TRUE)
次に、結果の機能を確認します。
dimnames(corpus_dfm)$features
[1] "abandon"
[2] "abandoned auto"
[3] "abandoned vehicl"
...
[8] "accident hit and run"
...
[60] "assault no weapon aggravated injuri"
これらの特徴が 1:2 バイグラムよりも長いのはなぜですか? ステミングは成功しているように見えますが、トークンは単語ではなく文のようです。
コードをこれに調整しようとしdfm(tokens(corpus1M, what = "word")
ましたが、変更はありませんでした。
再現可能な小さな例を作成しようとしました:
library(tidyverse) # just for the pipe here
example_text <- c("the quick brown fox",
"I like carrots",
"the there that etc cats dogs") %>% corpus
次に、上記と同じ dfm を適用すると:
> dimnames(corpus_dfm)$features
[1] "etc."
ほとんどすべての単語が削除されたので、これは驚くべきことでした? ストップワードも前と違うから、もっとドキドキ!また、試みたにもかかわらず、再現可能な例を作成することもできません。この関数の仕組みを誤解しているのかもしれません。
1:2 の単語トークンしかなく、ストップワードが削除されている quanteda で dfm を作成するにはどうすればよいですか?