Added Code and data
This commit is contained in:
@@ -0,0 +1,192 @@
|
||||
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)
|
||||
|
||||
Reference in New Issue
Block a user