示例#1
0
def compareFullAccessPoint(NumNot, ark_current, recordBNF, nom, prenom,
                           date_debut):
    """Comparaison des noms, puis des prénoms, puis des dates. 
    Si les dates sont vides, on ne compare que noms et prénoms
    Si les prénoms sont vides, on ne compare que les noms"""
    nomBNF = main.clean_string(
        main.extract_subfield(recordBNF, "200", "a", "all", " "))
    prenomBNF = main.clean_string(
        main.extract_subfield(recordBNF, "200", "b", "all", " "))
    datesBNF = main.clean_string(
        main.extract_subfield(recordBNF, "200", "f", "all", " "))
    ark = ""
    if (nomBNF == ""):
        nomBNF = main.extract_subfield(recordBNF, "210", "a", "all", " ")
        prenomBNF = main.extract_subfield(recordBNF, "210", "b", "all", " ")
        datesBNF = main.extract_subfield(recordBNF, "210", "f", "all", " ")
    if (nom in nomBNF or nomBNF in nom):
        if (prenom != ""):
            if (prenom in prenomBNF or prenomBNF in prenom):
                if (date_debut != ""):
                    if (date_debut in datesBNF or datesBNF in date_debut):
                        ark = ark_current
                else:
                    ark = ark_current
        else:
            ark = ark_current
    return ark
示例#2
0
def align_from_aut_item(row, n, form_aut2ark, parametres, liste_reports):
    if (n == 0):
        assert main.control_columns_number(form_aut2ark, row,
                                           header_columns_init_aut2aut)
    n += 1
    if (n % 100 == 0):
        main.check_access2apis(n, dict_check_apis)
    (NumNot, frbnf_aut_init, ark_aut_init, isni, nom, prenom, date_debut,
     date_fin) = bib2ark.extract_cols_from_row(row,
                                               header_columns_init_aut2aut)
    ark_aut_init = nettoyageArk(ark_aut_init)
    isni_nett = nettoyage_isni(isni)
    nom_nett = main.clean_string(nom, False, True)
    prenom_nett = main.clean_string(prenom, False, True)
    date_debut_nett = date_debut
    date_fin_nett = date_fin
    ark_trouve = ""
    if (ark_trouve == "" and ark_aut_init != ""):
        ark_trouve = arkAut2arkAut(NumNot, ark_aut_init)
    if (ark_trouve == "" and isni_nett != ""):
        ark_trouve = isni2ark(NumNot, isni_nett)
    if (ark_trouve == "" and frbnf_aut_init != ""):
        ark_trouve = frbnfAut2arkAut(NumNot, frbnf_aut_init, nom_nett,
                                     prenom_nett, date_debut_nett)
    if (ark_trouve == "" and nom != ""):
        ark_trouve = accesspoint2arkAut(NumNot, nom_nett, prenom_nett,
                                        date_debut_nett, date_fin_nett)
    if (ark_trouve == "" and parametres["isni_option"] == 1):
        ark_trouve = accesspoint2isniorg(NumNot, nom_nett, prenom_nett,
                                         date_debut_nett, date_fin_nett)
    print(str(n) + ". " + NumNot + " : " + ark_trouve)
    nbARK = len(ark_trouve.split(","))
    if (ark_trouve == ""):
        nbARK = 0
    if (ark_trouve == "Pb FRBNF"):
        nb_notices_nb_ARK["Pb FRBNF"] += 1
    else:
        nb_notices_nb_ARK[nbARK] += 1
    typeConversionNumNot = ""
    if (NumNot in NumNotices2methode):
        typeConversionNumNot = ",".join(NumNotices2methode[NumNot])
        if (len(set(NumNotices2methode[NumNot])) == 1):
            typeConversionNumNot = list(set(NumNotices2methode[NumNot]))[0]
    liste_metadonnees = [
        NumNot, nbARK, ark_trouve, typeConversionNumNot, ark_aut_init,
        frbnf_aut_init, isni, nom, prenom, date_debut, date_fin
    ]
    if (parametres["meta_bnf"] == 1):
        liste_metadonnees.extend(ark2metadc(ark_trouve))
    if (parametres["file_nb"] == 1):
        row2file(liste_metadonnees, liste_reports)
    elif (parametres["file_nb"] == 2):
        row2files(liste_metadonnees, liste_reports)
