/ / Ruby i Mongodb z odwróconym indeksem dają zabawne wyniki - ruby, regex, mongodb, hash

Ruby i Mongodb z odwróconym indeksem wywołują zabawne wyniki - ruby, regex, mongodb, hash

W moim programie tworzę odwrócony indeks, używając danych z kanału Twittera, jednak podczas analizowania i umieszczania ich w mongodb pojawiają się zabawne problemy.

Typowy typ wpisu powinien wyglądać następująco:

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

Jednak podczas analizowania niektórych tweetów trafiają one do bazy danych w następujący sposób:

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

Mam te wiersze, które dzielą tweeta i zwiększają wartości w bazie danych:

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

Próbuję uzyskać normalne słowa (zawierające tylko znaki alfanumeryczne) bez podwójnych spacji, bez powrotu karetki itp.

Odpowiedzi:

1 dla odpowiedzi № 1

Powinieneś dodać t.strip! jak się wydaje, problem może polegać na początkowych / końcowych odstępach.