Exemplo n.º 1
0
def resolve_record(marc_record, descr_index):
    for marc_field_and_subfields in FIELDS_TO_CHECK:
        fld, subflds = marc_field_and_subfields[0], marc_field_and_subfields[1]

        if fld in marc_record:
            raw_objects_flds_list = marc_record.get_fields(fld)

            for raw_fld in raw_objects_flds_list:
                name_for_prepare = ' '.join(
                    subfld for subfld in raw_fld.get_subfields(*subflds))
                if name_for_prepare:
                    term_to_search = prepare_name_for_indexing(
                        name_for_prepare)
                else:
                    raise DescriptorNotResolved

                if term_to_search in descr_index:
                    descr = descr_index.get(term_to_search)
                    identifier = f'{descr[0]}^^{descr[1]}^^{descr[2]}'

                    marc_record.remove_field(raw_fld)
                    raw_fld.add_subfield('0', identifier)
                    marc_record.add_ordered_field(raw_fld)
                else:
                    #print(term_to_search)
                    raise DescriptorNotResolved

    return marc_record
Exemplo n.º 2
0
def index_descriptors(path_dir):
    descriptors_dict = {}

    for filename in os.listdir(path_dir):
        path_file = os.sep.join([path_dir, filename])
        with open(path_file, 'r', encoding='utf-8') as fp:
            for line in tqdm(fp):
                line_as_dict = ujson.loads(line)
                index = line_as_dict.get('_index')
                es_id = line_as_dict.get('_id')
                name = line_as_dict.get('_source')['descr_name']
                indexing_name = prepare_name_for_indexing(name)
                descriptors_dict.setdefault(indexing_name,
                                            (es_id, index, name))

    return descriptors_dict
Exemplo n.º 3
0
def resolve_field_value(field_value_list, descr_index):
    if field_value_list:
        list_to_return = []
        for val in field_value_list:
            if val:
                term_to_search = prepare_name_for_indexing(val)

                if term_to_search in descr_index:
                    descr = descr_index.get(term_to_search)
                    val_with_id = f'{descr[0]}^^{descr[1]}^^{descr[2]}'
                    list_to_return.append(val_with_id)

        return list_to_return

    else:
        return field_value_list
Exemplo n.º 4
0
 def test_4_1(self):
     data = 'Tytuł$ nie tylko z literami i cyframi. cz. 1? \n $%'
     result = cn.prepare_name_for_indexing(data)
     self.assertEqual('TYTUŁ NIE TYLKO Z LITERAMI I CYFRAMI CZ 1', result)
Exemplo n.º 5
0
 def test_4_4(self):
     data = 'Wszystko podniesione do WIeLKIch liter'
     result = cn.prepare_name_for_indexing(data)
     self.assertEqual('WSZYSTKO PODNIESIONE DO WIELKICH LITER', result)
Exemplo n.º 6
0
 def test_4_3(self):
     data = ' Białe znaki z początku i końca są usuwane    \n'
     result = cn.prepare_name_for_indexing(data)
     self.assertEqual('BIAŁE ZNAKI Z POCZĄTKU I KOŃCA SĄ USUWANE', result)
Exemplo n.º 7
0
 def test_4_2(self):
     data = 'Wielokrotne   białe    znaki  są redukowane \n do jednej \t spacji.'
     result = cn.prepare_name_for_indexing(data)
     self.assertEqual(
         'WIELOKROTNE BIAŁE ZNAKI SĄ REDUKOWANE DO JEDNEJ SPACJI', result)