示例#3
0
def accesspoint2sru(accesspoint, parametres={}):
    """
    Rechercher le point d'accès dans les notices Rameau
    """
    accesspoint = main.clean_string(accesspoint, False, True)
    methode = []
    arks = []
    valid_tag = ""
    query = f"aut.accesspoint adj \"{accesspoint}\"\
and aut.status any \"sparse validated\"\
and aut.type all RAM"

    result = sru.SRU_result(query)
    for ark in result.dict_records:
        xml_record = result.dict_records[ark]
        tag = ""
        for field in xml_record:
            if (field.get("tag") is not None
                    and field.get("tag").startswith("2")):
                tag = field.get("tag")
        f2XX = [
            el[el.find("$a"):]
            for el in sru.record2fieldvalue(xml_record, tag).split("~")
        ]
        f4XX = [
            el[el.find("$a"):] for el in sru.record2fieldvalue(
                xml_record, f"4{tag[1:]}").split("~")
        ]
        test = False
        for acc in f2XX:
            if test is False:
                acc = main.clean_string(re.sub(" \$. ", " ", acc[3:]), False,
                                        True)
                if acc == accesspoint:
                    arks.append(ark)
                    methode.append("SRU forme retenue")
                    valid_tag = tag
                    test = True
                    add_type_rameau(ark, tag, parametres)
        for acc in f4XX:
            if test is False:
                acc = main.clean_string(re.sub(" \$. ", " ", acc[3:]), False,
                                        True)
                if acc == accesspoint:
                    arks.append(ark)
                    methode.append("SRU forme rejetée")
                    valid_tag = f"4{tag:1}"
                    test = True
                    add_type_rameau(ark, tag, parametres)
    arks = ",".join(arks)
    methode = ",".join(methode)
    return arks, methode
示例#4
0
def extractARKautfromBIB(record, nom, prenom, date_debut):
    """Récupère tous les auteurs d'une notice bibliographique
    et compare chacun avec un nom-prénom d'auteur en entrée"""
    listeNNA = []
    listeArk = []
    listeFieldsAuteur = defaultdict(dict)
    i = 0
    for field in record.xpath(".//mxc:datafield", namespaces=main.ns):
        i += 1
        if (field.get("tag")[0] == "7"):
            listeFieldsAuteur[i]["tag"] = field.get("tag")
            for subfield in field.xpath("mxc:subfield", namespaces=main.ns):
                if (subfield.get("code") == "3"):
                    listeFieldsAuteur[i]["nna"] = subfield.text
                if (subfield.get("code") == "a"):
                    listeFieldsAuteur[i]["nom"] = main.clean_string(
                        subfield.text, False, True)
                if (subfield.get("code") == "b"):
                    listeFieldsAuteur[i]["prenom"] = main.clean_string(
                        subfield.text, False, True)
                if (subfield.get("code") == "f"):
                    listeFieldsAuteur[i]["dates"] = main.clean_string(
                        subfield.text, False, True)
    for auteur in listeFieldsAuteur:
        if (nom in listeFieldsAuteur[auteur]["nom"]
                or listeFieldsAuteur[auteur]["nom"] in nom):
            if (prenom != "" and "prenom" in listeFieldsAuteur[auteur]):
                if (prenom in listeFieldsAuteur[auteur]["prenom"]
                        or listeFieldsAuteur[auteur]["prenom"] in prenom):
                    if (date_debut != ""
                            and "dates" in listeFieldsAuteur[auteur]):
                        if (date_debut in listeFieldsAuteur[auteur]["dates"]
                                or listeFieldsAuteur[auteur]["dates"]
                                in date_debut):
                            listeNNA.append(listeFieldsAuteur[auteur]["nna"])
                    else:
                        listeNNA.append(listeFieldsAuteur[auteur]["nna"])
            elif (date_debut != "" and "dates" in listeFieldsAuteur[auteur]):
                if (date_debut in listeFieldsAuteur[auteur]["dates"]
                        or listeFieldsAuteur[auteur]["dates"] in date_debut):
                    listeNNA.append(listeFieldsAuteur[auteur]["nna"])
            elif ("nna" in listeFieldsAuteur[auteur]):
                listeNNA.append(listeFieldsAuteur[auteur]["nna"])
    for nna in listeNNA:
        listeArk.append(nna2ark(nna))
    return listeArk
