traject 2.0.0-java

Sign up to get free protection for your applications and to get access to all the features.
Files changed (104) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +18 -0
  3. data/.travis.yml +27 -0
  4. data/.yardopts +3 -0
  5. data/Gemfile +12 -0
  6. data/LICENSE.txt +20 -0
  7. data/README.md +461 -0
  8. data/Rakefile +21 -0
  9. data/bench/bench.rb +30 -0
  10. data/bin/traject +16 -0
  11. data/doc/batch_execution.md +243 -0
  12. data/doc/extending.md +190 -0
  13. data/doc/indexing_rules.md +265 -0
  14. data/doc/other_commands.md +47 -0
  15. data/doc/settings.md +101 -0
  16. data/lib/tasks/load_maps.rake +48 -0
  17. data/lib/traject.rb +11 -0
  18. data/lib/traject/command_line.rb +301 -0
  19. data/lib/traject/csv_writer.rb +34 -0
  20. data/lib/traject/debug_writer.rb +47 -0
  21. data/lib/traject/delimited_writer.rb +110 -0
  22. data/lib/traject/indexer.rb +613 -0
  23. data/lib/traject/indexer/settings.rb +110 -0
  24. data/lib/traject/json_writer.rb +51 -0
  25. data/lib/traject/line_writer.rb +63 -0
  26. data/lib/traject/macros/basic.rb +9 -0
  27. data/lib/traject/macros/marc21.rb +223 -0
  28. data/lib/traject/macros/marc21_semantics.rb +584 -0
  29. data/lib/traject/macros/marc_format_classifier.rb +197 -0
  30. data/lib/traject/marc_extractor.rb +410 -0
  31. data/lib/traject/marc_reader.rb +89 -0
  32. data/lib/traject/mock_reader.rb +97 -0
  33. data/lib/traject/ndj_reader.rb +40 -0
  34. data/lib/traject/null_writer.rb +22 -0
  35. data/lib/traject/qualified_const_get.rb +40 -0
  36. data/lib/traject/solr_json_writer.rb +277 -0
  37. data/lib/traject/thread_pool.rb +161 -0
  38. data/lib/traject/translation_map.rb +267 -0
  39. data/lib/traject/util.rb +52 -0
  40. data/lib/traject/version.rb +3 -0
  41. data/lib/traject/yaml_writer.rb +9 -0
  42. data/lib/translation_maps/lcc_top_level.yaml +26 -0
  43. data/lib/translation_maps/marc_genre_007.yaml +9 -0
  44. data/lib/translation_maps/marc_genre_leader.yaml +22 -0
  45. data/lib/translation_maps/marc_geographic.yaml +589 -0
  46. data/lib/translation_maps/marc_instruments.yaml +102 -0
  47. data/lib/translation_maps/marc_languages.yaml +490 -0
  48. data/test/debug_writer_test.rb +38 -0
  49. data/test/delimited_writer_test.rb +104 -0
  50. data/test/indexer/each_record_test.rb +59 -0
  51. data/test/indexer/macros_marc21_semantics_test.rb +391 -0
  52. data/test/indexer/macros_marc21_test.rb +190 -0
  53. data/test/indexer/macros_test.rb +40 -0
  54. data/test/indexer/map_record_test.rb +209 -0
  55. data/test/indexer/read_write_test.rb +101 -0
  56. data/test/indexer/settings_test.rb +152 -0
  57. data/test/indexer/to_field_test.rb +77 -0
  58. data/test/marc_extractor_test.rb +412 -0
  59. data/test/marc_format_classifier_test.rb +98 -0
  60. data/test/marc_reader_test.rb +110 -0
  61. data/test/solr_json_writer_test.rb +248 -0
  62. data/test/test_helper.rb +90 -0
  63. data/test/test_support/245_no_ab.marc +1 -0
  64. data/test/test_support/880_with_no_6.utf8.marc +1 -0
  65. data/test/test_support/bad_subfield_code.marc +1 -0
  66. data/test/test_support/bad_utf_byte.utf8.marc +1 -0
  67. data/test/test_support/date_resort_to_260.marc +1 -0
  68. data/test/test_support/date_type_r_missing_date2.marc +1 -0
  69. data/test/test_support/date_with_u.marc +1 -0
  70. data/test/test_support/demo_config.rb +155 -0
  71. data/test/test_support/emptyish_record.marc +1 -0
  72. data/test/test_support/escaped_character_reference.marc8.marc +1 -0
  73. data/test/test_support/george_eliot.marc +1 -0
  74. data/test/test_support/hebrew880s.marc +1 -0
  75. data/test/test_support/louis_armstrong.marc +1 -0
  76. data/test/test_support/manufacturing_consent.marc +1 -0
  77. data/test/test_support/manuscript_online_thesis.marc +1 -0
  78. data/test/test_support/microform_online_conference.marc +1 -0
  79. data/test/test_support/multi_era.marc +1 -0
  80. data/test/test_support/multi_geo.marc +1 -0
  81. data/test/test_support/musical_cage.marc +1 -0
  82. data/test/test_support/nature.marc +1 -0
  83. data/test/test_support/one-marc8.mrc +1 -0
  84. data/test/test_support/online_only.marc +1 -0
  85. data/test/test_support/packed_041a_lang.marc +1 -0
  86. data/test/test_support/test_data.utf8.json +30 -0
  87. data/test/test_support/test_data.utf8.marc.xml +2609 -0
  88. data/test/test_support/test_data.utf8.mrc +1 -0
  89. data/test/test_support/test_data.utf8.mrc.gz +0 -0
  90. data/test/test_support/the_business_ren.marc +1 -0
  91. data/test/translation_map_test.rb +225 -0
  92. data/test/translation_maps/bad_ruby.rb +8 -0
  93. data/test/translation_maps/bad_yaml.yaml +1 -0
  94. data/test/translation_maps/both_map.rb +1 -0
  95. data/test/translation_maps/both_map.yaml +1 -0
  96. data/test/translation_maps/default_literal.rb +10 -0
  97. data/test/translation_maps/default_passthrough.rb +10 -0
  98. data/test/translation_maps/marc_040a_translate_test.yaml +1 -0
  99. data/test/translation_maps/properties_map.properties +5 -0
  100. data/test/translation_maps/ruby_map.rb +10 -0
  101. data/test/translation_maps/translate_array_test.yaml +8 -0
  102. data/test/translation_maps/yaml_map.yaml +7 -0
  103. data/traject.gemspec +47 -0
  104. metadata +382 -0
@@ -0,0 +1,3 @@
1
+ module Traject
2
+ VERSION = "2.0.0"
3
+ end
@@ -0,0 +1,9 @@
1
+ require 'traject/line_writer'
2
+ require 'yaml'
3
+
4
+ class Traject::YamlWriter < Traject::LineWriter
5
+ def serialize(context)
6
+ context.output_hash.to_yaml(:indentation=>3, :line_width => 78) + "\n\n"
7
+ end
8
+ end
9
+
@@ -0,0 +1,26 @@
1
+ # Very crude basic mapping from top-level first-letter of LCC call
2
+ # number to an area name.
3
+
4
+ A: General Works
5
+ B: Philosophy, Psychology, Religion
6
+ C: Historical Sciences (Archaeology, Genealogy)
7
+ D: World History
8
+ E: History of the Americas (General)
9
+ F: History of the Americas (Local)
10
+ G: Geography, Anthropology, Recreation
11
+ H: Social Sciences
12
+ J: Political Science
13
+ K: Law
14
+ L: Education
15
+ M: Music
16
+ N: Fine Arts
17
+ P: Language & Literature
18
+ Q: Science
19
+ R: Medicine
20
+ S: Agriculture
21
+ T: Technology
22
+ U: Military Science
23
+ V: Naval Science
24
+ Z: Bibliography, Library Science, Information Resources
25
+ # W is NLM call number
26
+ W: Medicine
@@ -0,0 +1,9 @@
1
+ # attempted mapping from 007 byte 1 to format/genres
2
+
3
+ 'a': Map/Globe
4
+ 'd': Map/Globe
5
+ 'k': Image
6
+ 'q': Musical Score
7
+ 'r': Image
8
+ 'v': Video/Film
9
+ 'm': Video/Film
@@ -0,0 +1,22 @@
1
+ # First try to map leader bytes 6+7 combined, then if nothing
2
+ # try to map just leader byte 6.
3
+
4
+ # first some mappings from leader bytes 6 and 7 combined:
5
+
6
+ 'aa': Book
7
+ 'ab': Journal/Newspaper
8
+ 'am': Book
9
+ 'as': Journal/Newspaper
10
+ 'ta': Book
11
+ 'tm': Book
12
+
13
+ # Now some from just byte 6
14
+ 'c': Musical Score
15
+ 'd': Musical Score
16
+ 'e': Map/Globe
17
+ 'f': Map/Globe
18
+ 'i': Non-musical Recording
19
+ 'j': Musical Recording
20
+ 'k': Image
21
+ 'm': Software/Data
22
+ 'g': Video/Film
@@ -0,0 +1,589 @@
1
+ # Translation map for marc geographic codes constructed by `rake load_maps:marc_geographic` task
2
+ # Scraped from http://www.loc.gov/marc/geoareas/gacs_code.html at 2015-01-27 23:00:08 -0500
3
+ # Intentionally includes discontinued codes.
4
+
5
+ 'a': 'Asia'
6
+ 'a-af': 'Afghanistan'
7
+ 'a-ai': 'Armenia (Republic)'
8
+ 'a-aj': 'Azerbaijan'
9
+ 'a-ba': 'Bahrain'
10
+ 'a-bg': 'Bangladesh'
11
+ 'a-bn': 'Borneo'
12
+ 'a-br': 'Burma'
13
+ 'a-bt': 'Bhutan'
14
+ 'a-bx': 'Brunei'
15
+ 'a-cb': 'Cambodia'
16
+ 'a-cc': 'China'
17
+ 'a-cc-an': 'Anhui Sheng (China)'
18
+ 'a-cc-ch': 'Zhejiang Sheng (China)'
19
+ 'a-cc-cq': 'Chongqing (China)'
20
+ 'a-cc-fu': 'Fujian Sheng (China)'
21
+ 'a-cc-ha': 'Hainan Sheng (China)'
22
+ 'a-cc-he': 'Heilongjiang Sheng (China)'
23
+ 'a-cc-hh': 'Hubei Sheng (China)'
24
+ 'a-cc-hk': 'Hong Kong (China)'
25
+ 'a-cc-ho': 'Henan Sheng (China)'
26
+ 'a-cc-hp': 'Hebei Sheng (China)'
27
+ 'a-cc-hu': 'Hunan Sheng (China)'
28
+ 'a-cc-im': 'Inner Mongolia (China)'
29
+ 'a-cc-ka': 'Gansu Sheng (China)'
30
+ 'a-cc-kc': 'Guangxi Zhuangzu Zizhiqu (China)'
31
+ 'a-cc-ki': 'Jiangxi Sheng (China)'
32
+ 'a-cc-kn': 'Guangdong Sheng (China)'
33
+ 'a-cc-kr': 'Jilin Sheng (China)'
34
+ 'a-cc-ku': 'Jiangsu Sheng (China)'
35
+ 'a-cc-kw': 'Guizhou Sheng (China)'
36
+ 'a-cc-lp': 'Liaoning Sheng (China)'
37
+ 'a-cc-mh': 'Macau (China : Special Administrative Region)'
38
+ 'a-cc-nn': 'Ningxia Huizu Zizhiqu (China)'
39
+ 'a-cc-pe': 'Beijing (China)'
40
+ 'a-cc-sh': 'Shanxi Sheng (China)'
41
+ 'a-cc-sm': 'Shanghai (China)'
42
+ 'a-cc-sp': 'Shandong Sheng (China)'
43
+ 'a-cc-ss': 'Shaanxi Sheng (China)'
44
+ 'a-cc-su': 'Xinjiang Uygur Zizhiqu (China)'
45
+ 'a-cc-sz': 'Sichuan Sheng (China)'
46
+ 'a-cc-ti': 'Tibet (China)'
47
+ 'a-cc-tn': 'Tianjin (China)'
48
+ 'a-cc-ts': 'Qinghai Sheng (China)'
49
+ 'a-cc-yu': 'Yunnan Sheng (China)'
50
+ 'a-ccg': 'Yangtze River (China)'
51
+ 'a-cck': 'Kunlun Mountains (China and India)'
52
+ 'a-ccp': 'Bo Hai (China)'
53
+ 'a-ccs': 'Xi River (China)'
54
+ 'a-ccy': 'Yellow River (China)'
55
+ 'a-ce': 'Sri Lanka'
56
+ 'a-ch': 'Taiwan'
57
+ 'a-cy': 'Cyprus'
58
+ 'a-em': 'Timor-Leste'
59
+ 'a-gs': 'Georgia (Republic)'
60
+ 'a-hk': 'Hong Kong'
61
+ 'a-ii': 'India'
62
+ 'a-io': 'Indonesia'
63
+ 'a-iq': 'Iraq'
64
+ 'a-ir': 'Iran'
65
+ 'a-is': 'Israel'
66
+ 'a-ja': 'Japan'
67
+ 'a-jo': 'Jordan'
68
+ 'a-kg': 'Kyrgyzstan'
69
+ 'a-kn': 'Korea (North)'
70
+ 'a-ko': 'Korea (South)'
71
+ 'a-kr': 'Korea'
72
+ 'a-ku': 'Kuwait'
73
+ 'a-kz': 'Kazakhstan'
74
+ 'a-le': 'Lebanon'
75
+ 'a-ls': 'Laos'
76
+ 'a-mh': 'Macao'
77
+ 'a-mk': 'Oman'
78
+ 'a-mp': 'Mongolia'
79
+ 'a-my': 'Malaysia'
80
+ 'a-np': 'Nepal'
81
+ 'a-nw': 'New Guinea'
82
+ 'a-ok': 'Okinawa'
83
+ 'a-ph': 'Philippines'
84
+ 'a-pk': 'Pakistan'
85
+ 'a-pp': 'Papua New Guinea'
86
+ 'a-pt': 'Portuguese Timor'
87
+ 'a-qa': 'Qatar'
88
+ 'a-si': 'Singapore'
89
+ 'a-sk': 'Sikkim'
90
+ 'a-su': 'Saudi Arabia'
91
+ 'a-sy': 'Syria'
92
+ 'a-ta': 'Tajikistan'
93
+ 'a-th': 'Thailand'
94
+ 'a-tk': 'Turkmenistan'
95
+ 'a-ts': 'United Arab Emirates'
96
+ 'a-tu': 'Turkey'
97
+ 'a-uz': 'Uzbekistan'
98
+ 'a-vn': 'Viet Nam, North'
99
+ 'a-vs': 'Viet Nam, South'
100
+ 'a-vt': 'Vietnam'
101
+ 'a-ye': 'Yemen (Republic)'
102
+ 'a-ys': 'Yemen (People''s Democratic Republic)'
103
+ 'aa': 'Amur River (China and Russia)'
104
+ 'ab': 'Bengal, Bay of'
105
+ 'ac': 'Asia, Central'
106
+ 'ae': 'East Asia'
107
+ 'af': 'Thailand, Gulf of'
108
+ 'ag': 'Mekong River'
109
+ 'ah': 'Himalaya Mountains'
110
+ 'ai': 'Indochina'
111
+ 'ak': 'Caspian Sea'
112
+ 'am': 'Malaya'
113
+ 'an': 'East China Sea'
114
+ 'ao': 'South China Sea'
115
+ 'aopf': 'Paracel Islands'
116
+ 'aoxp': 'Spratly Islands'
117
+ 'ap': 'Persian Gulf'
118
+ 'ar': 'Arabian Peninsula'
119
+ 'as': 'Southeast Asia'
120
+ 'at': 'Tien Shan'
121
+ 'au': 'Arabian Sea'
122
+ 'aw': 'Middle East'
123
+ 'awba': 'West Bank'
124
+ 'awgz': 'Gaza Strip'
125
+ 'awiu': 'Israel-Syria Demilitarized Zones'
126
+ 'awiw': 'Israel-Jordan Demilitarized Zones'
127
+ 'awiy': 'Iraq-Saudi Arabia Neutral Zone'
128
+ 'ay': 'Yellow Sea'
129
+ 'az': 'South Asia'
130
+ 'b': 'Commonwealth countries'
131
+ 'c': 'Intercontinental areas (Western Hemisphere)'
132
+ 'cc': 'Caribbean Area; Caribbean Sea'
133
+ 'cl': 'Latin America'
134
+ 'cm': 'Middle America'
135
+ 'cr': 'Circumcaribbean'
136
+ 'd': 'Developing countries'
137
+ 'dd': 'Developed countries'
138
+ 'e': 'Europe'
139
+ 'e-aa': 'Albania'
140
+ 'e-an': 'Andorra'
141
+ 'e-au': 'Austria'
142
+ 'e-be': 'Belgium'
143
+ 'e-bn': 'Bosnia and Hercegovina'
144
+ 'e-bu': 'Bulgaria'
145
+ 'e-bw': 'Belarus'
146
+ 'e-ci': 'Croatia'
147
+ 'e-cs': 'Czechoslovakia'
148
+ 'e-dk': 'Denmark'
149
+ 'e-er': 'Estonia'
150
+ 'e-fi': 'Finland'
151
+ 'e-fr': 'France'
152
+ 'e-ge': 'Germany (East)'
153
+ 'e-gi': 'Gibraltar'
154
+ 'e-gr': 'Greece'
155
+ 'e-gw': 'Germany (West)'
156
+ 'e-gx': 'Germany'
157
+ 'e-hu': 'Hungary'
158
+ 'e-ic': 'Iceland'
159
+ 'e-ie': 'Ireland'
160
+ 'e-it': 'Italy'
161
+ 'e-kv': 'Kosovo'
162
+ 'e-lh': 'Liechtenstein'
163
+ 'e-li': 'Lithuania'
164
+ 'e-lu': 'Luxembourg'
165
+ 'e-lv': 'Latvia'
166
+ 'e-mc': 'Monaco'
167
+ 'e-mm': 'Malta'
168
+ 'e-mo': 'Montenegro'
169
+ 'e-mv': 'Moldova'
170
+ 'e-ne': 'Netherlands'
171
+ 'e-no': 'Norway'
172
+ 'e-pl': 'Poland'
173
+ 'e-po': 'Portugal'
174
+ 'e-rb': 'Serbia'
175
+ 'e-rm': 'Romania'
176
+ 'e-ru': 'Russia (Federation)'
177
+ 'e-sm': 'San Marino'
178
+ 'e-sp': 'Spain'
179
+ 'e-sw': 'Sweden'
180
+ 'e-sz': 'Switzerland'
181
+ 'e-uk': 'Great Britain'
182
+ 'e-uk-en': 'England'
183
+ 'e-uk-ni': 'Northern Ireland'
184
+ 'e-uk-st': 'Scotland'
185
+ 'e-uk-ui': 'Great Britain Miscellaneous Island Dependencies'
186
+ 'e-uk-wl': 'Wales'
187
+ 'e-un': 'Ukraine'
188
+ 'e-ur': 'Russia. Russian Empire. Soviet Union. Former Soviet Republics'
189
+ 'e-ur-ai': 'Armenia (Republic)'
190
+ 'e-ur-aj': 'Azerbaijan'
191
+ 'e-ur-bw': 'Belarus'
192
+ 'e-ur-er': 'Estonia'
193
+ 'e-ur-gs': 'Georgia (Republic)'
194
+ 'e-ur-kg': 'Kyrgyzstan'
195
+ 'e-ur-kz': 'Kazakhstan'
196
+ 'e-ur-li': 'Lithuania'
197
+ 'e-ur-lv': 'Latvia'
198
+ 'e-ur-mv': 'Moldova'
199
+ 'e-ur-ru': 'Russia (Federation)'
200
+ 'e-ur-ta': 'Tajikistan'
201
+ 'e-ur-tk': 'Turkmenistan'
202
+ 'e-ur-un': 'Ukraine'
203
+ 'e-ur-uz': 'Uzbekistan'
204
+ 'e-urc': 'Central Chernozem Region (Russia)'
205
+ 'e-ure': 'Siberia, Eastern (Russia)'
206
+ 'e-urf': 'Russian Far East (Russia)'
207
+ 'e-urk': 'Caucasus'
208
+ 'e-url': 'Central Region, RSFSR'
209
+ 'e-urn': 'Soviet Union, Northwestern'
210
+ 'e-uro': 'Soviet Central Asia'
211
+ 'e-urp': 'Volga River (Russia)'
212
+ 'e-urr': 'Caucasus, Northern (Russia)'
213
+ 'e-urs': 'Siberia (Russia)'
214
+ 'e-uru': 'Ural Mountains (Russia)'
215
+ 'e-urv': 'Volgo-Viatskii Region, RSFSR'
216
+ 'e-urw': 'Siberia, Western (Russia)'
217
+ 'e-vc': 'Vatican City'
218
+ 'e-xn': 'Macedonia (Republic)'
219
+ 'e-xo': 'Slovakia'
220
+ 'e-xr': 'Czech Republic'
221
+ 'e-xv': 'Slovenia'
222
+ 'e-yu': 'Serbia and Montenegro; Yugoslavia'
223
+ 'ea': 'Alps'
224
+ 'eb': 'Baltic States'
225
+ 'ec': 'Europe, Central'
226
+ 'ed': 'Balkan Peninsula'
227
+ 'ee': 'Europe, Eastern'
228
+ 'ei': 'Iberian Peninsula'
229
+ 'el': 'Benelux countries'
230
+ 'en': 'Europe, Northern'
231
+ 'eo': 'Danube River'
232
+ 'ep': 'Pyrenees'
233
+ 'er': 'Rhine River'
234
+ 'es': 'Europe, Southern'
235
+ 'et': 'Europe, East Central'
236
+ 'ev': 'Scandinavia'
237
+ 'ew': 'Europe, Western'
238
+ 'f': 'Africa'
239
+ 'f-ae': 'Algeria'
240
+ 'f-ao': 'Angola'
241
+ 'f-bd': 'Burundi'
242
+ 'f-bs': 'Botswana'
243
+ 'f-by': 'Biafra'
244
+ 'f-cd': 'Chad'
245
+ 'f-cf': 'Congo (Brazzaville)'
246
+ 'f-cg': 'Congo (Democratic Republic)'
247
+ 'f-cm': 'Cameroon'
248
+ 'f-cx': 'Central African Republic'
249
+ 'f-dm': 'Benin'
250
+ 'f-ea': 'Eritrea'
251
+ 'f-eg': 'Equatorial Guinea'
252
+ 'f-et': 'Ethiopia'
253
+ 'f-ft': 'Djibouti'
254
+ 'f-gh': 'Ghana'
255
+ 'f-gm': 'Gambia'
256
+ 'f-go': 'Gabon'
257
+ 'f-gv': 'Guinea'
258
+ 'f-if': 'Ifni'
259
+ 'f-iv': 'Côte d''Ivoire'
260
+ 'f-ke': 'Kenya'
261
+ 'f-lb': 'Liberia'
262
+ 'f-lo': 'Lesotho'
263
+ 'f-ly': 'Libya'
264
+ 'f-mg': 'Madagascar'
265
+ 'f-ml': 'Mali'
266
+ 'f-mr': 'Morocco'
267
+ 'f-mu': 'Mauritania'
268
+ 'f-mw': 'Malawi'
269
+ 'f-mz': 'Mozambique'
270
+ 'f-ng': 'Niger'
271
+ 'f-nr': 'Nigeria'
272
+ 'f-pg': 'Guinea-Bissau'
273
+ 'f-rh': 'Zimbabwe'
274
+ 'f-rw': 'Rwanda'
275
+ 'f-sa': 'South Africa'
276
+ 'f-sd': 'South Sudan'
277
+ 'f-sf': 'Sao Tome and Principe'
278
+ 'f-sg': 'Senegal'
279
+ 'f-sh': 'Spanish North Africa'
280
+ 'f-sj': 'Sudan'
281
+ 'f-sl': 'Sierra Leone'
282
+ 'f-so': 'Somalia'
283
+ 'f-sq': 'Swaziland'
284
+ 'f-ss': 'Western Sahara'
285
+ 'f-sx': 'Namibia'
286
+ 'f-tg': 'Togo'
287
+ 'f-ti': 'Tunisia'
288
+ 'f-tz': 'Tanzania'
289
+ 'f-ua': 'Egypt'
290
+ 'f-ug': 'Uganda'
291
+ 'f-uv': 'Burkina Faso'
292
+ 'f-za': 'Zambia'
293
+ 'fa': 'Atlas Mountains'
294
+ 'fb': 'Africa, Sub-Saharan'
295
+ 'fc': 'Africa, Central'
296
+ 'fd': 'Sahara'
297
+ 'fe': 'Africa, Eastern'
298
+ 'ff': 'Africa, North'
299
+ 'fg': 'Congo River'
300
+ 'fh': 'Africa, Northeast'
301
+ 'fi': 'Niger River'
302
+ 'fl': 'Nile River'
303
+ 'fn': 'Sudan (Region)'
304
+ 'fq': 'Africa, French-speaking Equatorial'
305
+ 'fr': 'Great Rift Valley'
306
+ 'fs': 'Africa, Southern'
307
+ 'fu': 'Suez Canal (Egypt)'
308
+ 'fv': 'Volta River (Ghana)'
309
+ 'fw': 'Africa, West'
310
+ 'fz': 'Zambezi River'
311
+ 'h': 'French Community'
312
+ 'i': 'Indian Ocean'
313
+ 'i-bi': 'British Indian Ocean Territory'
314
+ 'i-cq': 'Comoros'
315
+ 'i-fs': 'Terres australes et antarctiques françaises'
316
+ 'i-hm': 'Heard and McDonald Islands'
317
+ 'i-mf': 'Mauritius'
318
+ 'i-my': 'Mayotte'
319
+ 'i-re': 'Réunion'
320
+ 'i-se': 'Seychelles'
321
+ 'i-xa': 'Christmas Island (Indian Ocean)'
322
+ 'i-xb': 'Cocos (Keeling) Islands'
323
+ 'i-xc': 'Maldives'
324
+ 'i-xo': 'Socotra Island'
325
+ 'l': 'Atlantic Ocean'
326
+ 'ln': 'North Atlantic Ocean'
327
+ 'lnaz': 'Azores'
328
+ 'lnbm': 'Bermuda Islands'
329
+ 'lnca': 'Canary Islands'
330
+ 'lncv': 'Cabo Verde'
331
+ 'lnfa': 'Faroe Islands'
332
+ 'lnjn': 'Jan Mayen Island'
333
+ 'lnma': 'Madeira Islands'
334
+ 'lnsb': 'Svalbard (Norway)'
335
+ 'ls': 'South Atlantic Ocean'
336
+ 'lsai': 'Ascension Island (Atlantic Ocean)'
337
+ 'lsbv': 'Bouvet Island'
338
+ 'lsfk': 'Falkland Islands'
339
+ 'lstd': 'Tristan da Cunha'
340
+ 'lsxj': 'Saint Helena'
341
+ 'lsxs': 'South Georgia and South Sandwich Islands'
342
+ 'm': 'Intercontinental areas (Eastern Hemisphere)'
343
+ 'ma': 'Arab countries'
344
+ 'mb': 'Black Sea'
345
+ 'me': 'Eurasia'
346
+ 'mm': 'Mediterranean Region; Mediterranean Sea'
347
+ 'mr': 'Red Sea'
348
+ 'n': 'North America'
349
+ 'n-cn': 'Canada'
350
+ 'n-cn-ab': 'Alberta'
351
+ 'n-cn-bc': 'British Columbia'
352
+ 'n-cn-mb': 'Manitoba'
353
+ 'n-cn-nf': 'Newfoundland and Labrador'
354
+ 'n-cn-nk': 'New Brunswick'
355
+ 'n-cn-ns': 'Nova Scotia'
356
+ 'n-cn-nt': 'Northwest Territories'
357
+ 'n-cn-nu': 'Nunavut'
358
+ 'n-cn-on': 'Ontario'
359
+ 'n-cn-pi': 'Prince Edward Island'
360
+ 'n-cn-qu': 'Québec (Province)'
361
+ 'n-cn-sn': 'Saskatchewan'
362
+ 'n-cn-yk': 'Yukon Territory'
363
+ 'n-cnh': 'Hudson Bay'
364
+ 'n-cnm': 'Maritime Provinces'
365
+ 'n-cnp': 'Prairie Provinces'
366
+ 'n-gl': 'Greenland'
367
+ 'n-mx': 'Mexico'
368
+ 'n-us': 'United States'
369
+ 'n-us-ak': 'Alaska'
370
+ 'n-us-al': 'Alabama'
371
+ 'n-us-ar': 'Arkansas'
372
+ 'n-us-az': 'Arizona'
373
+ 'n-us-ca': 'California'
374
+ 'n-us-co': 'Colorado'
375
+ 'n-us-ct': 'Connecticut'
376
+ 'n-us-dc': 'Washington (D.C.)'
377
+ 'n-us-de': 'Delaware'
378
+ 'n-us-fl': 'Florida'
379
+ 'n-us-ga': 'Georgia'
380
+ 'n-us-hi': 'Hawaii'
381
+ 'n-us-ia': 'Iowa'
382
+ 'n-us-id': 'Idaho'
383
+ 'n-us-il': 'Illinois'
384
+ 'n-us-in': 'Indiana'
385
+ 'n-us-ks': 'Kansas'
386
+ 'n-us-ky': 'Kentucky'
387
+ 'n-us-la': 'Louisiana'
388
+ 'n-us-ma': 'Massachusetts'
389
+ 'n-us-md': 'Maryland'
390
+ 'n-us-me': 'Maine'
391
+ 'n-us-mi': 'Michigan'
392
+ 'n-us-mn': 'Minnesota'
393
+ 'n-us-mo': 'Missouri'
394
+ 'n-us-ms': 'Mississippi'
395
+ 'n-us-mt': 'Montana'
396
+ 'n-us-nb': 'Nebraska'
397
+ 'n-us-nc': 'North Carolina'
398
+ 'n-us-nd': 'North Dakota'
399
+ 'n-us-nh': 'New Hampshire'
400
+ 'n-us-nj': 'New Jersey'
401
+ 'n-us-nm': 'New Mexico'
402
+ 'n-us-nv': 'Nevada'
403
+ 'n-us-ny': 'New York'
404
+ 'n-us-oh': 'Ohio'
405
+ 'n-us-ok': 'Oklahoma'
406
+ 'n-us-or': 'Oregon'
407
+ 'n-us-pa': 'Pennsylvania'
408
+ 'n-us-ri': 'Rhode Island'
409
+ 'n-us-sc': 'South Carolina'
410
+ 'n-us-sd': 'South Dakota'
411
+ 'n-us-tn': 'Tennessee'
412
+ 'n-us-tx': 'Texas'
413
+ 'n-us-ut': 'Utah'
414
+ 'n-us-va': 'Virginia'
415
+ 'n-us-vt': 'Vermont'
416
+ 'n-us-wa': 'Washington (State)'
417
+ 'n-us-wi': 'Wisconsin'
418
+ 'n-us-wv': 'West Virginia'
419
+ 'n-us-wy': 'Wyoming'
420
+ 'n-usa': 'Appalachian Mountains'
421
+ 'n-usc': 'Middle West'
422
+ 'n-use': 'Northeastern States'
423
+ 'n-usl': 'Middle Atlantic States'
424
+ 'n-usm': 'Mississippi River'
425
+ 'n-usn': 'New England'
426
+ 'n-uso': 'Ohio River'
427
+ 'n-usp': 'West (U.S.)'
428
+ 'n-usr': 'East (U.S.)'
429
+ 'n-uss': 'Missouri River'
430
+ 'n-ust': 'Southwest, New'
431
+ 'n-usu': 'Southern States'
432
+ 'n-usw': 'Northwest (U.S.)'
433
+ 'n-xl': 'Saint Pierre and Miquelon'
434
+ 'nc': 'Central America'
435
+ 'ncbh': 'Belize'
436
+ 'nccr': 'Costa Rica'
437
+ 'nccz': 'Canal Zone'
438
+ 'nces': 'El Salvador'
439
+ 'ncgt': 'Guatemala'
440
+ 'ncho': 'Honduras'
441
+ 'ncnq': 'Nicaragua'
442
+ 'ncpn': 'Panama'
443
+ 'nl': 'Great Lakes (North America); Lake States'
444
+ 'nm': 'Mexico, Gulf of'
445
+ 'np': 'Great Plains'
446
+ 'nr': 'Rocky Mountains'
447
+ 'nw': 'West Indies'
448
+ 'nwaq': 'Antigua and Barbuda'
449
+ 'nwaw': 'Aruba'
450
+ 'nwbb': 'Barbados'
451
+ 'nwbc': 'Barbuda'
452
+ 'nwbf': 'Bahamas'
453
+ 'nwbn': 'Bonaire'
454
+ 'nwcj': 'Cayman Islands'
455
+ 'nwco': 'Curaçao'
456
+ 'nwcu': 'Cuba'
457
+ 'nwdq': 'Dominica'
458
+ 'nwdr': 'Dominican Republic'
459
+ 'nweu': 'Sint Eustatius'
460
+ 'nwga': 'Greater Antilles'
461
+ 'nwgd': 'Grenada'
462
+ 'nwgp': 'Guadeloupe'
463
+ 'nwgs': 'Grenadines'
464
+ 'nwhi': 'Hispaniola'
465
+ 'nwht': 'Haiti'
466
+ 'nwjm': 'Jamaica'
467
+ 'nwla': 'Antilles, Lesser'
468
+ 'nwli': 'Leeward Islands (West Indies)'
469
+ 'nwmj': 'Montserrat'
470
+ 'nwmq': 'Martinique'
471
+ 'nwna': 'Netherlands Antilles'
472
+ 'nwpr': 'Puerto Rico'
473
+ 'nwsb': 'Saint-Barthélemy'
474
+ 'nwsc': 'Saint-Barthélemy'
475
+ 'nwsd': 'Saba'
476
+ 'nwsn': 'Sint Maarten'
477
+ 'nwst': 'Saint-Martin'
478
+ 'nwsv': 'Swan Islands (Honduras)'
479
+ 'nwtc': 'Turks and Caicos Islands'
480
+ 'nwtr': 'Trinidad and Tobago'
481
+ 'nwuc': 'United States Miscellaneous Caribbean Islands'
482
+ 'nwvb': 'British Virgin Islands'
483
+ 'nwvi': 'Virgin Islands of the United States'
484
+ 'nwvr': 'Virgin Islands'
485
+ 'nwwi': 'Windward Islands (West Indies)'
486
+ 'nwxa': 'Anguilla'
487
+ 'nwxi': 'Saint Kitts and Nevis'
488
+ 'nwxk': 'Saint Lucia'
489
+ 'nwxm': 'Saint Vincent and the Grenadines'
490
+ 'p': 'Pacific Ocean'
491
+ 'pn': 'North Pacific Ocean'
492
+ 'po': 'Oceania'
493
+ 'poas': 'American Samoa'
494
+ 'pobp': 'Solomon Islands'
495
+ 'poci': 'Caroline Islands'
496
+ 'pocp': 'Canton and Enderbury Islands'
497
+ 'pocw': 'Cook Islands'
498
+ 'poea': 'Easter Island'
499
+ 'pofj': 'Fiji'
500
+ 'pofp': 'French Polynesia'
501
+ 'pogg': 'Galapagos Islands'
502
+ 'pogn': 'Gilbert and Ellice Islands'
503
+ 'pogu': 'Guam'
504
+ 'poji': 'Johnston Island'
505
+ 'pokb': 'Kiribati'
506
+ 'poki': 'Kermadec Islands'
507
+ 'poln': 'Line Islands'
508
+ 'pome': 'Melanesia'
509
+ 'pomi': 'Micronesia (Federated States)'
510
+ 'ponl': 'New Caledonia'
511
+ 'ponn': 'Vanuatu'
512
+ 'ponu': 'Nauru'
513
+ 'popc': 'Pitcairn Island'
514
+ 'popl': 'Palau'
515
+ 'pops': 'Polynesia'
516
+ 'pory': 'Ryukyu Islands, Southern'
517
+ 'posc': 'Santa Cruz Islands'
518
+ 'posh': 'Samoan Islands'
519
+ 'posn': 'Solomon Islands'
520
+ 'potl': 'Tokelau'
521
+ 'poto': 'Tonga'
522
+ 'pott': 'Micronesia'
523
+ 'potv': 'Tuvalu'
524
+ 'poup': 'United States Miscellaneous Pacific Islands'
525
+ 'powf': 'Wallis and Futuna Islands'
526
+ 'powk': 'Wake Island'
527
+ 'pows': 'Samoa'
528
+ 'poxd': 'Mariana Islands'
529
+ 'poxe': 'Marshall Islands'
530
+ 'poxf': 'Midway Islands'
531
+ 'poxh': 'Niue'
532
+ 'ps': 'South Pacific Ocean'
533
+ 'q': 'Cold regions'
534
+ 'r': 'Arctic Ocean; Arctic regions'
535
+ 's': 'South America'
536
+ 's-ag': 'Argentina'
537
+ 's-bl': 'Brazil'
538
+ 's-bo': 'Bolivia'
539
+ 's-ck': 'Colombia'
540
+ 's-cl': 'Chile'
541
+ 's-ec': 'Ecuador'
542
+ 's-fg': 'French Guiana'
543
+ 's-gy': 'Guyana'
544
+ 's-pe': 'Peru'
545
+ 's-py': 'Paraguay'
546
+ 's-sr': 'Suriname'
547
+ 's-uy': 'Uruguay'
548
+ 's-ve': 'Venezuela'
549
+ 'sa': 'Amazon River'
550
+ 'sn': 'Andes'
551
+ 'sp': 'Rio de la Plata (Argentina and Uruguay)'
552
+ 't': 'Antarctic Ocean; Antarctica'
553
+ 't-ay': 'Antarctica'
554
+ 'u': 'Australasia'
555
+ 'u-ac': 'Ashmore and Cartier Islands'
556
+ 'u-at': 'Australia'
557
+ 'u-at-ac': 'Australian Capital Territory'
558
+ 'u-atc': 'Central Australia'
559
+ 'u-ate': 'Eastern Australia'
560
+ 'u-atn': 'Northern Australia'
561
+ 'u-at-ne': 'New South Wales'
562
+ 'u-at-no': 'Northern Territory'
563
+ 'u-at-qn': 'Queensland'
564
+ 'u-at-sa': 'South Australia'
565
+ 'u-at-tm': 'Tasmania'
566
+ 'u-at-vi': 'Victoria'
567
+ 'u-at-we': 'Western Australia'
568
+ 'u-cs': 'Coral Sea Islands'
569
+ 'u-nz': 'New Zealand'
570
+ 'v': 'Communist countries'
571
+ 'w': 'Tropics'
572
+ 'x': 'Earth'
573
+ 'xa': 'Eastern Hemisphere'
574
+ 'xb': 'Northern Hemisphere'
575
+ 'xc': 'Southern Hemisphere'
576
+ 'xd': 'Western Hemisphere'
577
+ 'zd': 'Deep space'
578
+ 'zju': 'Jupiter'
579
+ 'zma': 'Mars'
580
+ 'zme': 'Mercury'
581
+ 'zmo': 'Moon'
582
+ 'zne': 'Neptune'
583
+ 'zo': 'Outer space'
584
+ 'zpl': 'Pluto'
585
+ 'zs': 'Solar system'
586
+ 'zsa': 'Saturn'
587
+ 'zsu': 'Sun'
588
+ 'zur': 'Uranus'
589
+ 'zve': 'Venus'