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
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)
|
|
|