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