From e47e902824a88aeb91983ec17dbb0fa1fed5f629 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Philip=20R=C3=B6ggla?= Date: Fri, 17 Jul 2020 11:39:14 +0200 Subject: [PATCH] art des inhalts --- test/dataextractors/test_multiple.py | 22 +++++++++++++--- test/dataextractors/test_simple.py | 26 +++++++++++-------- .../dataextractors/combinedsubfields.py | 17 ++++++++++++ .../dataextractors/dataextractors/simple.py | 4 ++- 4 files changed, 53 insertions(+), 16 deletions(-) diff --git a/test/dataextractors/test_multiple.py b/test/dataextractors/test_multiple.py index 7e18e13..6a1ee96 100644 --- a/test/dataextractors/test_multiple.py +++ b/test/dataextractors/test_multiple.py @@ -8,7 +8,7 @@ from travelogues_extraction.getrecords.acnumber_extractor import extract_ac_from from travelogues_extraction.dataextractors.dataextractors.combinedsubfields import VerfasserGND, ReihentitelBandzählung, \ HaupttitelTitelzusatzVerantwortlichkeitsangabe, BandzählungTitelDesBandes, VerlagsOrtNormiertGND, DruckOrtNormiertGND, \ VerlegerNormiertGNDID, DruckerGNDID, WeitereVerfasserGNDID, HerausgeberGNDID, ÜbersetzerGNDID, BeiträgerGNDID, \ - WeitereBeteiligteGNDID, IllustratorenGNDID, WidmenderGNDID + WeitereBeteiligteGNDID, IllustratorenGNDID, WidmenderGNDID, WidmungsempfängerGNDID from travelogues_extraction.dataextractors.dataextractors.index import IndexSetter @@ -30,7 +30,7 @@ async def test_multiple_classes(): IndexSetter.column, VerfasserGND.column, ReihentitelBandzählung.column, HaupttitelTitelzusatzVerantwortlichkeitsangabe.column, BandzählungTitelDesBandes.column, VerlagsOrtNormiertGND.column, DruckOrtNormiertGND, DruckerGNDID.column, HerausgeberGNDID.column, - ÜbersetzerGNDID.column, IllustratorenGNDID.column, WidmenderGNDID.column + ÜbersetzerGNDID.column, IllustratorenGNDID.column, WidmenderGNDID.column, WidmungsempfängerGNDID.column ]) index_setter = IndexSetter(target_dataframe) verfasser = VerfasserGND(target_dataframe) @@ -45,6 +45,7 @@ async def test_multiple_classes(): übersetzerGNDID = ÜbersetzerGNDID(target_dataframe) illustratorenGNDID = IllustratorenGNDID(target_dataframe) widmenderGNDID = WidmenderGNDID(target_dataframe) + widmungsempfängerGNDID = WidmungsempfängerGNDID(target_dataframe) index = 0 stop = 7 @@ -85,6 +86,7 @@ async def test_multiple_classes(): await übersetzerGNDID.write(record) await illustratorenGNDID.write(record) await widmenderGNDID.write(record) + await widmungsempfängerGNDID.write(record) assert target_dataframe.shape[0] == index + 1 if record.ac_number == 'AC09682453': @@ -230,11 +232,23 @@ async def test_multiple_classes(): assert widmenderGNDID_list.__len__() == 1 assert widmenderGNDID_list[0].__len__() == 2 assert widmenderGNDID_list[0][0][0].isalpha() - assert widmenderGNDID_list[0][1].startswith('http://d-nb.info/gnd/' - ) + assert widmenderGNDID_list[0][1].startswith('http://d-nb.info/gnd/') elif index == 1: assert widmenderGNDID_val.__repr__() == 'nan' + widmungsempfängerGNDID_val: typing.Union[str, float] = target_dataframe.at[record.ac_number, widmungsempfängerGNDID.column] + if index == 1: + assert widmenderGNDID_val.__repr__() == 'nan' + elif index == 0: + widmungsempfängerGNDID_list = [ + w.split(widmungsempfängerGNDID.join_string_secondary_level) + for w in widmungsempfängerGNDID_val.split(widmungsempfängerGNDID.join_string_primary_level) + ] + assert len(widmungsempfängerGNDID_list[0]) == 2 + assert widmungsempfängerGNDID_list[0][0][0].isalpha() + assert widmungsempfängerGNDID_list[0][1].startswith('http://d-nb.info/gnd/') + + index += 1 if index == stop: break diff --git a/test/dataextractors/test_simple.py b/test/dataextractors/test_simple.py index 7cc9be9..8a4d47e 100644 --- a/test/dataextractors/test_simple.py +++ b/test/dataextractors/test_simple.py @@ -9,7 +9,7 @@ from travelogues_extraction.getrecords.session import RecordRetriever from travelogues_extraction.getrecords.acnumber_extractor import extract_ac_from_series from travelogues_extraction.dataextractors.dataextractors.simple import VolltextAndBarcode, Ausgabe, Verlagsort, \ VerlegerDrucker, Erscheinungsjahr, ErscheinungsjahrSortierform, Kollation, Illustrationen, Format, Anmerkungen, \ - Sprache, OriginalSprache, BemerkungenZurSprache, Standardnummer + Sprache, OriginalSprache, BemerkungenZurSprache, Standardnummer, ArtDesInhalts from travelogues_extraction.dataextractors.dataextractors.index import IndexSetter @@ -25,7 +25,8 @@ async def test_volltext_and_barcode_and_ausgabe_and_verlagsort_and_verleger_druc target_dataframe = pd.DataFrame([], columns= [IndexSetter.column, ] + VolltextAndBarcode.get_columns_names_I_work_on() + [Ausgabe.column, Verlagsort.column, VerlegerDrucker.column, Erscheinungsjahr.column, ErscheinungsjahrSortierform.column, ] + Illustrationen.get_columns_names_I_work_on() \ - + [Format.column, ] + Anmerkungen.get_columns_names_I_work_on() + [Sprache.column, OriginalSprache.column, BemerkungenZurSprache.column] + + [Format.column, ] + Anmerkungen.get_columns_names_I_work_on() + [Sprache.column, OriginalSprache.column, + BemerkungenZurSprache.column, ArtDesInhalts.column] ) index_setter = IndexSetter(target_dataframe) volltext_and_barcode = VolltextAndBarcode(target_dataframe) @@ -41,6 +42,7 @@ async def test_volltext_and_barcode_and_ausgabe_and_verlagsort_and_verleger_druc sprache = Sprache(target_dataframe) originalsprache = OriginalSprache(target_dataframe) bemerkungenZurSprache = BemerkungenZurSprache(target_dataframe) + artDesInhalts = ArtDesInhalts(target_dataframe) index = 0 stop = 3 @@ -103,6 +105,7 @@ async def test_volltext_and_barcode_and_ausgabe_and_verlagsort_and_verleger_druc await sprache.write(record) await originalsprache.write(record) await bemerkungenZurSprache.write(record) + await artDesInhalts.write(record) assert target_dataframe.shape[0] == index + 1 assert target_dataframe.iat[index, 1].__class__ is str @@ -118,13 +121,10 @@ async def test_volltext_and_barcode_and_ausgabe_and_verlagsort_and_verleger_druc assert ausgabe_val.__class__ is float assert ausgabe_val.__repr__() == 'nan' - try: - assert target_dataframe['Barcode'].str.contains(barcode_regex).sum() == index + 1 - assert target_dataframe['Volltext'].str.startswith('http').sum() == index + 1 - except AssertionError as e: - print(record.ac_number) - print(target_dataframe.T) - assert False + + assert target_dataframe['Barcode'].str.contains(barcode_regex).sum() == index + 1 + assert target_dataframe['Volltext'].str.startswith('http').sum() == index + 1 + systemnummer = target_dataframe.iat[index, 0] volltext = target_dataframe.at[systemnummer, 'Volltext'] @@ -184,8 +184,6 @@ async def test_volltext_and_barcode_and_ausgabe_and_verlagsort_and_verleger_druc originalsprache_val: typing.Union[str, float] = target_dataframe.at[record.ac_number, originalsprache.column] - print(index, record.ac_number, originalsprache_val) - if index < 2: assert originalsprache_val == 'eng' else: @@ -197,6 +195,12 @@ async def test_volltext_and_barcode_and_ausgabe_and_verlagsort_and_verleger_druc else: assert originalsprache_val.__repr__() == 'nan' + artDesInhalts_val: typing.Union[str, float] = target_dataframe.at[record.ac_number, artDesInhalts.column] + if index == 1: + assert artDesInhalts_val == 'Reisebericht' + elif index == 2: + assert artDesInhalts_val.__repr__() == 'nan' + index += 1 if index == stop: break diff --git a/travelogues_extraction/dataextractors/dataextractors/combinedsubfields.py b/travelogues_extraction/dataextractors/dataextractors/combinedsubfields.py index 35e42c9..bc6a323 100644 --- a/travelogues_extraction/dataextractors/dataextractors/combinedsubfields.py +++ b/travelogues_extraction/dataextractors/dataextractors/combinedsubfields.py @@ -169,4 +169,21 @@ class WidmenderGNDID(AbstractMultifield): 'and' 'marc:subfield[@code="4" and text()="dto"]' ']' + ), namespaces=namespaces) + + +class WidmungsempfängerGNDID(AbstractMultifield): + column = 'Widmungsempfänger ; GND-ID' + xpath_isgnd_tuples = ( + VerlagsOrtNormiertGND.xpath_isgnd_tuples[0], + AbstractMultifield.XpathIsGnd(xpath=lxmletree.XPath('./marc:subfield[@code="c" and parent[@tag="700" and @ind1="0" and @ind2=" "]]', namespaces=namespaces), isgnd=False), + VerlagsOrtNormiertGND.xpath_isgnd_tuples[1], + ) + primary_xml_path = lxmletree.XPath( + ( + './ marc:datafield[' + '((@tag="700" and @ind1="1") or (@tag="700" and @ind1="0" and @ind2=" ") or (@tag="710" and @ind1="2"))' + 'and' + 'marc:subfield[@code="4" and text()="dte"]' + ']' ), namespaces=namespaces) \ No newline at end of file diff --git a/travelogues_extraction/dataextractors/dataextractors/simple.py b/travelogues_extraction/dataextractors/dataextractors/simple.py index 18b8937..31993c1 100644 --- a/travelogues_extraction/dataextractors/dataextractors/simple.py +++ b/travelogues_extraction/dataextractors/dataextractors/simple.py @@ -178,7 +178,9 @@ class Standardnummer(AbstractXpathJoinDirectlyToColumn): xpath = lxmletree.XPath('./marc:datafield[@tag="024" and @ind1="7" and @ind2=" "]/marc:subfield[@code="a"]', namespaces=namespaces) - +class ArtDesInhalts(AbstractXpathJoinDirectlyToColumn): + column = 'Art des Inhalts' + xpath = lxmletree.XPath('./marc:datafield[@tag="655" and @ind1=" " and @ind2="7"]/marc:subfield[@code="a"]', namespaces=namespaces) -- GitLab