2

構造化されていないプレーン テキスト ファイルのコレクションを参照する Ruby スクリプトを作成しようとしていますが、これらのファイルを処理する最善の方法を考えるのに苦労しています。トピック モデリング用のスクリプトの現在の作業バージョンは次のとおりです。

#!/usr/bin/env ruby -w

require 'rubygems'
require 'lda-ruby'

# Input a directory of files
FILES_DIRECTORY = ARGV[0]

File.open("files.csv", "w") do |f|
  Dir.glob(FILES_DIRECTORY + "*.txt") do |filename|
    file_id = File.basename(filename).gsub(".txt", "")
    text = File.read(filename).clean
    f.puts [file_id, text].join(",")
  end
end

# Read csv
file = File.open("files.csv", "r") { |f| f.read }

# Train topics and infer
corpus = Lda::Corpus.new
corpus.add_document(Lda::TextDocument.new(corpus, file))

lda = Lda::Lda.new(corpus)
lda.verbose = false
lda.num_topics = 20
lda.em('random')
topics = lda.top_words(10)

puts topics

私が変更しようとしているのは、このプログラムに、単一のファイルではなくプレーン テキスト ファイルのコレクションを読み取らせることです。files.csv私が理解しているように、lda-ruby は単一のファイルではなく、正しいトピック モデルを実行するために複数のファイルを検索するため、すべてのテキスト ファイルを単一のファイルに放り込むだけでは簡単ではありません。(私がこの結論に達したのは、このスクリプトで、corpus.txtすべてのテキストを含む単一のテキストfiles.csvファイル[たとえば、

それで、私の質問は、lda-ruby でこれらのテキスト ファイルを異なる方法で反復処理するにはどうすればよいかということです。代わりに、ファイルの内容をハッシュに配置する必要がありますか? もしそうなら、どこから始めるべきかについての指針はありますか?または、これを破棄して、別の LDA ライブラリを使用する必要がありますか?

アドバイスをお寄せいただきありがとうございます。

4

2 に答える 2

1

ドキュメントとして使用するテキスト ファイルのディレクトリがある場合は、次の行を使用してコーパスを作成できます。

corpus = Lda::DirectoryCorpus.new('path/to/directory')
于 2014-04-16T01:21:28.617 に答える
1

基本的には、ディレクトリを通過する前にコーパスを初期化し、以前に CSV ファイルを追加したのと同じ方法で各ファイルをブロック内のコーパスに追加するだけです。

#!/usr/bin/env ruby -w

require 'rubygems'
require 'lda-ruby'

# Input a directory of files
FILES_DIRECTORY = ARGV[0]

corpus = Lda::Corpus.new 

File.open("files.csv", "w") do |f|
  Dir.glob(FILES_DIRECTORY + "*.txt") do |filename|
    file = File.open(filename, "r") { |f| f.read }
    corpus.add_document(Lda::TextDocument.new(corpus, file))
  end
end

lda = Lda::Lda.new(corpus)
lda.verbose = false
lda.num_topics = 20
lda.em('random')
topics = lda.top_words(10)

puts topics

これはかなり古い質問であることは知っていますが、同様の問題の解決策を探しているときにこの質問を見つけました。あなたのコードは私を助けてくれたので、私の答えがあなたや他の人に役立つかもしれないと思いました.

于 2012-12-28T15:21:54.327 に答える