You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 

192 lines
13 KiB

from unittest import TestCase
import rouge
import utils
def get_file_data(filename):
text_file = open(filename, "r", encoding='utf-8')
data = text_file.read()
text_file.close()
return data
def run_tests_with_data(self, test_data):
for original, generated_one, generated_two, description in test_data:
print(description)
print('original: ' + original)
rouge_one = rouge.rouge_n(original, generated_one, n=1)
rouge_two = rouge.rouge_n(original, generated_two, n=1)
print('Rouge for one: ' + str(rouge_one) + ' ' + generated_one)
print('Rouge for two: ' + str(rouge_two) + ' ' + generated_two)
combined = generated_two + ' ' + generated_one
combined_rouge = rouge.rouge_n(original, combined, n=1)
print('Rouge for combined: ' + str(combined_rouge) + ' ' + combined)
self.assertGreaterEqual(combined_rouge, rouge_one)
self.assertGreaterEqual(combined_rouge, rouge_two)
class RougeTest(TestCase):
def tests_from_paper(self):
s1 = 'police killed the gunman'
s2 = 'police kill the gunman'
s3 = 'the gunman kill police'
score_s2 = rouge.rouge_l(s1, s2)
self.assertEqual(score_s2, 0.75)
score_s3 = rouge.rouge_l(s1, s3)
self.assertEqual(score_s3, 0.5)
reference = 'affe birne club düne essen'
summary = 'affe birne feder geld himmel. affe club insel jagd essen.'
lcs = 4
p = lcs / 12
r = lcs / 5
f = 2*(r*p)/(r+p)
r_p, r_r, r_f = rouge.rouge_l(reference_summary=reference, created_summary=summary, pp_options=[utils.pp_option_stopwords],
extended_results=True)
self.assertEqual(r_r, r)
self.assertEqual(r_p, p)
self.assertEqual(r_f, f)
score_equal = rouge.rouge_l(summary, summary)
self.assertEqual(score_equal, 1)
def test_one(self):
original = 'Für die Frage, ob alle in Art. 6 Abs. 1 der Richtlinie 2011/83/EU genannten Informationen objektiv in einem Werbemittel dargestellt werden können, ist erheblich, welchen Anteil diese Informationen am verfügbaren Raum des vom Unternehmer ausgewählten Werbeträgers einnehmen würden; die Werbebotschaft muss gegenüber den Verbraucherinformationen nicht zurücktreten.'
sent_1 = '(1) Zwar ist für die nach der Vorabentscheidung des Gerichtshofs der Europäischen Union maßgebliche Frage, ob alle in Art. 6 Abs. 1 der Richtlinie 2011/83/EU genannten Informationen objektiv in einem Werbemittel dargestellt werden können, erheblich, welchen Anteil diese Informationen am verfügbaren Raum des vom Unternehmer ausgewählten Werbeträgers einnehmen würden.'
sent_2 = 'Aus der Anforderung, die Informationen objektiv in der Werbebotschaft darstellen zu können, ist zu schließen, dass die Werbebotschaft gegenüber den Verbraucherinformationen nicht zurücktreten muss.'
rouge_v1 = rouge.rouge_n(original, sent_1, 1, pp_options=[utils.pp_option_stopwords])
rouge_v2 = rouge.rouge_n(original, sent_1 + ' ' + sent_2, 1, pp_options=[utils.pp_option_stopwords])
self.assertGreater(rouge_v2, rouge_v1)
def test_one_match(self):
original = 'a b c d e.'
score = rouge.rouge_n(original, 'd.', n=1)
self.assertGreater(score, 0)
def test_extension(self):
original_short = 'a b c d e.'
original_medi = 'a b c d e f g h i j k l m n o.'
original_long = 'a b c d e f g h i j k l m n o p q r s t u v w x y z.'
test_data = [[original_short, 'a b.', 'a b d.', 'small extension short sentence'],
[original_short, 'a.', 'a b c d.', 'large extension short sentence'],
[original_medi, 'a b c d e f g h i.', 'a b c d e f g h i j.', 'small extension medi sentence'],
[original_medi, 'a b c d e f g h i.', 'a b c d e f g h i m n o l.',
'large extension medi sentence'],
[original_long, 'a b c d e f g h i j k l m n o p q r s t u v.',
'a b c d e f g h i j k l m n o p q r s t u v w.', 'small extension long sentence'],
[original_long, 'a b c d e f g h i j k.',
'a b c d e f g h i j k l m n o p q r s t u v w.', 'large extension long sentence'],
]
print('Test extensions')
run_tests_with_data(self, test_data)
def test_differing(self):
original_short = 'a b c d e.'
original_medi = 'a b c d e f g h i j k l m n o.'
original_long = 'a b c d e f g h i j k l m n o p q r s t u v w x y z.'
test_data = [[original_short, 'a b c.', 'a b d.', 'small difference short sentence'],
[original_short, 'a e.', 'a b c.', 'large difference short sentence'],
[original_medi, 'a b c d e f g h i.', 'a b c d e f g h j.', 'small difference medi sentence'],
[original_medi, 'a b c d e f g h i.', 'a b c d j k l m.',
'large difference medi sentence'],
[original_long, 'a b c d e f g h i j k l m n o p q r s t u v.',
'a b c d e f g h i j k l m n o p q r s t u w.', 'small difference long sentence'],
[original_long, 'a b c d e f g h i j k.',
'a b l m n o p q r s t u v.', 'large difference long sentence'],
]
print('Test differences')
run_tests_with_data(self, test_data)
def test_rougel_high_precision_or_recall(self):
gold = 'Boot.'
created = 'Boot. Boot.'
r_p, r_r, r_f = rouge.rouge_l(created_summary=created, reference_summary=gold, extended_results=True,
pp_options=[utils.pp_option_stopwords, utils.pp_option_lemmatize])
self.assertEqual(r_p, 1/2)
self.assertEqual(r_r, 1)
self.assertEqual(r_f, 2/3)
gold = 'Affe Boot. Boot Club.'
created = 'Boot.'
r_p, r_r, r_f = rouge.rouge_l(created_summary=created, reference_summary=gold, extended_results=True,
pp_options=[utils.pp_option_stopwords, utils.pp_option_lemmatize])
self.assertEqual(r_p, 1)
self.assertEqual(r_r, 2/6)
self.assertEqual(r_f, 1/2)
gold = 'Im Rahmen der bei Prüfung der Schutzschranke der Berichterstattung über Tagesereignisse gemäß § 50 ' \
'UrhG vorzunehmenden Grundrechtsabwägung ist im Falle der Veröffentlichung eines bislang ' \
'unveröffentlichten Werks auch das vom Urheberpersönlichkeitsrecht geschützte Interesse an einer ' \
'Geheimhaltung des Werks zu berücksichtigen. Dieses schützt das urheberrechtsspezifische Interesse des ' \
'Urhebers, darüber zu bestimmen, ob er mit der erstmaligen Veröffentlichung den Schritt von der ' \
'Privatsphäre in die Öffentlichkeit tut und sich und sein Werk damit der öffentlichen Kenntnisnahme ' \
'und Kritik aussetzt. Nicht zu berücksichtigen ist bei dieser Abwägung dagegen das Interesse an der ' \
'Geheimhaltung von Umständen, deren Offenlegung Nachteile für die Interessen des Staates und seiner ' \
'Einrichtungen haben könnten. Dieses Interesse ist nicht durch das Urheberpersönlichkeitsrecht, ' \
'sondern durch andere Vorschriften - etwa das Sicherheitsüberprüfungsgesetz, § 3 Nr. 1 Buchst. b IFG ' \
'und die strafrechtlichen Bestimmungen gegen Landesverrat und die Gefährdung der äußeren Sicherheit ' \
'gemäß §§ 93 ff. StGB - geschützt. '
created = 'Dieses Interesse ist vielmehr durch die allgemeinen Vorschriften - etwa das ' \
'Sicherheitsüberprüfungsgesetz, § 3 Nr. 1 Buchst. b IFG und die strafrechtlichen Bestimmungen gegen ' \
'Landesverrat und die Gefährdung der äußeren Sicherheit gemäß §§ 93 ff. '
r_p, r_r, r_f = rouge.rouge_l(created_summary=created, reference_summary=gold, extended_results=True,
pp_options=[utils.pp_option_stopwords, utils.pp_option_lemmatize])
self.assertLessEqual(r_p, 1)
gold = 'Der Eigentümer eines Grundstücks ist hinsichtlich der von einem darauf befindlichen Baum (hier: ' \
'Birken) ausgehenden natürlichen Immissionen auf benachbarte Grundstücke Störer i.S.d. § 1004 Abs. 1 ' \
'BGB, wenn er sein Grundstück nicht ordnungsgemäß bewirtschaftet. Hieran fehlt es in aller Regel, ' \
'wenn die für die Anpflanzung bestehenden landesrechtlichen Abstandsregelungen eingehalten sind. 1b. ' \
'Ein Anspruch auf Beseitigung des Baums lässt sich in diesem Fall regelmäßig auch nicht aus dem ' \
'nachbarlichen Gemeinschaftsverhältnis herleiten. Hält der Grundstückseigentümer die für die ' \
'Anpflanzung bestehenden landesrechtlichen Abstandsregelungen ein, hat der Eigentümer des ' \
'Nachbargrundstücks wegen der Beeinträchtigungen durch die von den Anpflanzungen ausgehenden ' \
'natürlichen Immissionen weder einen Ausgleichsanspruch gemäß § 906 Abs. 2 Satz 2 BGB in unmittelbarer ' \
'Anwendung noch einen nachbarrechtlichen Ausgleichsanspruch gemäß § 906 Abs. 2 Satz 2 analog (' \
'Abgrenzung zu Senat, Urteil vom 27. Oktober 2017 - V ZR 8/17, ZfIR 2018, 190). '
created = "Für die Entscheidung des Meinungsstreits ist von dem oben dargelegten Grundsatz auszugehen, " \
"dass der Eigentümer eines Grundstücks hinsichtlich der von einem darauf befindlichen Baum " \
"ausgehenden natürlichen Immissionen auf benachbarte Grundstücke Störer i.S.d. § 1004 Abs. 1 BGB " \
"ist, wenn er sein Grundstück nicht ordnungsgemäß bewirtschaftet. Hält der Grundstückseigentümer " \
"die für die Anpflanzung bestehenden landes-rechtlichen Abstandsregelungen ein, hat der Eigentümer " \
"des Nachbargrund-stücks wegen der Beeinträchtigungen durch die von den Anpflanzungen ausgehenden " \
"natürlichen Immissionen weder einen Ausgleichsanspruch gemäß § 906 Abs. 2 Satz 2 BGB in " \
"unmittelbarer Anwendung noch einen nachbarrechtlichen Ausgleichsanspruch gemäß § 906 Abs. 2 Satz 2 " \
"analog. Sind die für die Anpflanzung bestehenden landesrechtlichen Abstandsregelungen eingehalten, " \
"lässt sich ein Anspruch auf Beseitigung der Bäume in aller Regel - und so auch hier - nicht aus " \
"dem nachbarlichen Gemeinschaftsverhältnis herleiten. Gemäß § 907 Abs. 2 BGB gehören aber Bäume und " \
"Sträucher nicht zu den Anlagen i.S.d. § 907 Abs. 1 BGB. Ob den Grundstückseigentümer für " \
"natürliche Immissionen eine „Sicherungspflicht“ trifft und er damit Störer i.S.d. § 1004 Abs. 1 " \
"BGB ist, ist jeweils anhand der Umstände des Einzelfalls zu prüfen. Rechtsfehlerhaft ist jedoch " \
"die Auffassung des Berufungsgerichts, der Beklagte sei als Störer i.S.d. § 1004 Abs. 1 BGB für die " \
"von den Birken ausgehenden Immissionen auf das Grundstück des Klägers verantwortlich. In diesem " \
"Fall ist er regelmäßig schon nicht Störer, so dass es bereits an einem Beseitigungsanspruch gemäß " \
"§ 1004 Abs. 1 BGB fehlt und der von dem Berufungsgericht beschriebene Konflikt zwischen den Regeln " \
"des Bürgerlichen Gesetzbuchs und den landesrechtlichen Vorschriften nicht besteht. Voraussetzung " \
"hierfür ist jedoch, dass der in Anspruch genommene Grundstückseigentümer für die " \
"Eigentumsbeeinträchtigung verantwortlich und damit Störer i.S.d. § 1004 Abs. 1 BGB ist. "
r_p, r_r, r_f = rouge.rouge_l(created_summary=created, reference_summary=gold, extended_results=True,
pp_options=[utils.pp_option_stopwords, utils.pp_option_lemmatize])
self.assertLessEqual(r_p, 1)
self.assertLessEqual(r_r, 1)
def test_specific(self):
gold = 'Diese Voraussetzungen hat der XII. Zivilsenat für den vorliegenden Fall bejaht.'
created = 'Dies ist insbesondere der Fall, wenn die Sanktion außer Verhältnis zum Gewicht des Vertragsverstoßes und den Folgen für den Schuldner der Vertragsstrafe steht.'
created_2 = 'Deren Untergrenze ist mit 30 € angegeben.'
r_p, r_r, r_f = rouge.rouge_l(created_summary=created, reference_summary=gold, extended_results=True,
pp_options=[utils.pp_option_stopwords, utils.pp_option_lemmatize])
r_p_2, r_r_2, r_f_2 = rouge.rouge_l(created_summary=created_2, reference_summary=gold, extended_results=True,
pp_options=[utils.pp_option_stopwords, utils.pp_option_lemmatize])
r_p_c, r_r_c, r_f_c = rouge.rouge_l(created_summary=created+ ' '+created_2, reference_summary=gold, extended_results=True,
pp_options=[utils.pp_option_stopwords, utils.pp_option_lemmatize])
self.assertGreater(r_f, r_f_2)
self.assertGreater(r_f_c, r_f)