Ruby & Mongodb с перевернутым индексом дает несколько забавных результатов - PullRequest
2 голосов
/ 09 февраля 2012

Для моей программы я создаю инвертированный индекс, используя данные из ленты Twitter, однако при разборе и помещении их в mongodb возникают странные проблемы.

Обычный тип записи должен быть таким:

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

Тем не менее, при разборе некоторых твитов они заканчиваются следующим образом в БД:

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

У меня есть эти строки, которые разбивают твит и увеличивают значения в БД:

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

Я пытаюсь получить нормальные слова (только с буквенно-цифровыми символами), без двойных пробелов, без возврата каретки и т. Д.

1 Ответ

1 голос
/ 20 апреля 2012

Вы должны добавить t.strip!, так как кажется, что проблема может быть в пробелах в начале / в конце.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...