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 № 1Powinieneś dodać t.strip!
jak się wydaje, problem może polegać na początkowych / końcowych odstępach.