Created
May 11, 2014 15:38
-
-
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
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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