class Resumr
Public Class Methods
new(file)
click to toggle source
# File lib/resumr.rb, line 4 def self.new(file) reader = PDF::Reader.new(file) info = reader.info pages = reader.pages text = pages.map{|x| x.text}.reduce{|x,y| x << y}.gsub(/Page \w of \w/,"") right, left = "", "" text.each_line do |line| if line.length <= 40 || line.include?("Top Skills") || line.include?("Contact") left += line.strip + "\n" else left += line.slice(0,40).strip + "\n" right += line.slice(40,line.length).strip + "\n" end end linkedin_url_start_index = left.index("www.linkedin.com") linkedin_url_end_index = left.index("(LinkedIn)") resume = { source: info[:Author], time: Time.new(info[:CreationDate].gsub(/D:/,"")), text: text, left: left, right: right, pdf_reader: reader, sections: subsection_title_list(left).merge!(subsection_title_list(right,true)), linkedin_url: left[linkedin_url_start_index..linkedin_url_end_index-1].gsub("\n","").strip } name = resume[:sections][:beginning].lines[1].split("\n").first resume.merge!({name: name}) return resume end
subsection_title_list(str, with_first_block_sepparate = false)
click to toggle source
# File lib/resumr.rb, line 41 def self.subsection_title_list(str, with_first_block_sepparate = false) possible_titles = [ ["Top Skills", "Principais competências"], ["Certifications"], ["Contact", "Contato", "Contatar"], ["Experience","Experiência"], ["Education", "Formação Acadêmica"], ["Summary","Resumo"], ["Languages"], ["Publications"] ] indexes = {} possible_titles.each do |tit| new_keyvalue = {} title = tit[0] index = nil tit.each do |synonym| index = str.index(synonym) if index.nil? end if ! index.nil? new_keyvalue.store( index, title.gsub(" ","_").downcase.to_sym ) indexes.merge!(new_keyvalue) end end retorn = {} sorted_indexes = indexes.keys.sort if with_first_block_sepparate first_block_index = sorted_indexes[0] retorn.merge!( {beginning: str[0..(first_block_index-1)] } ) end sorted_indexes.each.with_index do |current_block_index, k| new_keyvalue = {} next_block_index = 0 if k == (sorted_indexes.length - 1) next_block_index = str.length else next_block_index = sorted_indexes[k+1] end new_keyvalue.store( indexes[current_block_index], str[current_block_index..next_block_index].lines[1..-1].join ) retorn.merge!(new_keyvalue) end return retorn end