私は R で tm パッケージを使い始めています。私は、社会主義者/共産主義者のプロパガンダのかなり大きなコーパスを作成し、新たに造られた政治用語 (複数の単語、たとえば「闘争 - 批判 - 変革運動」) を抽出したいと考えています。
これは 2 段階の質問です。1 つはこれまでのコードに関するもので、もう 1 つはどのように進めるべきかに関するものです。
ステップ 1:これを行うために、最初にいくつかの一般的な ngram を特定したいと考えました。しかし、私は非常に早い段階で立ち往生しています。これが私がやっていることです:
library(tm)
library(RWeka)
a <-Corpus(DirSource("/mycorpora/1965"), readerControl = list(language="lat")) # that dir is full of txt files
summary(a)
a <- tm_map(a, removeNumbers)
a <- tm_map(a, removePunctuation)
a <- tm_map(a , stripWhitespace)
a <- tm_map(a, tolower)
a <- tm_map(a, removeWords, stopwords("english"))
a <- tm_map(a, stemDocument, language = "english")
# everything works fine so far, so I start playing around with what I have
adtm <-DocumentTermMatrix(a)
adtm <- removeSparseTerms(adtm, 0.75)
inspect(adtm)
findFreqTerms(adtm, lowfreq=10) # find terms with a frequency higher than 10
findAssocs(adtm, "usa",.5) # just looking for some associations
findAssocs(adtm, "china",.5)
# ... and so on, and so forth, all of this works fine
私が R にロードしたコーパスは、私が投げたほとんどの関数で正常に動作します。コーパスから TDM を作成したり、頻出単語や連想を見つけたり、ワード クラウドを作成したりするのに問題はありませんでした。しかし、 tm FAQで概説されているアプローチを使用して識別 ngram を使用しようとすると、tdm-constructor で間違いを犯しているようです。
# Trigram
TrigramTokenizer <- function(x) NGramTokenizer(x,
Weka_control(min = 3, max = 3))
tdm <- TermDocumentMatrix(a, control = list(tokenize = TrigramTokenizer))
inspect(tdm)
次のエラー メッセージが表示されます。
Error in rep(seq_along(x), sapply(tflist, length)) :
invalid 'times' argument
In addition: Warning message:
In is.na(x) : is.na() applied to non-(list or vector) of type 'NULL'
何か案は?「a」は正しいクラス/オブジェクトではありませんか? よくわかりません。ここに根本的な間違いがあると思いますが、私はそれを見ていません。:(
ステップ 2:次に、コーパスを他のコーパスと比較したときに、著しく過剰に表現されている ngram を特定したいと思います。たとえば、コーパスを大規模な標準英語コーパスと比較できます。または、相互に比較できるサブセットを作成します (たとえば、ソビエトと中国共産党の用語)。これを行うにはどうすればよいか、何か提案はありますか? 調べる必要があるスクリプト/関数はありますか? いくつかのアイデアや指針だけでも素晴らしいでしょう。
お待ち頂きまして、ありがとうございます!