大きな (n=500,000) ドキュメントのコーパスを分析したい。fromよりも高速になることをquanteda
期待して 使用しています。で自動化された方法を使用する代わりに、段階的に進めたい。これには理由があります。ある場合には、ストップワードを削除する前にトークン化したくありません。これは、多くの役に立たないバイグラムが発生するためです。別の場合には、言語固有の手順でテキストを前処理する必要があります。tm_map()
tm
dfm()
このシーケンスを実装してほしい:
1) 句読点と数字を
削除する 2) ストップワードを削除する (つまり、無駄なトークンを避けるためにトークン化する前に)
3) ユニグラムとバイグラムを使用してトークン化する
4) dfm を作成する
私の試み:
> library(quanteda)
> packageVersion("quanteda")
[1] ‘0.9.8’
> text <- ie2010Corpus$documents$texts
> text.corpus <- quanteda:::corpus(text, docnames=rownames(ie2010Corpus$documents))
> class(text.corpus)
[1] "corpus" "list"
> stopw <- c("a","the", "all", "some")
> TextNoStop <- removeFeatures(text.corpus, features = stopw)
# Error in UseMethod("selectFeatures") :
# no applicable method for 'selectFeatures' applied to an object of class "c('corpus', 'list')"
# This is how I would theoretically continue:
> token <- tokenize(TextNoStop, removePunct=TRUE, removeNumbers=TRUE)
> token2 <- ngrams(token,c(1,2))
おまけの質問
でスパース トークンを削除するにはどうすればよいquanteda
ですか? (つまり、 in に相当removeSparseTerms()
しtm
ます。
更新@Ken
の回答に照らして、次のコードを段階的に進めるコードを次に示しますquanteda
。
library(quanteda)
packageVersion("quanteda")
[1] ‘0.9.8’
1) カスタムの句読点と数字を削除します。たとえば、ie2010 コーパスの「\n」に注意してください。
text.corpus <- ie2010Corpus
texts(text.corpus)[1] # Use texts() to extrapolate text
# 2010_BUDGET_01_Brian_Lenihan_FF
# "When I presented the supplementary budget to this House last April, I said we
# could work our way through this period of severe economic distress. Today, I
# can report that notwithstanding the difficulties of the past eight months, we
# are now on the road to economic recovery.\nIt is
texts(text.corpus)[1] <- gsub("\\s"," ",text.corpus[1]) # remove all spaces (incl \n, \t, \r...)
texts(text.corpus)[1]
2010_BUDGET_01_Brian_Lenihan_FF
# "When I presented the supplementary budget to this House last April, I said we
# could work our way through this period of severe economic distress. Today, I
# can report that notwithstanding the difficulties of the past eight months, we
# are now on the road to economic recovery. It is of e
前処理を好む理由についての追加のメモ。私の現在のコーパスはイタリア語で書かれており、冠詞がアポストロフィで単語に接続されています。したがって、ストレートdfm()
は不正確なトークン化につながる可能性があります。例えば:
broken.tokens <- dfm(corpus(c("L'abile presidente Renzi. Un'abile mossa di Berlusconi"), removePunct=TRUE))
は、同じ単語に対して 2 つの別個のトークン ("un'abile" と "l'abile") を生成するため、gsub()
ここで追加の手順が必要になります。
2)quanteda
トークン化の前に、テキスト内のストップワードを直接削除することはできません。前の例では、誤解を招くバイグラムを生成しないように、「l」と「un」を削除する必要があります。これは で処理できtm
ますtm_map(..., removeWords)
。
3) トークン化
token <- tokenize(text.corpus[1], removePunct=TRUE, removeNumbers=TRUE, ngrams = 1:2)
4) dfm を作成します。
dfm <- dfm(token)
5) まばらな特徴を取り除く
dfm <- trim(dfm, minCount = 5)