2016-08-13 11 views
1

大きな(n = 500,000)のコーパスを分析したい。私は、will be fasterよりtm_map()より、tmより、quantedaを使用しています。私はdfm()で自動化された方法を使用する代わりに、段階的に進めたいと思っています。私はこれに理由があります:あるケースでは、ストップワードを削除する前にトークン化したくないので、多くの無駄なバイグラムが発生し、別の言語では言語固有の手順でテキストを前処理する必要があります。量子化を使ってdfmをステップバイステップで作成する

私はこのシーケンスに実装されたい:句読点と数字
2を削除)
1)無用のトークンを避けるために、トークン化する前にストップワード(すなわち削除)
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でスパーストークンを削除するにはどうすればよいですか? (。すなわちtmremoveSparseTerms()の同等


UPDATE ケンの答え@の光で、ここ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つの分離されたトークンを生成する(「L'abile」「un'abile」と)、それ故にここでgsub()と追加の工程の必要性。

2)quantedaでは、トークン化前のテキストでストップワードを直接削除することはできません。前の例では、誤解を招くバイグラムを生成しないように、 "l"と "un"を削除する必要があります。これはtmtm_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) 
+0

答えを書き留めるには、 'texts()'関数を使って 'quanteda'で段階的に進めることができます: – 000andy8484

答えて

4

まばらな機能を削除する我々はない "ブラックボックス" としてdfm()を設計したが典型的なユーザーがconvertiのときに適用したいオプションの多くを組み合わせたスイス軍ナイフそれらのテキストをドキュメントとフィーチャのマトリックスに変換します。ただし、これらのオプションはすべて、より細かいレベルの制御を行いたい場合は、下位レベルの処理コマンドでも使用できます。

しかし、quantedaの設計原則の1つは、テキストがトークン化のプロセスを通じて「フィーチャ」になるということです。除外したいトークン化された機能がある場合は、最初にテキストをトークン化するか、除外できません。 Rの他のテキストパッケージ(例えば、tm)とは異なり、これらのステップはコーパスから「下流」に適用されるため、コーパスは未処理のテキストセットのままで操作は適用されますがテキスト)。これの目的は、一般性を保つだけでなく、テキスト分析の再現性と透明性を促進することです。あなたの質問に応えて

は:

  1. ただし、既存のテキストを上書きしますテキストに割り当てられているものtexts(myCorpus) <-機能を使用して、私たちの奨励動作をオーバーライドすることができます。たとえば、stringiコマンドのように、正規表現を使用して句読点や数字を削除したり、句読点と数字のUnicodeクラスを使用してパターンを識別することができます。

  2. ストップワードを削除する前にトークンを作成することをお勧めします。 "単語"を停止するのはトークンなので、テキストをトークン化する前にテキストから削除する方法はありません。 ""の代わりに正規表現を適用する場合でも、正規表現に何らかの形の単語境界を指定する必要があります。これはトークン化です。

  3. がユニグラム及びバイグラムにtokeniseする:

    トークン(myCorpus、ngrams = 1:2)

  4. DFMを作成するには、単にdfm(myTokens)を呼び出します。 (また、この段階では、ngramsのために、ステップ3を適用している可能性が

ボーナス1:n = 2つのコロケーションは、異なるフォーマットを除き、バイグラムと同じリストを生成し、あなたが何かを意図しました(。? SO区切りおそらく質問)

ボーナス2:?。dfm_trim(x, sparsity =)を参照してくださいremoveSparseTerms()オプションはほとんどの人にはかなり混乱しているが、これはTMからの移住者のために含まれ、完全な説明についてはthis postを参照してください

ところで:。。使用の代わりに - すぐにコーパスのオブジェクト構造を書き直すので、抽出機能があるときにこのように内部にアクセスすべきではありません。 (また、このステップは不要である - ここであなたは、単にコーパスを再現しています。)

アップデート2018から01

コーパスオブジェクトの新しい名前がdata_corpus_irishbudget2010で、コロケーション採点機能がtextstat_collocations()です。

+1

ありがとうございます@ケン。私はこの 'texts()'関数を見逃していました。 – 000andy8484

+0

よろしくお願いします!いくつかのバージョンでは、 'texts < - 'は無効になっていましたが、多くの人が置き換え機能が有用であると気付きました。 (うまくいけば、彼らはこれを責任感を持って使用するでしょう!) –

関連する問題