6

26 個のプレーン テキスト ファイルのコーパスがあり、それぞれが 12 ~ 148kb、合計 1.2Mb です。Windows 7 ラップトップで R を使用しています。

通常のクリーンアップ作業 (ストップワード、カスタム ストップワード、小文字、数字) をすべて実行し、語幹補完を行いたいと考えています。例に示すように、元のコーパスを辞書として使用しています。いくつかの単純なベクトルを試して、(約 5 項で) まったく機能することを確認しましたが、非常に迅速に機能しました。

exchanger <- function(x) stemCompletion(x, budget.orig)
budget <- tm_map(budget, exchanger)

昨日の16時から稼働中!診断中の R Studio では、リクエスト ログに異なるリクエスト番号の新しいリクエストが表示されます。タスクマネージャーは、メモリをいくらか使用していることを示していますが、異常な量ではありません。私はそれを止めたくありません。進行状況を確認する方法の他のアイデアはありますか?残念ながら、それは揮発性のコーパスですか? 所要時間についてのアイデアはありますか? dtm 名ベクトルを辞書として使用し、最も頻繁に (または高い tf-idf) で切り捨てることを考えましたが、このプロセスを強制終了することには消極的です。

これは通常の Windows 7 ラップトップで、他の多くのものが実行されています。

このコーパスは、stemCompletion には大きすぎますか? Python に移行する以外に、stemCompletion を実行したり、副幹をレンマライズしたりするより良い方法はありますか? 私の Web 検索では答えが得られませんでした。

4

2 に答える 2

1

問題を再現するデータがなければ明確な答えを出すことはできませんが、ボトルネックはstemCompletionソースコードの次の行にあると思います。

possibleCompletions <- lapply(x, function(w) grep(sprintf("^%s", w), dictionary, value = TRUE))

その後、完了ヒューリスティックをデフォルトの「普及」に維持した場合、次のことが起こります。

possibleCompletions <- lapply(possibleCompletions, function(x) sort(table(x), decreasing = TRUE))
structure(names(sapply(possibleCompletions, "[", 1)), names = x)

その最初の行は、コーパス内の各単語をループし、辞書と照合して補完候補をチェックします。あなたのコーパスには、何度も出てくる単語がたくさんあると思います。これは、同じ応答を返すためだけに関数が何度も呼び出されていることを意味します。おそらくより高速なバージョン (繰り返される単語の数と繰り返される頻度に応じて) は、次のようになります。

y <- unique(x)

possibleCompletions <- lapply(y, function(w) grep(sprintf("^%s", w), dictionary, value = TRUE))

possibleCompletions <- lapply(possibleCompletions, function(x) sort(table(x), decreasing = TRUE))

z <- structure(names(sapply(possibleCompletions, "[", 1)), names = y)

z[match(x, names(z))]

xしたがって、 のすべての値ではなく、 の一意の値のみをループしますx。この改訂版のコードを作成するには、CRAN からソースをダウンロードし、関数を変更する必要があります (R フォルダーの Completion.R で見つけました)。

または、これに Python を使用することもできます。

于 2013-06-08T20:49:35.013 に答える