User Tools

Site Tools


auto.bat

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
auto.bat [05/04/2009 19:30]
fernando
auto.bat [04/05/2009 00:00]
Line 1: Line 1:
-====== Creación de una base de pseudo-autoridades a partir de una base bibliográfica ====== 
  
-<​note>​ 
-Estos son los archivos generados en Tandil en 2005. Para una versión actual, ver http://​code.google.com/​p/​opacmarc 
-</​note>​ 
- 
-==== auto.bat ==== 
- 
-<code dos> 
-:: =============================================================================== 
-:: Creación de una base de pseudo-autoridades a partir de una base bibliográfica 
-:: existente. 
-::  
-:: Genera, además, un listado de headings posiblemente duplicados. ​ 
-:: 
-:: La base bibliográfica debe estar en "​formato Catalis",​ en particular, debe 
-:: usar '#'​ en lugar de '​blank'​ para los indicadores. Véase 
-:: http://​catalis.uns.edu.ar/​wiki/​index.php/​Estructura_de_las_bases_bibliogr%C3%A1ficas 
-:: 
-:: Problema pendiente: estos headings deberían unificarse (^x -> ^v) 
-::   ​150 ​ «#​0^aAdventure stories, American^xHistory and criticism^vJuvenile literature.» 
-::   ​150 ​ «#​0^aAdventure stories, American^xHistory and criticism^xJuvenile literature.» 
-:: Véase http://​www.slc.bc.ca/​cheats/​formv.htm 
-:: 
-:: Permitir que el usuario seleccione el tipo de headings que *no* desea enviar 
-:: a la base de autoridades (name, subject, title). 
-:: 
-:: ¿Y qué hacemos con el 240? 
-:: 
-:: Generar un listado de posibles duplicados, en base a la distancia de Levenshtein 
-:: entre registros adyacentes (p.ej. usando levenshtein() de PHP 
-:: 
-:: @param %1 base bibliográfica de origen, p.ej. bases\demo\biblio 
-:: 
-:: (c) Gómez Mansilla Piriz 2005 
-:: =============================================================================== 
- 
-@echo off 
- 
-:: Lista de tags de los cuales vamos a extraer los encabezamientos 
-set MAIN_ENTRY=v100~v110~v111~v130 ​     :: 100, 110 y 111 pueden estar asoc. a un 240 
-set ADDED_ENTRY=v700~v710~v711~v730 ​    :: 700, 710 y 711 pueden tener $t 
-set SERIES=v440~v800~v810~v811~v830 ​    :: 800, 810 y 811 siempre tienen $t 
-set SUBJECT1=v600~v610~v611~v630 ​       :: 600, 610 y 611 pueden tener $t 
-set SUBJECT2=v650~v651~v655~v656 
- 
-set CONTROLLED_TAGS=%MAIN_ENTRY%~%ADDED_ENTRY%~%SERIES%~%SUBJECT1% 
- 
-:: si está presente el campo 240, creamos un campo auxiliar 1xx + $t (nombre/​título) 
-::mx %1 proc=@v240.pft create=biblio-240 now -all 
- 
-:: cada campo de la base bibliográfica pasa a ser un registro de la base biblio-campos 
-i2id %1 >​biblio.id 
-mx seq=biblio.id lw=8000 create=biblio-campos now -all 
- 
-:: eliminamos espacios en blanco en los extremos (¿a qué se deben esos espacios?) 
-echo Eliminando espacios en blanco... 
-mxcp biblio-campos create=biblio-campos-clean clean >nul 
- 
-:: extraemos los campos controlados,​ y creamos una base con ellos 
-:: ATENCION: para filtrar subcampos $e, $4, $5, podemos usar algo como name.pft del OPAC. 
-echo Extrayendo campos controlados... 
-mx biblio-campos-clean lw=1000 pft=@extract-headings.pft now >​auto-dup.seq 
-mx seq=auto-dup.seq create=auto-dup now -all 
- 
-:: ordenamos la lista de headings (comparando en mayúsculas) 
-:: ATENCION: hay que usar la tabla de mayúsculas ANSI-UC.tab 
-echo Ordenando lista de headings... 
-msrt auto-dup 1000 mhu,v1*4 
- 
-:: Eliminamos headings duplicados (ignoramos indicadores al comparar) 
-echo Eliminando headings duplicados... 
-mx auto-dup lw=1000 "​pft=if v1*2 <> ref(mfn-1,​v1*2) then v1,'​|',​v2,'​|',​v3/​ fi" now >​auto-uniq.seq 
-mx seq=auto-uniq.seq lw=1000 create=auto-uniq now -all 
- 
-:: asignamos tag correcto a cada registro de auto-uniq 
-echo Reasignando tags a los registros de autoridades... 
-mx auto-uniq "​proc='​d1d2d3',​ '​a1|',​v2,'​|',​ '​a1',​if v3='​440'​ then '​30'​ else v3*1, fi,'​|',​ v1, '​|'"​ create=auto now -all 
- 
-:: colocamos un blanco en el segundo indicador (no definido) en los headings 100, 110, 111 
-echo Corrigiendo segundo indicador en campos 100, 110, 111... 
-mx auto "​proc=if p(v100) then '​d100',​ '​a100|',​v100.1,'#',​v100*2,'​|',​ fi" copy=auto now -all 
-mx auto "​proc=if p(v110) then '​d110',​ '​a110|',​v110.1,'#',​v110*2,'​|',​ fi" copy=auto now -all 
-mx auto "​proc=if p(v111) then '​d111',​ '​a111|',​v111.1,'#',​v111*2,'​|',​ fi" copy=auto now -all 
- 
-:: agregamos campos a la base de autoridades:​ leader, 005, 008 
- 
-:: LDR: 05='​n',​ 06='​z',​ 09='#',​ 17='​o'​ 
-echo Agregando datos del leader... 
-mx auto "​proc='​a905~n~a906~z~a909~#​~a917~o~'"​ copy=auto now -all 
- 
-echo Agregando campo 005... 
-mx auto "​proc='​a005~',​s(date).8,​s(date)*9.6,'​.0','​~'"​ copy=auto now -all 
- 
-:: 008/10: Descriptive cataloging rules 
-echo Agregando campo 008... 
-mx auto "​proc='​a008~',​s(date)*2.6,'​|||ac|||aaan','##########','​|n#​|||####​||','​~'"​ copy=auto now -all 
- 
-:: agregamos un campo 999 donde se almacenará el ID del eventual registro target 
-mx auto "​proc='​d999a999~0~'"​ copy=auto now -all 
- 
-:: PRUEBA: generar registros inactivos en la base auto a partir del 2do registro 
-::         Todos los registros de la base auto son alias del primero. 
-::mx auto from=2 "​proc='​d999a999@001766@'"​ copy=auto now -all 
- 
-:: diccionario base de autoridades 
-echo Generando diccionario para la base de autoridades... 
-mx auto fst=@auto.fst fullinv=auto 
- 
-:: Generamos una lista de posibles duplicados (requiere PHP en el PATH) 
-echo Generando lista de posibles duplicados... 
-mx auto lw=1000 "​pft=v100/​v110/​v111/​v130/​v150/​v151/​v155/"​ now >​auto-lista.txt 
-php compara-lev.php auto-lista.txt 2 >​auto-posibles-duplicados.txt 
- 
- 
-echo. 
-echo ----------------------- 
-echo LINKS entre BIB y AUTO 
-echo ----------------------- 
- 
-:: Construimos tabla de mapeo de punteros a la base bibliográfica 
-echo Construyendo tabla para mapear punteros... 
-mx auto-dup "​pft=if v1*2 <> ref(mfn-1,​v1*2) then putenv('​PTR=',​v2) fi, v2,'​|',​getenv('​PTR'​)/"​ now -all >map.seq 
-mx seq=map.seq create=map now -all 
- 
-:: diccionario para map 
-mx map "fst=1 0 v1/" fullinv=map 
- 
-:: creamos un subcampo $9 en cada punto de acceso 
-echo Creando subcampos $9... 
-mx biblio-campos-clean proc=@create-subfield-9.pft create=biblio-campos-ref1 now -all 
- 
-:: consultamos la base map para re-asignar punteros en la base bibliográfica 
-echo Reasignando subcampos $9... 
-mx biblio-campos-ref1 proc=@recode.pft create=biblio-campos-ref2 now -all 
- 
-:: regeneramos la base bibliográfica 
-echo Regenerando la base bibliográfica... 
-mx biblio-campos-ref2 lw=8000 "​pft=v1/"​ now -all >​biblio-campos-ref2.id 
-id2i biblio-campos-ref2.id create=biblio 
-</​code>​ 
- 
- 
-===== Archivos auxiliares ===== 
- 
-==== v240.pft ==== 
- 
-<​code>​ 
-if p(v240) then 
-    proc( 
-        '​d1000a1000#',​ 
-            "​100"​d100,​ 
-            "​110"​d110,​ 
-            "​111"​d111,​ 
-        '#',​ 
-    ) 
- 
-    '​a',​v1000,'​|',​ 
-        v100,​v110,​v111,​ 
-        '​^t',​v240*2,​ 
-    '​|'​ 
-fi 
-</​code>​ 
- 
-==== extract-headings.pft ==== 
- 
-<​code>​ 
-/* en el caso de nombres seguidos de $t, tenemos que extraer también el nombre aislado, 
-   ​pero... ¿a qué registro queda vinculado? 
-   Se puede hacer sobre la base de autoridades,​ una vez que se han eliminado los 
-   ​duplicados,​ pero antes del retag 
-    
-   mx auto "​pft=if p(v1^t) then left(v1,​instr(v1,'​^t'​)-1)/​ fi" now >​names-without-titles.seq 
-    
-   ​Algunos de los nombres obtenidos por este método pueden ya estar presentes en la base 
-   de autoridades,​ 
-   en cuyo caso no necesitamos agregarlos. Para los restantes, conservamos el nombre, 
-   junto con el tag original; tales registros quedarán como semi-huérfanos,​ en el sentido 
-   de que no hay registros bibliográficos apuntando hacia ellos (sólo están vinculados, 
-   ​aunque no explícitamente por el momento, a registros de autoridad de nombre/​título). 
-*/ 
- 
-/* 
-   ​TO-DO:​ excluir $v en series, $x, $v, $y, $z en subject headings 
-   ​TO-DO:​ limpiar puntuación final, especialmente si hay una coma final 
-          debida a la presencia de un subcampo $e. Los headings se almacenan 
-   *sin* puntuación final, ¿cómo la quitamos? 
-*/ 
- 
-if getenv('​CONTROLLED_TAGS'​) : v1*1.4 then 
- v1*6.2, ​ /* ind1, ind2 */ 
- proc('​d1000a1000|',​ replace(v1*9,'​^','​|a1000|'​),​ '​|'​), ​ /* split en subcampos */ 
- ( 
- if not '​e4568'​ : v1000.1 then '​^',​v1000,​ fi   /* excluimos subcampos e,4,5,6,8 */ 
- ) 
- '​|',​mfn, ​      /* mfn en la base biblio-campos;​ actúa como ID del heading */ 
- '​|',​v1*2.3, ​   /* tag del heading */ 
- /,             /* newline */ 
-fi 
-</​code>​ 
- 
-==== auto.fst ==== 
- 
-<​code>​ 
-001 0 '​-CN=',​v1 
-100 4 v100^a 
-110 4 v110^a 
-111 4 v111^a 
-999 0 if v999<>'​0'​ then '​TARGET='​v999,​ fi 
-</​code>​ 
- 
-==== create-subfield-9.pft ==== 
- 
-<​code>​ 
-/* Creación de un subcampo $9 en los campos controlados */ 
- 
-if getenv('​CONTROLLED_TAGS'​) : v1*1.4 then 
-    '​d1a1|',​ 
-        v1.8,  /* hasta los indicadores */ 
-        proc('​d1000a1000|',​ replace(v1*9,'​^','​|a1000|'​),​ '​|'​), ​ /* split en subcampos */ 
-        ( 
-            if '​e4568'​ : v1000.1 then '​^',​v1000,​ fi   /* preservamos subcampos e,4,5,6,8 */ 
-        ) 
-        proc('​d1000'​),​ 
-        '​^9',​mfn,​ 
-    '​|',​ 
-fi 
-</​code>​ 
- 
- 
-==== recode.pft ==== 
- 
-<​code>​ 
-if getenv('​CONTROLLED_TAGS'​) : v1*1.4 then 
-   '​d1a1~',​ 
-   ​replace( 
-           v1, 
-           ​s('​^9',​v1^9),​ 
-           ​s('​^9',​ref(['​map'​]l(['​map'​]mfn),​v2)) 
-   ), 
-   '​~',​ 
-fi 
-</​code>​ 
auto.bat.txt · Last modified: 04/05/2009 00:00 (external edit)