非常に大きなコーパスサンプルを扱うときにメモリスペースを節約するために、私は上位10個の1グラムを取り出し、それらを2から5グラムすべてと組み合わせて自然言語処理[nlp]予測に使用される私の単一のquanteda :: dfmSparseオブジェクトです。すべての1グラムを運ぶことは無意味です。なぜなら、私が使っているシンプルなバックオフモデルでは、トップ10(または20)しか使用されないからです。quanteda dfmに参加するすべてのdfm 2から5グラムで
私はquanteda :: dfm(corpusText、。。)パラメータを見つけることができませんでした。これは、先頭の##機能のみを返すように指示しています。だからパッケージの作者@KenBからのコメントに基づいて、私はdfm_select/remove関数を使ってトップ10の1グラムを抽出し、 "quanteda dfm join"検索結果に基づいて "concatenate dfm matrices in 'quanteda' package"にヒットしましたrbind.dfmSparseを使用していますか? ??それらの結果を結合する機能。
これまでのところすべてがわかるようになりました。私はこのゲームプランをSOコミュニティからやり直して、この結果に到着するためのより効率的なルートやこれまでに到着した解決策のいくつかの欠陥を見落としているかどうかを確認することを考えました。
corpusObject <- quanteda::corpus(paste("some corpus text of no consequence that in practice is going to be very large\n",
"and so one might expect a very large number of ngrams but for nlp purposes only care about top ten\n",
"adding some corpus text word repeats to ensure 1gram top ten selection approaches are working\n"))
corpusObject$documents
dfm1gramsSorted <- dfm_sort(dfm(corpusObject, tolower = T, stem = F, ngrams = 1))
dfm2to5grams <- quanteda::dfm(corpusObject, tolower = T, stem = F, ngrams = 2:5)
dfm1gramsSorted; dfm2to5grams
#featnames(dfm1gramsSorted); featnames(dfm2to5grams)
#colSums(dfm1gramsSorted); colSums(dfm2to5grams)
dfm1gramsSortedLen <- length(featnames(dfm1gramsSorted))
# option1 - select top 10 features from dfm1gramsSorted
dfmTopTen1grams <- dfm_select(dfm1gramsSorted, pattern = featnames(dfm1gramsSorted)[1:10])
dfmTopTen1grams; featnames(dfmTopTen1grams)
# option2 - drop all but top 10 features from dfm1gramsSorted
dfmTopTen1grams <- dfm_remove(dfm1gramsSorted, pattern = featnames(dfm1gramsSorted)[11:dfm1gramsSortedLen])
dfmTopTen1grams; featnames(dfmTopTen1grams)
dfmTopTen1gramsAndAll2to5grams <- rbind(dfmTopTen1grams, dfm2to5grams)
dfmTopTen1gramsAndAll2to5grams;
#featnames(dfmTopTen1gramsAndAll2to5grams); colSums(dfmTopTen1gramsAndAll2to5grams)
data.table(ngram = featnames(dfmTopTen1gramsAndAll2to5grams)[1:50], frequency = colSums(dfmTopTen1gramsAndAll2to5grams)[1:50],
keep.rownames = F, stringsAsFactors = F)
/EOQ
ありがとう:v0.99では、私たちは役に立つかもしれませんdata.frameの周波数の「長い」/「整頓」形式を生成し、新しい機能
textstat_frequency()
を追加しました。 textstat_frequency()$ランク列は、同じフィーチャ長、すなわち1/2/3/n-gramsサイズ、同じ頻度のnグラムの場合には、何か興味深いことをしていますか? – myusrn私はランダムだと思う - それは 'data.table :: setorder()'を使う。 –