Changeset 14:0e0f06219896


Ignore:
Timestamp:
05.02.2010 19:16:43 (8 years ago)
Author:
hagenbruch@phoibe.ub.rub.de
Branch:
default
Message:

First version of organization RDF

Files:
1 added
4 edited

Legend:

Unmodified
Added
Removed
  • .hgignore

    r0 r14  
    3535mods-xml/* 
    3636PYSMELL* 
     37UB_Kostenstellenexport.csv 
  • feeder.py

    r0 r14  
    88""" 
    99 
    10 from mods2solr import Collection 
    11 from solr_util import commit, optimize 
     10#from mods2solr import Collection 
     11from mods_parser import Collection 
     12#from solr_util import commit, optimize 
    1213 
    1314COL_INFO = { 
    14         'Biologie und Biotechnologie': { 
     15        'biologie': { 
    1516                'filename': 'biologie-biotechnologie.xml', 
    1617                'institution': 'Fakultaet', 
     
    1819                'disziplin': 'Naturwissenschaft', 
    1920        }, 
    20         'Chemie und Biochemie': { 
     21        'chemie': { 
    2122                'filename': 'chemie-biochemie.xml', 
    2223                'institution': 'Fakultaet', 
     
    2425                'disziplin': 'Naturwissenschaft', 
    2526        }, 
    26         'Geowissenschaften': { 
     27        'geowissenschaften': { 
    2728                'filename': 'geowissenschaften.xml', 
    2829                'institution': 'Fakultaet', 
     
    3031                'disziplin': 'Naturwissenschaft', 
    3132        }, 
    32         'Archäologie': { 
     33        'archaeologie': { 
    3334                'filename': 'geschichte/archaeologie.xml', 
    3435                'institution': 'Fakultaet', 
    3536                'inst_label': 'Geschichtswissenschaft', 
     37                'label': 'Archäologie', 
    3638                'disziplin': 'Geisteswissenschaft', 
    3739        }, 
    38         'Musikwissenschaft': { 
     40        'musik': { 
    3941                'filename': 'geschichte/musikwissenschaft.xml', 
    4042                'institution': 'Fakultaet', 
    4143                'inst_label': 'Geschichtswissenschaft', 
     44                'label': 'Musikwissenschaft', 
    4245                'disziplin': 'Geisteswissenschaft', 
    4346        }, 
    44         'Geschichte': { 
     47        'geschichte': { 
    4548                'filename': 'geschichte/geschichte.xml', 
    4649                'institution': 'Fakultaet', 
    4750                'inst_label': 'Geschichtswissenschaft', 
     51                'label': 'Geschichte', 
    4852                'disziplin': 'Geisteswissenschaft', 
    4953        }, 
    50         'Jura': { 
     54        'jura': { 
    5155                'filename': 'jura.xml', 
    5256                'institution': 'Fakultaet', 
     
    5458                'disziplin': 'Geisteswissenschaft', 
    5559        }, 
    56         'Maschinenbau': { 
     60        'maschinenbau': { 
    5761                'filename': 'maschinenbau.xml', 
    5862                'institution': 'Fakultaet', 
     
    6064                'disziplin': 'Ingenieurwissenschaft', 
    6165        }, 
    62         'Medizin': { 
     66        'medizin': { 
    6367                'filename': 'medizin.xml', 
    6468                'institution': 'Fakultaet', 
     
    6670                'disziplin': 'Medizin', 
    6771        }, 
    68         'Anglistik': { 
     72        'anglistik': { 
    6973                'filename': 'philologie/anglistik.xml', 
    7074                'institution': 'Fakultaet', 
    7175                'inst_label': 'Philologie', 
     76                'label': 'Anglistik', 
    7277                'disziplin': 'Geisteswissenschaft', 
    7378        }, 
    74         'Germanistik': { 
     79        'germanistik': { 
    7580                'filename': 'philologie/germanistik.xml', 
    7681                'institution': 'Fakultaet', 
    7782                'inst_label': 'Philologie', 
     83                'label': 'Germanistik', 
    7884                'disziplin': 'Geisteswissenschaft', 
    7985        }, 
    80         'Linguistik und Computerlinguistik': { 
     86        'linguistik': { 
    8187                'filename': 'philologie/sprachwissenschaft.xml', 
    8288                'institution': 'Fakultaet', 
    8389                'inst_label': 'Philologie', 
     90                'label': 'Linguistik und Computerlinguistik', 
    8491                'disziplin': 'Geisteswissenschaft', 
    8592        }, 
    86         'Romanistik': { 
     93        'romanistik': { 
    8794                'filename': 'philologie/romanistik.xml', 
    8895                'institution': 'Fakultaet', 
    8996                'inst_label': 'Philologie', 
     97                'label': 'Romanistik', 
    9098                'disziplin': 'Geisteswissenschaft', 
    9199        }, 
    92         'Philosophie': { 
     100        'philosophie': { 
    93101                'filename': 'philosoph-erzwiss/philosophie.xml', 
    94102                'institution': 'Fakultaet', 
    95103                'inst_label': 'Philosophie und Erziehungswissenschaft', 
     104                'label': 'Philosophie', 
    96105                'disziplin': 'Geisteswissenschaft', 
    97106        }, 
    98         'Physik und Astronomie': { 
     107        'Physik': { 
    99108                'filename': 'physik-astronomie.xml', 
    100109                'institution': 'Fakultaet', 
    101110                'inst_label': 'Physik und Astronomie', 
     111                'label': 'Physik und Astronomie', 
    102112                'disziplin': 'Naturwissenschaft', 
    103113        }, 
    104         'Psychologie': { 
     114        'psychologie': { 
    105115                'filename': 'psychologie.xml', 
    106116                'institution': 'Fakultaet', 
     
    108118                'disziplin': 'Geisteswissenschaft', 
    109119        }, 
    110         'Sozialwissenschaft': { 
     120        'sozialwissenschaft': { 
    111121                'filename': 'sozialwissenschaften.xml', 
    112122                'institution': 'Fakultaet', 
     
    114124                'disziplin': 'Geisteswissenschaft', 
    115125        }, 
    116         'Wirtschaftswissenschaften': { 
     126        'wirtschaftswissenschaften': { 
    117127                'filename': 'wirtschaftswissenschaften.xml', 
    118128                'institution': 'Fakultaet', 
     
    120130                'disziplin': 'Geisteswissenschaft', 
    121131        }, 
    122         'Lehrerbildung': { 
     132        'lehrerbildung': { 
    123133                'filename': 'zentrale-einrichtungen/lehrerbildung.xml', 
    124134                'institution': 'Zentrale wissenschaftliche Einrichtungen', 
     
    126136                'disziplin': 'Geisteswissenschaft', 
    127137        }, 
    128         'Neuroinformatik': { 
     138        'neuroinformatik': { 
    129139                'filename': 'zentrale-einrichtungen/neuroinformatik.xml', 
    130140                'institution': 'Zentrale wissenschaftliche Einrichtungen', 
     
    132142                'disziplin': 'Naturwissenschaft', 
    133143        }, 
    134         'Research Department Neuroscience': { 
     144        'neuroscience': { 
    135145                'filename': 'zentrale-einrichtungen/r-d-neuroscience.xml', 
    136146                'institution': 'Zentrale wissenschaftliche Einrichtungen', 
     
    138148                'disziplin': 'Naturwissenschaft', 
    139149        }, 
    140         'Elektrotechnik und Informationstechnik': { 
     150        'etechnik': { 
    141151                'filename': 'elektrotechnik-informationstechnik.xml', 
    142152                'institution': 'Fakultaet', 
     
    144154                'disziplin': 'Ingenieurwissenschaft', 
    145155        }, 
    146         'Bau- und Umweltingenieurwissenschaften': { 
     156        'bauwiss': { 
    147157                'filename': 'bau-umwelt.xml', 
    148158                'institution': 'Fakultaet', 
     
    161171 
    162172        # Alle Kollektionen indexieren 
    163         for fach in COL_INFO: 
    164                 print fach#.encode('utf8') 
    165                 col = Collection('mods-xml/' + COL_INFO[fach]['filename'], fach, COL_INFO[fach]['disziplin'], institution = COL_INFO[fach]['institution'], inst_label = COL_INFO[fach]['inst_label']) 
    166                 col.feed() 
    167                 commit() 
    168                 optimize() 
     173#       for fach in COL_INFO: 
     174#               print fach#.encode('utf8') 
     175#               col = Collection('mods-xml/' + COL_INFO[fach]['filename'], fach, COL_INFO[fach]['disziplin'], institution = COL_INFO[fach]['institution'], inst_label = COL_INFO[fach]['inst_label']) 
     176#               col.feed() 
     177#               commit() 
     178#               optimize() 
    169179         
    170          # Eine Kollektion konvertieren 
    171          # test = Collection('mods-xml/' + 'wirtschaftswissenschaften.xml', 'Wirtschaftswissenschaften', institution = 'Fakultaet', inst_label = 'Wirtschaftswissenschaften', debug = True) 
    172          # test.convert() 
     180          #Eine Kollektion konvertieren 
     181          test = Collection('mods-xml/' + 'philosoph-erzwiss/philosophie.xml', 'Philosophie', institution = 'Fakultaet', inst_label = 'Philosophie', debug = True) 
     182          test.convert() 
    173183 
    174184        # Eine Kollektion indexieren 
  • mods_parser.py

    r12 r14  
    2424#  THE SOFTWARE. 
    2525 
    26 __author__="Andre Hagenbruch <andre.hagenbruch@ruhr-uni-bochum.de>" 
    27 __date__ ="$21.01.2010 18:24:20$" 
     26__author__ = "Andre Hagenbruch <andre.hagenbruch@ruhr-uni-bochum.de>" 
     27__date__ = "$21.01.2010 18:24:20$" 
    2828 
     29from MARCCodes import MARCRelators 
     30from MARCCodes import languageCodes 
     31from bibtex_util import umlaut 
     32from cgi import escape 
     33import datetime 
     34from dc_util import * 
     35from dcds_util import * 
     36from genre_maps import * 
     37from google_book_util import google_book 
     38from jcr import * 
     39from lxml import etree 
    2940from lxml import objectify 
    30 from lxml import etree 
    31 from cgi import escape 
     41from mods_util import * 
     42import re 
     43import logging 
     44from sesame_util import * 
     45from solr_util import commit 
     46from solr_util import solr 
     47from solr_util import update 
     48from tictocs import * 
     49from worldcat_util import xisbn 
     50from xml_util import xml2cdata 
    3251 
    33 from MARCCodes import MARCRelators, languageCodes 
    34 from genre_maps import * 
     52import Solr 
    3553 
    36 from solr_util import solr, commit, update 
    37 from mods_util import * 
    38 from dcds_util import * 
    39 from bibtex_util import umlaut 
    40 from dc_util import * 
    41 from xml_util import xml2cdata 
    42 from worldcat_util import xisbn 
    43 from google_book_util import google_book 
    44 from sesame_util import * 
    45 from jcr import * 
    46 from tictocs import * 
    47  
    48 import datetime 
    49 import re 
    50  
     54logging.basicConfig(level=logging.DEBUG) 
    5155 
    5256MODS_NAMESPACE = 'http://www.loc.gov/mods/v3' 
     
    5761XLINK = '{%s}' % XLINK_NAMESPACE 
    5862 
    59 NSMAP = {None : MODS_NAMESPACE, 
    60         'dcterms': DCTERMS_NAMESPACE, 
    61         'xlink': XLINK_NAMESPACE 
     63NSMAP = {None: MODS_NAMESPACE, 
     64    'dcterms': DCTERMS_NAMESPACE, 
     65    'xlink': XLINK_NAMESPACE 
    6266} 
    6367 
     68class Collection(object): 
    6469 
    65 records = objectify_records('/Users/andre/devel/bibliographie/mods-xml/psychologie.xml') 
     70    #def __init__(self, filename, fach, disziplin, ** args): 
     71    def __init__(self, filename, fach, ** args): 
     72        self.filename = filename 
     73        #self.fakultaet = fakultaet 
     74        self.fach = fach 
     75        #self.disziplin = disziplin 
     76        self.institution = args.get('institution', '') 
     77        self.inst_label = args.get('inst_label', '') 
     78        self.debug = args.get('debug', '') 
    6679 
    67 for mods in records: 
    68         print mods.genre 
     80    @staticmethod 
     81    def _objectify_records(filename): 
     82        '''Transform MODS records to objects.''' 
     83        records = [] 
     84        tree = etree.parse(filename) 
     85        mods = tree.findall('.//%smods' % MODS) 
     86        for record in mods: 
     87            t = etree.tostring(record) 
     88            records.append(objectify.fromstring(t)) 
     89        return records 
     90 
     91    def convert(self): 
     92        records = Collection._objectify_records(self.filename) 
     93        #self.debug = False 
     94        if self.debug == True: 
     95            for mods in records: 
     96                logging.debug(objectify.dump(mods)) 
     97 
     98        for mods in records: 
     99            solr = Solr.SolrRecord() 
     100            solr.title = mods.titleInfo.title 
     101            try: 
     102                solr.subtitle = mods.titleInfo.subTitle 
     103            except AttributeError: 
     104                pass 
     105            if mods.titleInfo.get('type', '') == 'abbreviated': 
     106                solr.abbrtitle = mods.titleInfo.get('type') 
     107            if mods.titleInfo.get('type', '') == 'translated': 
     108                solr.alternative = mods.titleInfo.get('type') 
     109            try: 
     110                if mods.note.get('displayLabel', '') == 'Titelzusätze': 
     111                    solr.titelzusatz = mods.note.get('displayLabel') 
     112            except AttributeError: 
     113                pass 
     114            #names = [n for n in mods.name] 
     115            #print names 
     116            for name in mods.name: 
     117                if name.get('type') == 'personal': 
     118                    if name.role.roleTerm == 'aut': 
     119                        print name.namePart 
     120                        solr.creator.append(name.namePart) 
     121            logging.info(solr.serialize().encode('utf8')) 
     122            solr = None 
    69123 
    70124def main(): 
  • orga_csv2rdf.py

    r13 r14  
    1 from platform import readlines 
    21#!/usr/bin/env python 
    32# encoding: utf-8 
     
    2827__date__ ="$04.02.2010 20:15:22$" 
    2928 
     29import logging 
     30import re 
     31import urllib 
     32from rdflib import ConjunctiveGraph, Namespace, Literal, URIRef, RDF 
     33 
     34''' Lehreinheiten haben für uns unbrauchbare Präfixe. Beispiel: 
     35(LM) LE Ev. Theologie 
     36(LM) VKST Dekanat Philosophie und Erziehungswissenschaft 
     37''' 
     38LE_RE = re.compile('\([LDS][MG]\)\s[LV][EK](?:ST)?\s(?:ZWE\s)?') 
     39 
     40FAK_RE = re.compile('\d') # Fakultaeten-IDs haben Nummern-Präfixe 
     41 
     42AIISO = Namespace('http://purl.org/vocab/aiiso/schema#') 
     43FOAF = Namespace('http://xmlns.com/foaf/0.1/') 
     44UB = Namespace('http://ub.rub.de/vocab/orga/') 
     45 
     46BASE = 'http://ub.rub.de/resource/' 
     47 
     48logging.basicConfig(level=logging.DEBUG) 
    3049 
    3150def parse_csv(filename): 
    3251    data = open(filename, 'r').readlines() 
    3352 
     53    rub = ConjunctiveGraph() 
     54    rub.bind('aiiso', 'http://purl.org/vocab/aiiso/schema#') 
     55    rub.bind('foaf', 'http://xmlns.com/foaf/0.1/') 
     56    rub.add((URIRef(BASE + 'Ruhr_Universität'), RDF.type, AIISO['Institution'])) 
     57    rub.add((URIRef(BASE + 'Ruhr_Universität'), FOAF['name'], Literal('Ruhr-Universität Bochum'))) 
     58 
     59    orga = ConjunctiveGraph() 
     60    orga.bind('aiiso', 'http://purl.org/vocab/aiiso/schema#') 
     61    orga.bind('foaf', 'http://xmlns.com/foaf/0.1/') 
     62 
     63    fak = ConjunctiveGraph() 
     64    fak.bind('aiiso', 'http://purl.org/vocab/aiiso/schema#') 
     65    fak.bind('foaf', 'http://xmlns.com/foaf/0.1/') 
     66 
     67    le = ConjunctiveGraph() 
     68    le.bind('aiiso', 'http://purl.org/vocab/aiiso/schema#') 
     69    le.bind('foaf', 'http://xmlns.com/foaf/0.1/') 
     70 
     71    ordnr = ConjunctiveGraph() 
     72    ordnr.bind('aiiso', 'http://purl.org/vocab/aiiso/schema#') 
     73    ordnr.bind('foaf', 'http://xmlns.com/foaf/0.1/') 
     74    ordnr.bind('ub', 'http://ub.rub.de/vocab/orga/') 
     75 
    3476    for line in data: 
    3577        fields = line.split('|') 
    36         orga_id = fields[0] 
    37         orga_label = fields[1] 
    38         fak_id = fields[6] 
     78        if len(fields[26]) == 0: # Weiter, wenn es keine Ordnungsnummer gibt 
     79            continue 
     80 
     81        orga_id = '' 
     82        orga_label = '' 
     83        fak_id = '' 
    3984        fak_label = '' 
    40         if fak_id is not None: 
     85        le_id = '' 
     86        le_label = '' 
     87        ord_id = '' 
     88        ord_label = '' 
     89 
     90        if fields[1].strip() != 'Keiner Organisationseinheit zugeordnet': 
     91            orga_id = fields[0] 
     92            orga_label = fields[1] 
     93 
     94        fak_id = FAK_RE.sub('', fields[6]) 
     95        if len(fak_id) > 0: 
    4196            fak_labels = fields[8].split('; ') 
    4297            fak_label = fak_labels[1] 
     98        le_id = fields[13] 
     99        le_label = LE_RE.sub('', fields[15]) 
    43100 
     101        if orga_label == 'ZWEs wie LE': # Oder nicht? Merkmal fuer zentrale Einheit 
     102            orga_label = le_label 
     103        ord_id = fields[26] 
     104        ord_label = fields[28] 
     105 
     106        if len(orga_label) > 0: 
     107            orga.add((URIRef(BASE + urllib.quote_plus(orga_label)), RDF.type, AIISO['Organization'])) 
     108            orga.add((URIRef(BASE + urllib.quote_plus(orga_label)), FOAF['name'], Literal(orga_label))) 
     109            orga.add((URIRef(BASE + urllib.quote_plus(orga_label)), AIISO['code'], Literal(orga_id))) 
     110 
     111        if len(fak_label) > 0: 
     112            fak.add((URIRef(BASE + urllib.quote_plus(fak_label)), RDF.type, AIISO['Department'])) 
     113            fak.add((URIRef(BASE + urllib.quote_plus(fak_label)), FOAF['name'], Literal(fak_label))) 
     114            fak.add((URIRef(BASE + urllib.quote_plus(fak_label)), AIISO['code'], Literal(fak_id))) 
     115 
     116        if len(le_label) > 0: 
     117            le.add((URIRef(BASE + urllib.quote_plus(le_label)), RDF.type, AIISO['Institute'])) 
     118            le.add((URIRef(BASE + urllib.quote_plus(le_label)), FOAF['name'], Literal(le_label))) 
     119            le.add((URIRef(BASE + urllib.quote_plus(le_label)), AIISO['code'], Literal(le_id))) 
     120 
     121        if len(ord_label) > 0: 
     122            ordnr.add((URIRef(BASE + urllib.quote_plus(ord_label)), RDF.type, UB['Chair'])) 
     123            ordnr.add((URIRef(BASE + urllib.quote_plus(ord_label)), FOAF['name'], Literal(ord_label))) 
     124            ordnr.add((URIRef(BASE + urllib.quote_plus(ord_label)), AIISO['code'], Literal(ord_id))) 
     125 
     126            ordnr.add((URIRef(BASE + urllib.quote_plus(ord_label)), AIISO['part_of'], URIRef(BASE + urllib.quote_plus(le_label)))) 
     127            le.add((URIRef(BASE + urllib.quote_plus(le_label)), AIISO['part_of'], URIRef(BASE + urllib.quote_plus(fak_label)))) 
     128            fak.add((URIRef(BASE + urllib.quote_plus(fak_label)), AIISO['part_of'], URIRef(BASE + urllib.quote_plus(orga_label)))) 
     129 
     130        orga.add((URIRef(BASE + orga_label.replace(' ', '_')), AIISO['part_of'], URIRef(BASE + 'Ruhr_Universität'))) 
     131        #logging.info('ORGA_ID: %s' % orga_id) 
     132        #logging.info('ORGA_LABEL: %s' % orga_label) 
     133        #logging.info('FAK_ID: %s' % fak_id) 
     134        #logging.info('FAK_LABEL: %s' % fak_label) 
     135        #logging.info('LE_ID: %s' % le_id) 
     136        #logging.info('LE_LABEL: %s' % le_label) 
     137        #logging.info('ORD_ID: %s' % ord_id) 
     138        #logging.info('ORD_LABEL: %s' % ord_label) 
     139 
     140    logging.warn(rub.serialize()) 
     141    logging.warn(orga.serialize()) 
     142    logging.warn(fak.serialize()) 
     143    logging.warn(le.serialize()) 
     144    logging.warn(ordnr.serialize()) 
    44145 
    45146def main(): 
    46     pass 
     147    parse_csv('UB_Kostenstellenexport.csv') 
    47148 
    48149if __name__ == '__main__': 
Note: See TracChangeset for help on using the changeset viewer.