def test_detect_speaker2(self): raw = """<div><p class="StandardRB" style="margin-bottom:.70em"><a name="R_41346_10"><b><span style="display:none"><!--†--></span>Abgeordneter </b></a><b><a href="/WWER/PAD_01781/">Dr. Wolfgang Schüssel</a></b> (ÖVP) <i>(zur Geschäftsbehandlung)</i><i><span style="display: none"><!--¦--></span>:</i> Ich meine, in der Sache selber haben wir das, glaube ich, zuerst schon besprochen. Es ist Sache des Präsidiums, zu entscheiden. </p> <p class="StandardRE">Nur, lieber Peter Westenthaler, das Argument halte ich für höchst bedenklich, dass man quasi jetzt einer Vielzahl von Exekutivbeamten unterstellt: Weil sie zu wenig verdienen, sind sie korruptionsgefährdet. <i>(Abg. Ing. <b>Westenthaler:</b> Es ist aber so!)</i> Das weise ich mit aller Entschiedenheit zurück, meine Damen und Herren! <i>(Beifall bei ÖVP, SPÖ und Grünen.)</i></p> <p class="RE" style="margin-bottom:1.20em">16.42</p></div>""" par = Selector(text=raw).xpath('.//p')[0] p = SECTION.get_p(par) speaker = SECTION.detect_speaker(p.plain, p.links) self.assertEqual(speaker['found'], True) self.assertEqual(speaker['id'], 'PAD_01781') self.assertEqual(speaker['role'], 'abg') self.assertTrue(speaker['cleaned'].startswith('Ich meine, in der'))
def test_colon_inside_comment(self): # Here, the colon to delimit speaker part from speech has slipped # inside the comment raw = """<p class="MsoNormal" style="margin-top:.70em;margin-right:0cm;margin-bottom:.70em; margin-left:0cm"><b><span style="display:none"><!--†--></span>Präsidentin <a href="/WWER/PAD_08240/">Dr. Eva Glawischnig-Piesczek</a><span style="display:none"><!--¦--></span></b> <i>(das Glockenzeichen gebend):</i> Ich bitte um ein bisschen mehr Aufmerksamkeit! Danke.</p> <p class="MsoNormal" style="margin-top:.70em;margin-right:0cm;margin-bottom:.70em; margin-left:0cm"><b><span style="display:none"> </span></b></p>""" par = Selector(text=raw).xpath('.//p')[0] p = SECTION.get_p(par) speaker = SECTION.detect_speaker(p.plain, p.links) self.assertEqual(speaker['found'], True) self.assertEqual(speaker['id'], 'PAD_08240') self.assertEqual(speaker['role'], 'pres') self.assertTrue(speaker['cleaned'].startswith('Ich bitte um ein'))
def test_detect_speaker_abgeordneter(self): abg_paragraph = u"""<p class=MsoNormal style='margin-top:.70em;margin-right:0cm;margin-bottom:.70em; margin-left:0cm'><b><span lang=DE style='display:none'><!--†--></span>Abgeordneter <A HREF="/WWER/PAD_12907/index.shtml">Fritz Grillitsch</A></b> (ÖVP)<span style='display:none'><!--¦--></span>: Herr <span lang=DE>Bundesminister, ich bin dir sehr dankbar, dass du aufgrund deiner Produktion in Öster­reich. – Herzlichen Dank dafür. <i>(Abg. <b>Neubauer</b> – in Richtung ÖVP, eine entsprechen­de Handbewegung andeutend –: Klatschen!)</i></span></p> """ par = Selector(text=abg_paragraph).xpath('.//p')[0] p = SECTION.get_p(par) speaker = SECTION.detect_speaker(p.plain, p.links) self.assertEqual(speaker['found'], True) self.assertEqual(speaker['id'], 'PAD_12907') self.assertEqual(speaker['role'], 'abg')
def test_detect_speaker_minister_simple(self): abg_paragraph = u"""<p class=MsoNormal style='margin-top:.70em;margin-right:0cm;margin-bottom:.70em; margin-left:0cm'><b><span lang=DE style='display:none'><!--†--></span>Bundesminister für Land- und Forstwirtschaft, Umwelt und Wasserwirtschaft <A HREF="/WWER/PAD_83296/index.shtml">Ing. Andrä Rupprechter</A></b>: Herr <span lang=DE>Bundesminister, ich bin dir sehr dankbar, dass du aufgrund deiner Produktion in Öster­reich. – Herzlichen Dank dafür. <i>(Abg. <b>Neubauer</b> – in Richtung ÖVP, eine entsprechen­de Handbewegung andeutend –: Klatschen!)</i></span></p> """ par = Selector(text=abg_paragraph).xpath('.//p')[0] p = SECTION.get_p(par) speaker = SECTION.detect_speaker(p.plain, p.links) self.assertEqual(speaker['found'], True) self.assertEqual(speaker['id'], 'PAD_83296') self.assertEqual(speaker['role'], 'min')
def test_detect_speaker_minister(self): # This paragraph has invalid HTML around the speaker link, and # only part of the speaker-name+title is enclosed by the link paragraph = u"""<p class=MsoNormal><b><span lang=DE style='display:none;letter-spacing:-.2pt'><!--†--></span><span style='letter-spacing:-.2pt'>Bundesminister für Land- und Forstwirtschaft, Umwelt und Wasserwirtschaft <A HREF="/WWER/PAD_83296/index.shtml">Dipl.-</span>Ing. Andrä Rupprechter</A><span style='display:none'><!--¦--></span>:</b> Grundsätzlich ist neben dem Heimmarkt der Exportmarkt außerordentlich wichtig für die <span lang=DE>österreichische Landwirtschaft, Lebensmittelwirtschaft, weshalb wir uns gerade auch aufgrund der Russland-Krise letztes Jahr bemüht haben, zusätzliche neue Drittlandmärkte zu finden. Und das ist tatsächlich gelungen: Der agra­rische Außenhandel hat sich im Jahr 2014 trotz der sehr schwierigen Wirtschafts­bedingungen positiv entwickelt, weist immerhin ein Plus von 2,4 Prozent gegenüber 2013 auf, trotz des Wegfalls des so wichtigen Marktes in Russland.</span></p> """ par = Selector(text=paragraph).xpath('.//p')[0] p = SECTION.get_p(par) speaker = SECTION.detect_speaker(p.plain, p.links)
def test_long(self): plain = u"""Bundesminister für Land- und Forstwirtschaft, Umwelt und Wasserwirtschaft [[link5]]: Herr Bundesminister, ich bin dir sehr dankbar, dass du aufgrund deiner Produktion in Österreich. – Herzlichen Dank dafür. [[com4]]""" links = [('[[link5]]', Selector(text=u'<A HREF="/WWER/PAD_83296/index.shtml">Ing. Andrä Rupprechter</A>').xpath('.//a[@href]')[0])] speaker = SECTION.detect_speaker(plain, links) self.assertEqual(speaker['found'], True) self.assertEqual(speaker['id'], 'PAD_83296') self.assertEqual(speaker['role'], 'min') self.assertTrue(speaker['cleaned'].startswith('Herr Bundesminister'))
def test_clean(self): plain = u"""Abgeordneter [[link2]] (ÖVP): Herr Bundesminister, ich bin dir sehr dankbar, dass du aufgrund deiner Produktion in Österreich. – Herzlichen Dank dafür.""" links = [('[[link2]]', Selector(text=u'<A HREF="/WWER/PAD_12907/index.shtml">Fritz Grillitsch</A>').xpath('.//a[@href]')[0])] speaker = SECTION.detect_speaker(plain, links) self.assertEqual(speaker['found'], True) self.assertEqual(speaker['id'], 'PAD_12907') self.assertEqual(speaker['role'], 'abg') self.assertTrue(speaker['cleaned'].startswith('Herr Bundesminister'))
def test_with_linebreak(self): plain = u"""Abgeordneter [[link270]] (STRONACH): Frau Präsidentin! Hohes Haus! Meine sehr geehrten Fernsehzuschauer! Am Anfang möchte ich verstanden? Oder warum sind wir nicht dafür? [[com269]] """ links = [('[[link270]]', Selector(text=u'<A HREF="/WWER/PAD_123456/index.shtml">Test Person</A>').xpath('.//a[@href]')[0])] speaker = SECTION.detect_speaker(plain, links) self.assertEqual(speaker['found'], True) self.assertEqual(speaker['id'], 'PAD_123456') self.assertEqual(speaker['role'], 'abg') self.assertTrue(speaker['cleaned'].startswith(u'Frau Präsidentin!'))
def test_no_party_with_comment(self): plain = u"""Abgeordneter [[link496]][[com494]]: Herr Präsident! Ich nehme das zur Kenntnis. Aber ich hätte mich gefreut, hätten Sie den Herrn Bundesminister genauso zur Räson gerufen, denn das wäre längst fällig gewesen. [[com495]] """ links = [('[[link496]]', Selector(text=u'<A HREF="/WWER/PAD_123456/index.shtml">Test Person</A>').xpath('.//a[@href]')[0])] speaker = SECTION.detect_speaker(plain, links) self.assertEqual(speaker['found'], True) self.assertEqual(speaker['id'], 'PAD_123456') self.assertEqual(speaker['role'], 'abg') self.assertTrue(speaker['cleaned'].startswith(u'Herr'))
def test_long(self): plain = u"""Bundesminister für Land- und Forstwirtschaft, Umwelt und Wasserwirtschaft [[link5]]: Herr Bundesminister, ich bin dir sehr dankbar, dass du aufgrund deiner Produktion in Österreich. – Herzlichen Dank dafür. [[com4]]""" links = [( '[[link5]]', Selector( text= u'<A HREF="/WWER/PAD_83296/index.shtml">Ing. Andrä Rupprechter</A>' ).xpath('.//a[@href]')[0])] speaker = SECTION.detect_speaker(plain, links) self.assertEqual(speaker['found'], True) self.assertEqual(speaker['id'], 'PAD_83296') self.assertEqual(speaker['role'], 'min') self.assertTrue(speaker['cleaned'].startswith('Herr Bundesminister'))
def test_clean(self): plain = u"""Abgeordneter [[link2]] (ÖVP): Herr Bundesminister, ich bin dir sehr dankbar, dass du aufgrund deiner Produktion in Österreich. – Herzlichen Dank dafür.""" links = [( '[[link2]]', Selector( text= u'<A HREF="/WWER/PAD_12907/index.shtml">Fritz Grillitsch</A>' ).xpath('.//a[@href]')[0])] speaker = SECTION.detect_speaker(plain, links) self.assertEqual(speaker['found'], True) self.assertEqual(speaker['id'], 'PAD_12907') self.assertEqual(speaker['role'], 'abg') self.assertTrue(speaker['cleaned'].startswith('Herr Bundesminister'))
def test_with_linebreak(self): plain = u"""Abgeordneter [[link270]] (STRONACH): Frau Präsidentin! Hohes Haus! Meine sehr geehrten Fernsehzuschauer! Am Anfang möchte ich verstanden? Oder warum sind wir nicht dafür? [[com269]] """ links = [ ('[[link270]]', Selector( text= u'<A HREF="/WWER/PAD_123456/index.shtml">Test Person</A>' ).xpath('.//a[@href]')[0]) ] speaker = SECTION.detect_speaker(plain, links) self.assertEqual(speaker['found'], True) self.assertEqual(speaker['id'], 'PAD_123456') self.assertEqual(speaker['role'], 'abg') self.assertTrue(speaker['cleaned'].startswith(u'Frau Präsidentin!'))
def test_no_party_with_comment(self): plain = u"""Abgeordneter [[link496]][[com494]]: Herr Präsident! Ich nehme das zur Kenntnis. Aber ich hätte mich gefreut, hätten Sie den Herrn Bundesminister genauso zur Räson gerufen, denn das wäre längst fällig gewesen. [[com495]] """ links = [ ('[[link496]]', Selector( text= u'<A HREF="/WWER/PAD_123456/index.shtml">Test Person</A>' ).xpath('.//a[@href]')[0]) ] speaker = SECTION.detect_speaker(plain, links) self.assertEqual(speaker['found'], True) self.assertEqual(speaker['id'], 'PAD_123456') self.assertEqual(speaker['role'], 'abg') self.assertTrue(speaker['cleaned'].startswith(u'Herr'))
def test_detect_speaker3(self): raw = """<div class=WordSection40> <p class=RB style='margin-top:1.30em'>10.44<span style='display:none'>.40</span></p> <p class=StandardRB style='margin-bottom:.80em'><a name="R_129460_7"><b><span style='display:none'><!--†--></span>Abgeordneter <A HREF="/WWER/PAD_51579/index.shtml">Ing. Robert Lugar</A></b> (STRONACH)</a><span style='display:none'><!--¦--></span>: Frau Präsidentin! Hohes Haus! Mei­ne sehr geehrten Fernsehzuschauer! Am Anfang möchte ich zunächst eines klarstel­len: Na selbstverständlich wollten wir immer ein Minderheitsrecht verankern! Ich habe seit sechs Jahren im Parlament dafür gekämpft, dass das endlich kommen wird, und heute beraten wir darüber. Es werden das ja auch alle hier einstimmig beschließen – außer uns. Und jetzt geht es darum zu erklären, warum. Sind wir so bockig? Oder ha­ben wir es nicht verstanden? Oder warum sind wir nicht dafür? <i>(Abg. <b>Brosz: </b>Ich glaube eher das Zweitere! – Abg. <b>Schimanek: </b>Beides!)</i></p> </div>""" par = Selector(text=raw).xpath('.//div')[0] section = SECTION.xt(par) # print(section['paragraphs'][0].src.encode('utf-8')) self.assertEquals(section['speaker_id'], 'PAD_51579') self.assertTrue(section['full_text'].startswith(u'Frau Präsidentin!'))
def test_emptyfirst(self): self.assertEquals(SECTION.merge_split_paragraphs(['', 'test']), ['test'])
def test_empty(self): self.assertEquals(SECTION.merge_split_paragraphs([]),[])
def test_merge_remove_hyphen(self): self.assertEquals( SECTION.merge_split_paragraphs(['Test un-', 'tested']), ['Test untested'])
def test_donot_merge_startsuppercase(self): self.assertEquals( SECTION.merge_split_paragraphs(['This is a ', 'Test']), ['This is a ', 'Test'])
def test_merge_starts_lowercase(self): self.assertEquals( SECTION.merge_split_paragraphs(['This is a ', 'test']), ['This is a test'])
def test_empty(self): self.assertEquals(SECTION.merge_split_paragraphs([]), [])