4

このサイトの回答から多くのことを学んだので (ありがとう!)、ついに私自身の質問をする時が来ました。

私は R (tm および lsa パッケージ) を使用して、約 15,000 のテキスト ドキュメントのコーパスを作成、クリーンアップ、簡素化し、LSA (潜在意味解析) を実行しています。Mac OS X 10.6 の R 3.0.0 でこれを行っています。

効率性のために (そして RAM が少なすぎることに対処するために)、tm の「PCorpus」(「filehash」パッケージでサポートされるバックエンド データベース サポート) オプション、または新しい「tm.plugin.dc」のいずれかを使用しようとしました。 ' いわゆる「分散型」コーパス処理のオプション)。しかし、ボンネットの下でどちらがどのように機能するかはよくわかりません。

tm_map で DCorpus を使用する明らかなバグ (現在は関係ありません) により、代わりに PCorpus オプションを使用して前処理作業の一部を行うようになりました。しかも何時間もかかります。そこで、R CMD BATCH を使用して、次のようなスクリプトを実行します。

> # load corpus from predefined directory path,
> # and create backend database to support processing:
> bigCcorp = PCorpus(bigCdir, readerControl = list(load=FALSE), dbControl = list(useDb = TRUE, dbName = "bigCdb", dbType = "DB1"))

> # converting to lower case:
> bigCcorp = tm_map(bigCcorp, tolower)

> # removing stopwords:
> stoppedCcorp = tm_map(bigCcorp, removeWords, stoplist)

ここで、この時点の直後にスクリプトがクラッシュしたとします。または、コーパスを別の形式でエクスポートするのを忘れて、R を再起動したとします。データベースはまだ私のハード ドライブにあり、適切に整理されたデータでいっぱいです。コーパス処理を続行するために、最初からやり直すのではなく、新しい R セッションに再読み込みできますか?

それはヌードルの質問のように感じます...しかし、dbInit()またはdbLoad()または「PCorpus()」関数のバリエーションの量は機能していないようです。誰か正しい呪文を知っていますか?

私はすべての関連ドキュメント、および見つけられるすべての紙と Web フォーラムを精査しましたが、完全に空白です - 誰もそれを行っていないようです. それとも私はそれを逃しましたか?

4

1 に答える 1

0

元の質問は 2013 年のものでした。一方、2015 年 2 月には、重複した質問または同様の質問が回答されました。

R tm パッケージで PCorpus に再接続する方法は? . その投稿の答えは不可欠ですが、かなりミニマリストなので、ここで補足してみます.

これらは、同様の問題に取り組んでいるときに発見したコメントです。

このdbInit()関数は tm パッケージの一部ではないことに注意してください。

filehash最初に、パッケージをインストールする必要があります。これは、tmドキュメントがインストールを「推奨」するだけです。これは、 の強い依存関係ではないことを意味しtmます。

おそらく、 の代わりに でfilehashSQLiteパッケージを使用することもできます。オブジェクト指向設計により、これらのパッケージはどちらも同じインターフェイスを持ち、シームレスに連携して動作します。そのため、「filehashSQLite」もインストールします (2016 を編集: tn::content_transformer() などの一部の関数は filehashSQLite には実装されていません)。library("filehashSQLite")library("filehash")

次に、これは機能します:

library(filehashSQLite)
# this string becomes filename, must not contain dots. 
# Example: "mydata.sqlite" is not permitted.
s <- "sqldb_pcorpus_mydata" #replace mydat with something more descriptive 

suppressMessages(library(filehashSQLite))

if(! file.exists(s)){
        # csv is a data frame of 900 documents, 18 cols/features
        pc = PCorpus(DataframeSource(csv), readerControl = list(language = "en"), dbControl = list(dbName = s, dbType = "SQLite"))
        dbCreate(s, "SQLite")
        db <- dbInit(s, "SQLite")
        set.seed(234)
        # add another record, just to show we can.
        # key="test", value = "Hi there"
        dbInsert(db, "test", "hi there")
} else {
        db <- dbInit(s, "SQLite")
        pc <- dbLoad(db)
}



show(pc)
# <<PCorpus>>
# Metadata:  corpus specific: 0, document level (indexed): 0
#Content:  documents: 900
dbFetch(db, "test")
# remove it
rm(db)
rm(pc)

#reload it
db <- dbInit(s, "SQLite")
pc <- dbLoad(db) 

# the corpus entries are now accessible, but not loaded into memory.
# now 900 documents are bound via "Active Bindings", created by makeActiveBinding() from the base package
show(pc)
# [1] "1"    "2"    "3"    "4"    "5"    "6"    "7"    "8"    "9"    
# ...
# [900]
#[883] "883"  "884"  "885"  "886"  "887"  "888"  "889"  "890"  "891"  "892" 
#"893"  "894"  "895"  "896"  "897"  "898"  "899"  "900" 
#[901] "test"

dbFetch(db, "900")
# <<PlainTextDocument>>
#         Metadata:  7
# Content:  chars: 33

dbFetch(db, "test")
#[1] "hi there"

これは、データベースのバックエンドがどのように見えるかです。データ フレームからのドキュメントが何らかの形で sqlite テーブル内にエンコードされていることがわかります。

sqliteのスクリーンショット

これは私のRStudio IDEが私に示しているものです: ここに画像の説明を入力

于 2015-04-09T08:17:57.437 に答える