Skip to content

Instantly share code, notes, and snippets.

@lavilet
Created May 11, 2014 15:38
Show Gist options
  • Save lavilet/f894ce241bbeb65a42c3 to your computer and use it in GitHub Desktop.
Save lavilet/f894ce241bbeb65a42c3 to your computer and use it in GitHub Desktop.
Ruby port of super-simple text summarization tool, written in python. Based on https://gist.github.com/shlomibabluki/5473521
class Summarizer
attr_accessor :title, :text
attr_reader :word_hash
def extract_sentences(content)
tr = content.gsub("\n", ". ")
return tr.split(". ")
end
def split_content_to_paragraphs(content)
return content.split(/\n\n/)
end
def sentence_intersection(sentence1, sentence2)
s1 = sentence1.split
s2 = sentence2.split
if (s1.length + s2.length) == 0
return 0
end
return ((s1 & s2).length.to_f / ((s1.length + s2.length) / 2).to_f)
end
def get_sentences_rank(content)
sentences = extract_sentences(content)
n = sentences.length
h = Hash.new(0)
for i in 0...n
for j in 0...n
h[[i,j]] = sentence_intersection(sentences[i], sentences[j])
end
end
sentences_dic = Hash.new
for i in 0...n
score = 0
for j in 0...n
if i == j
next
end
score += h[[i,j]]
end
sentences_dic[sentences[i]] = score
end
return sentences_dic
end
def get_best_sentence(content, sentences_dic)
sentences = extract_sentences(content)
if sentences.length < 2
return ""
end
best_sentence = ""
max_value = 0
sentences.each do |sentence|
if sentences_dic[sentence] > max_value
max_value = sentences_dic[sentence]
best_sentence = sentence
end
end
return best_sentence
end
def get_summary(title, content, sentences_dic)
paragraphs = split_content_to_paragraphs(content)
summary = []
summary << title
summary << ""
i = 0
paragraphs.each do |paragraph|
sentence = get_best_sentence(paragraph, sentences_dic)
if sentence
summary << sentence
end
i+=1
end
return summary.join("\n")
end
end
str = "Kanclerz Niemiec Angela Merkel poprosiła prezydenta Rosji Władimira Putina o pomoc w uwolnieniu członków misji obserwacyjnej OBWE, przetrzymywanych przez prorosyjskich separatystów na wschodzie Ukrainy - poinformował Kreml.
Podczas rozmowy telefonicznej 'pani Merkel zwróciła się z prośbą (do Putina - red.), by przyczynił się do uwolnienia obserwatorów wojskowych, przetrzymywanych na południowym wschodzie Ukrainy, którzy są obywatelami krajów europejskich, w tym Niemiec' - głosi komunikat Kremla.
Rozmowa odbyła się z inicjatywy Merkel. Putin mówił o konieczności wycofania wojsk ukraińskich z południowego wschodu Ukrainy, zakończenia przemocy i rozpoczęcia dialogu narodowego w całym kraju. Ukraińskie władze prowadzą na wschodzie kraju operację terrorystyczną przeciwko separatystom.
Wcześniej minister spraw zagranicznych Rosji Siergiej Ławrow wezwał władze w Kijowie i prorosyjskich separatystów na południowym wschodzie Ukrainy do rozmów, które miałyby się odbyć pod egidą OBWE.
17 kwietnia w Genewie szefowie dyplomacji Rosji, Ukrainy, USA i UE zawarli porozumienie w celu złagodzenia napięć na Ukrainie. Od tego czasu nie odnotowano jednak żadnych postępów.
Prorosyjscy separatyści, których władze Ukrainy określają mianem terrorystów, przygotowują się do referendum niepodległościowego, które chcą przeprowadzić 11 maja. W tym celu zajmują siedziby ważnych instytucji rządowych w obwodach donieckim i ługańskim, na których wywieszają rosyjskie flagi.
Od piątku w okupowanym mieście Słowiańsk separatyści przetrzymują sześciu obserwatorów OBWE. Rosja została poproszona o zaangażowanie się na rzecz ich uwolnienia, twierdzi jednak, że nie jest w stanie wpływać na działania porywaczy.
Separatyści nie ukrywają, że chcą przyłączenia wschodnich regionów do Rosji. Ukraińskie władze prowadzą przeciwko nim operację terrorystyczną, jednak ze względu na poparcie okazywane buntownikom przez miejscową ludność cywilną, nie decydują się na siłowe rozwiązanie tego problemu. Wywołuje to niezadowolenie zwolenników jedności Ukrainy, którzy nawołują rządzących do większej aktywności w walce z przeciwnikami niepodzielności państwa.
"
summy = Summarizer.new
title = "Kanclerz niemiec rozmawia z Rosja o gazie dla Ukrainy."
sent_dic = summly.get_sentences_rank(str)
summary = summly.get_summary(ttl, str, sent_dic)
puts summary
puts "------------"
puts "Statystyki: "
puts "Dlugosc oryginalu: #{str.length}"
puts "Dlugosc streszczona: #{summary.length}"
k = (100 - (100 * (summary.length.to_f)/(ttl.length.to_f + str.length.to_f)))
puts "Proporcja: #{k}"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment