Skip to content

Instantly share code, notes, and snippets.

@aufi
Forked from rexcze-zz/parser.rb
Last active November 18, 2015 20:01
Show Gist options
  • Save aufi/adca6f96e7e5db9e27a9 to your computer and use it in GitHub Desktop.
Save aufi/adca6f96e7e5db9e27a9 to your computer and use it in GitHub Desktop.
#!/usr/bin/ruby
require 'rubygems'
require 'nokogiri'
#require 'elasticsearch'
class Clanek
@@ciselne = ['skore', 'k_datum']
# zbytek atributu je (pro zkraceni) povazovan za text
def nastav(nazev, hodnota)
if @@ciselne.include?(nazev) # taky jde self.class.ciselne... je to class/tridni/staticka promenna
nastav_cislo(nazev, hodnota)
else
nastav_text(nazev, hodnota)
end
end
private
def nastav_cislo(nazev, hodnota)
instance_variable_set("@#{nazev}", hodnota.to_s.gsub(/[^0-9]/,''))
end
def nastav_text(nazev, hodnota)
instance_variable_set("@#{nazev}", hodnota.to_s.delete(' ').strip)
end
=begin
def k_skore(k_skore)
@k_skore = k_skore.gsub(/[^0-9]/,'')
end
def k_datum(k_datum)
@k_datum = k_datum.gsub(/[^0-9]/,'')
end
def k_nazev(k_nazev)
@k_nazev = k_nazev.delete(' ').strip
end
def k_rubrika(k_rubrika)
@k_rubrika = k_rubrika.delete(' ').strip
end
def k_puvod(k_puvod)
@k_puvod = k_puvod.delete(' ').strip
end
def k_autor(k_autor)
@k_autor = k_autor.delete(' ').strip
end
def k_zdroj(k_zdroj)
@k_zdroj = k_zdroj.delete(' ').strip
end
def autor(autor)
@autor = autor.delete(' ').strip
end
def cislo(cislo)
@cislo = cislo.delete(' ').strip
end
def datum(datum)
@datum = datum.delete(' ').strip
end
def domicil(domicil)
@domicil = domicil.delete(' ').strip
end
def hash(hash)
@hash = hash.delete(' ').strip
end
def identifikace(identifikace)
@identifikace = identifikace.delete(' ').strip
end
def issn(issn)
@issn = issn.delete(' ').strip
end
def jazyk(jazyk)
@jazyk = jazyk.delete(' ').strip
end
def nazev(nazev)
@nazev = nazev.delete(' ').strip
end
def oblast(oblast)
@oblast = oblast.delete(' ').strip
end
def odkaz(odkaz)
@odkaz = odkaz.delete(' ').strip
end
def rubrika(rubrika)
@rubrika = rubrika.delete(' ').strip
end
def shortcut(shortcut)
@shortcut = shortcut.delete(' ').strip
end
def shortcutarea(shortcutarea)
@shortcutarea = shortcutarea.delete(' ').strip
end
def shortcutgroup(shortcutgroup)
@shortcutgroup = shortcutgroup.delete(' ').strip
end
def text(text)
#@text = text.delete(' ').strip
end
def zdroj(zdroj)
@zdroj = zdroj.delete(' ').strip
end
def zpracovano(zpracovano)
@zpracovano = zpracovano.delete(' ').strip
end
=end
def export_to_json
instance_variables.to_json
end
# def ()
# @ =
# end
end
page = Nokogiri::HTML(open("2015-10-22_IT.htm"))
#odstrani vsechny span značky, ale nechá jejich obsah
page.css("span.highlighted").each do |span|
span = span.replace(" #{span.content}")
end
#pole, ve kterem jsou vsechny objekty
clanky = []
chtene_atributy_doc = ['Skóre', 'K_datum', 'K_nazev', 'K_rubrika', 'K_puvod',
'K_autor', 'K_zdroj']
page.css('.documentContentDiv').each do |x|
#objekt, ve kterem je cely clanek
clanek = Clanek.new
#Rozpozna a zpracuje metadata z každého článku
#K_datum, K_nazev, K_rubrika, K_puvod, K_autor, K_zdroj
x.css('.verticalField').each do |y|
vrchniMeta = y.text.split(":",2)
#nazev = "\nK_" + vrchniMeta[0].tr('ó', 'o')
nazev = vrchniMeta[0].gsub("\n", '')
hodnota = vrchniMeta[1]
if chtene_atributy_doc.include?(nazev)
clanek.nastav(nazev.tr('ó', 'o').downcase, hodnota)
else
raise "Neznámý typ!! Vyvolávám chybu\n#{nazev}"
end
=begin
case vrchniMeta[0]
when "\nSkóre"
clanek.k_skore(vrchniMeta[1])
when "\nK_datum"
clanek.k_datum(vrchniMeta[1])
when "\nK_nazev"
clanek.k_nazev(vrchniMeta[1])
when "\nK_rubrika"
clanek.k_rubrika(vrchniMeta[1])
when "\nK_puvod"
clanek.k_puvod(vrchniMeta[1])
when "\nK_autor"
clanek.k_autor(vrchniMeta[1])
when "\nK_zdroj"
clanek.k_zdroj(vrchniMeta[1])
else
p "Neznámý typ!! Vyvolávám chybu"
p vrchniMeta[0]
exit
end
=end
end
#Rozpozna s zpracuje text clanku a take vlozena metadata
#text = obsahuje samotny text clanku
#Rozpoznana metadata: Zdroj, Datum, Název, Číslo, Rubrika, Jazyk, Domicil, Odkaz, Oblast, Zpracováno, Identifikace, Hash, ShortcutGroup, ShortcutArea, Shortcut, Text
x.css('.documentText').each do |c|
data = c.text.split("Text:",2)
#metadata v čánku
c.search("text()").map do |g|
next if g.text == "\n"
break if g.text == "Text: "
spodniMeta = g.text.split(":",2)
chtene_atributy_text = ["Autor", "Číslo", "Datum", "Domicil", "Hash", "Identifikace",
"ISSN", "Jazyk", "Název", "Oblast", "Odkaz", "Rubrika", "Shortcut", "ShortcutArea",
"ShortcutGroup", "Text", "Zdroj", "Zpracováno"]
if chtene_atributy_text.include?(spodniMeta[0])
clanek.nastav(spodniMeta[0].tr('óČá', 'oCa').downcase, spodniMeta[1])
else
raise "Neznámý typ!! Vyvolávám chybu\n#{spodniMeta[0]}"
end
=begin
case spodniMeta[0]
when "Autor"
clanek.autor(spodniMeta[1])
when "Číslo"
clanek.cislo(spodniMeta[1])
when "Datum"
clanek.datum(spodniMeta[1])
when "Domicil"
clanek.domicil(spodniMeta[1])
when "Hash"
clanek.hash(spodniMeta[1])
when "Identifikace"
clanek.identifikace(spodniMeta[1])
when "ISSN"
clanek.issn(spodniMeta[1])
when "Jazyk"
clanek.jazyk(spodniMeta[1])
when "Název"
clanek.nazev(spodniMeta[1])
when "Oblast"
clanek.oblast(spodniMeta[1])
when "Odkaz"
clanek.odkaz(spodniMeta[1])
when "Rubrika"
clanek.rubrika(spodniMeta[1])
when "Shortcut"
clanek.shortcut(spodniMeta[1])
when "ShortcutArea"
clanek.shortcutarea(spodniMeta[1])
when "ShortcutGroup"
clanek.shortcutgroup(spodniMeta[1])
when "Text"
clanek.text(spodniMeta[1])
when "Zdroj"
clanek.zdroj(spodniMeta[1])
when "Zpracováno"
clanek.zpracovano(spodniMeta[1])
else
p "Neznámý typ!! Vyvolávám chybu"
p spodniMeta[0]
exit
end
=end
end
#Samotný text článku
text = data[1].gsub!("\n", " ")
clanek.text(text)
end
clanky << clanek
end
p clanky
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment