Advertisement
cmptrwz

Call Number Normalizers

Feb 14th, 2014
179
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.88 KB | None | 0 0
  1. CREATE OR REPLACE FUNCTION asset.label_normalizer_mvlc(text, integer)
  2. RETURNS text AS $BODY$
  3. use strict;
  4. use warnings;
  5. my $callnum = uc(shift); # All uppercase
  6. my $mode = shift;
  7.  
  8. if ($mode) { # Dewey number expansion (second group(s) are left-aligned)
  9. $callnum =~ s/([0-9]+)((\.|\s+)([0-9]+))?/sprintf(" %015.15s", $1) . ($2 ? $3 . do {my $tmp = sprintf("%-15.15s", $4); $tmp =~ tr! !0!; $tmp . ' '; }: '.000000000000000 ')/eg;
  10. } else { # Normal number expansion (everything is right-aligned)
  11. $callnum =~ s/([0-9]+)/sprintf("%015.15s", $1)/eg;
  12. }
  13. $callnum =~ s/([0-9.]+)/ $1 /g; # Add spaces before/after numbers
  14. # This does *not* preserve . or _ intentionally
  15. $callnum =~ s/[^A-Z0-9]/ /g; # Replace special characters with spaces
  16. $callnum =~ s/ {2,}/ /g; # Collapse multiple spaces to 1
  17. $callnum =~ s/^\s//g; # Remove leading spaces
  18. $callnum =~ s/\s$//g; # Remove trailing spaces
  19.  
  20. return $callnum;
  21. $BODY$ LANGUAGE plperlu;
  22.  
  23. CREATE OR REPLACE FUNCTION asset.label_normalizer_mvlc_generic(text)
  24. RETURNS text AS $BODY$
  25. SELECT asset.label_normalizer_mvlc($1, 0);
  26. $BODY$ LANGUAGE sql;
  27.  
  28. CREATE OR REPLACE FUNCTION asset.label_normalizer_mvlc_dewey(text)
  29. RETURNS text AS $BODY$
  30. SELECT asset.label_normalizer_mvlc($1, 1);
  31. $BODY$ LANGUAGE sql;
  32.  
  33. UPDATE asset.call_number_class SET normalizer = 'asset.label_normalizer_mvlc_generic' WHERE id = 1;
  34. UPDATE asset.call_number_class SET normalizer = 'asset.label_normalizer_mvlc_dewey' WHERE id = 2;
  35. UPDATE asset.call_number SET label = label WHERE label_class IN (1,2);
  36.  
  37.  
  38. Example output:
  39. 200.5 Dan
  40. Orig Generic: 200.5 DAN
  41. Orig Dewey: 200_500000000000000_DAN
  42. New Generic: 000000000000200 000000000000005 DAN
  43. New Dewey: 000000000000200 500000000000000 DAN
  44.  
  45. 200.6 Dan
  46. Orig Generic: 200.6 DAN
  47. Orig Dewey: 200_600000000000000_DAN
  48. New Generic: 000000000000200 000000000000006 DAN
  49. New Dewey: 000000000000200 600000000000000 DAN
  50.  
  51. 200.52 Dan
  52. Orig Generic: 200.52 DAN
  53. Orig Dewey: 200_520000000000000_DAN
  54. New Generic: 000000000000200 000000000000052 DAN
  55. New Dewey: 000000000000200 520000000000000 DAN
  56.  
  57. Disc 1-3
  58. Orig Generic: DISC 1 3
  59. Orig Dewey: DISC_13
  60. New Generic: DISC 000000000000001 000000000000003
  61. New Dewey: DISC 000000000000001 000000000000000 000000000000003 000000000000000
  62.  
  63. Disc 10-12
  64. Orig Generic: DISC 10 12
  65. Orig Dewey: DISC_1012
  66. New Generic: DISC 000000000000010 000000000000012
  67. New Dewey: DISC 000000000000010 000000000000000 000000000000012 000000000000000
  68.  
  69. Fic/King
  70. Orig Generic: FIC KING
  71. Orig Dewey: FICKING
  72. New Generic: FIC KING
  73. New Dewey: FIC KING
  74.  
  75. REF 973.2 AME v.1
  76. Orig Generic: REF 973.2 AME V.1
  77. Orig Dewey: REF_973_200000000000000_AME_V_1
  78. New Generic: REF 000000000000973 000000000000002 AME V 000000000000001
  79. New Dewey: REF 000000000000973 200000000000000 AME V 000000000000001 000000000000000
  80.  
  81. REF 973.2 AME v.2
  82. Orig Generic: REF 973.2 AME V.2
  83. Orig Dewey: REF_973_200000000000000_AME_V_2
  84. New Generic: REF 000000000000973 000000000000002 AME V 000000000000002
  85. New Dewey: REF 000000000000973 200000000000000 AME V 000000000000002 000000000000000
  86.  
  87. REF 973.2 AME v.10
  88. Orig Generic: REF 973.2 AME V.10
  89. Orig Dewey: REF_973_200000000000000_AME_V_10
  90. New Generic: REF 000000000000973 000000000000002 AME V 000000000000010
  91. New Dewey: REF 000000000000973 200000000000000 AME V 000000000000010 000000000000000
  92.  
  93. Season 1 Disc 1
  94. Orig Generic: SEASON 1 DISC 1
  95. Orig Dewey: SEASON_1_DISC_100000000000000
  96. New Generic: SEASON 000000000000001 DISC 000000000000001
  97. New Dewey: SEASON 000000000000001 000000000000000 DISC 000000000000001 000000000000000
  98.  
  99. Season 1 Disc 2
  100. Orig Generic: SEASON 1 DISC 2
  101. Orig Dewey: SEASON_1_DISC_200000000000000
  102. New Generic: SEASON 000000000000001 DISC 000000000000002
  103. New Dewey: SEASON 000000000000001 000000000000000 DISC 000000000000002 000000000000000
  104.  
  105. Season 1 Disc 10
  106. Orig Generic: SEASON 1 DISC 10
  107. Orig Dewey: SEASON_1_DISC_100000000000000
  108. New Generic: SEASON 000000000000001 DISC 000000000000010
  109. New Dewey: SEASON 000000000000001 000000000000000 DISC 000000000000010 000000000000000
  110.  
  111.  
  112. Example call numbers ordered by:
  113.  
  114. Orig Generic:
  115. 200.5 Dan
  116. 200.52 Dan
  117. 200.6 Dan
  118. Disc 1-3
  119. Disc 10-12
  120. Fic/King
  121. REF 973.2 AME v.1
  122. REF 973.2 AME v.10
  123. REF 973.2 AME v.2
  124. Season 1 Disc 1
  125. Season 1 Disc 10
  126. Season 1 Disc 2
  127.  
  128. Orig Dewey:
  129. 200.5 Dan
  130. 200.52 Dan
  131. 200.6 Dan
  132. Disc 10-12
  133. Disc 1-3
  134. Fic/King
  135. REF 973.2 AME v.1
  136. REF 973.2 AME v.10
  137. REF 973.2 AME v.2
  138. Season 1 Disc 1
  139. Season 1 Disc 10
  140. Season 1 Disc 2
  141.  
  142. New Generic:
  143. 200.5 Dan
  144. 200.6 Dan
  145. 200.52 Dan
  146. Disc 1-3
  147. Disc 10-12
  148. Fic/King
  149. REF 973.2 AME v.1
  150. REF 973.2 AME v.2
  151. REF 973.2 AME v.10
  152. Season 1 Disc 1
  153. Season 1 Disc 2
  154. Season 1 Disc 10
  155.  
  156. New Dewey:
  157. 200.5 Dan
  158. 200.52 Dan
  159. 200.6 Dan
  160. Disc 1-3
  161. Disc 10-12
  162. Fic/King
  163. REF 973.2 AME v.1
  164. REF 973.2 AME v.2
  165. REF 973.2 AME v.10
  166. Season 1 Disc 1
  167. Season 1 Disc 2
  168. Season 1 Disc 10
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement