2012-02-09 3 views
2

私のプログラムでは、Twitterフィードのデータを使用して逆インデックスを作成していますが、解析してmongodbに入れると面白い問題が発生します。彼らはデシベルで、このように終わるツイートの一部を解析するときしかし、逆インデックスのRubyとMongodbは面白い結果をもたらします

{"ax"=>1, "easyjet"=>1, "from"=>2} 

、::

エントリの通常のタイプは、このようにする必要があり

{""=>{""=>{""=>{""=>{""=>{"giants"=>{"dhem"=>1, "giants"=>1, "giantss"=>1}}}} 

私はこれらの行を持っていますつぶやきを分割してdbの値をインクリメントする:

def pull_hash_tags(tweet, lang) 
    hash_tags = tweet.split.find_all { |word| /^#.+/.match word } 
    t = tweet.gsub(/https?:\/\/[\S]+/,"") # removing urls 
    t = t.gsub(/#\w+/,"") # removing hash tags 
    t = t.gsub(/[^0-9a-z ]/i, '') # removing non-alphanumerics and keeping spaces 
    t = t.gsub(/\r/," ") 
    t = t.gsub(/\n/," ") 
    hash_tags.each { |tag| add_to_hash(lang, tag, t) } 
end 

def add_to_hash(lang, tag, t) 
    t.gsub(/\W+/, ' ').split.each { |word| @db.collection.update({"_id" => lang}, {"$inc" => {"#{tag}.#{word}" => 1}}, { :upsert => true }) } 
end 

私は通常の単語を取得しようとしています(英数字のみ)二重スペースはなく、キャリッジリターンはありません。

+0

私は接続して、データベースに入れているものを正確に観察するときに、ロガーを追加することをお勧めします。おそらくあなたのコードに問題があります。 –

+0

約50GBのデータを処理する場合、これは正確に決定するのが難しいでしょう。 – Domness

+1

その場合、ロガーは使用しないでください。これらの異常な文書を探すコードをpull_hash_tagsメソッドに追加してください。 –

答えて

1

t.strip!は、空白文字の前後に問題があるように見えます。

関連する問題