示例#5
0
def compareAccessPoint(NumNot, ark_current, nna, nom, recordBNF):
    """Vérifier si deux noms de famille sont identiques. 
    Contrôle pertinent si on part d'un identifiant (ancien FRBNF par exemple.
    Sinon, il vaut mieux utiliser compareFullAccessPoint"""
    ark = ""
    accessPointBNF = ""
    #Si le FRBNF de la notice source est présent comme ancien numéro de notice
    #dans la notice BnF, on compare les noms (100$a ou 110$a)
    accessPointBNF = main.clean_string(
        main.extract_subfield(recordBNF, "200", "a", "all", " "))
    if (accessPointBNF == ""):
        accessPointBNF = main.clean_string(
            main.extract_subfield(recordBNF, "210", "a", "all", " "))
    if (nom != "" and accessPointBNF != ""):
        if (nom in accessPointBNF):
            ark = ark_current
            NumNotices2methode[NumNot].append("N° sys FRBNF + contrôle Nom")
        if (accessPointBNF in nom):
            ark = ark_current
            NumNotices2methode[NumNot].append("N° sys FRBNF + contrôle Nom")
    return ark
示例#6
0
def align_from_bib_item(row, n, form_aut2ark, parametres, liste_reports):
    if (n == 0):
        assert main.control_columns_number(form_aut2ark, row,
                                           header_columns_init_bib2aut)
    n += 1
    if (n % 100 == 0):
        main.check_access2apis(n, dict_check_apis)
    (NumNot, NumNotBib, ark_bib_init, frbnf_bib_init, titre, pubDate, isni,
     nom, prenom, dates_auteur) = bib2ark.extract_cols_from_row(
         row, header_columns_init_bib2aut)

    #==============================================================================
    #             NumNot = row[0]
    #             NumNotBib = row[1]
    #             ark_bib_init = row[2]
    #             frbnf_bib_init = row[3]
    #             titre = row[4]
    #==============================================================================
    titre_nett = main.clean_string(titre, False, True)
    pubDate_nett = funcs.nettoyageDate(pubDate)
    #==============================================================================
    #             isni = row[5]
    #             nom = row[6]
    #==============================================================================
    isni_nett = nettoyage_isni(isni)
    nom_nett = main.clean_string(nom, False, True)
    #'prenom = row[7]
    prenom_nett = main.clean_string(prenom, False, True)
    #dates_auteur = row[8]
    dates_auteur_nett = dates_auteur
    date_debut = dates_auteur
    if (dates_auteur.find("av") > 0):
        date_debut = dates_auteur[:dates_auteur.find("av")]
    elif (dates_auteur.find("-") > 0):
        date_debut = dates_auteur[:dates_auteur.find("-")]
    date_debut = main.clean_string(date_debut, False, True)
    ark_trouve = ""
    if (ark_trouve == "" and isni_nett != ""):
        ark_trouve = isni2ark(NumNot, isni_nett)
    if (ark_trouve == "" and ark_bib_init != ""):
        ark_trouve = arkBib2arkAut(NumNot, ark_bib_init, nom_nett, prenom_nett,
                                   date_debut)
    if (ark_trouve == "" and frbnf_bib_init != ""):
        ark_trouve = frbnfBib2arkAut(NumNot, frbnf_bib_init, nom_nett,
                                     prenom_nett, date_debut)
    if (ark_trouve == "" and nom != ""):
        ark_trouve = bib2arkAUT(NumNot, titre_nett, pubDate_nett, nom_nett,
                                prenom_nett, date_debut)
    print(str(n) + ". " + NumNot + " : " + ark_trouve)
    nbARK = len(ark_trouve.split(","))
    if (ark_trouve == ""):
        nbARK = 0
    if (ark_trouve == "Pb FRBNF"):
        nb_notices_nb_ARK["Pb FRBNF"] += 1
    else:
        nb_notices_nb_ARK[nbARK] += 1
    typeConversionNumNot = ""
    if (NumNot in NumNotices2methode):
        typeConversionNumNot = ",".join(NumNotices2methode[NumNot])
        if (len(set(NumNotices2methode[NumNot])) == 1):
            typeConversionNumNot = list(set(NumNotices2methode[NumNot]))[0]
    liste_metadonnees = [
        nbARK, NumNot, ark_trouve, typeConversionNumNot, NumNotBib,
        ark_bib_init, frbnf_bib_init, titre, isni, nom, prenom, dates_auteur
    ]
    if (parametres['meta_bnf'] == 1):
        liste_metadonnees.extend(ark2metadc(ark_trouve))
    if (parametres['file_nb'] == 1):
        row2file(liste_metadonnees, liste_reports)
    elif (parametres['file_nb'] == 2):
        row2files(liste_metadonnees, liste_reports)