factbook-readers 1.0.1 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. checksums.yaml +5 -5
  2. data/Manifest.txt +3 -25
  3. data/README.md +11 -69
  4. data/Rakefile +3 -3
  5. data/lib/factbook-readers.rb +5 -40
  6. data/lib/factbook-readers/convert.rb +37 -0
  7. data/lib/factbook-readers/counter.rb +7 -9
  8. data/lib/factbook-readers/page.rb +41 -61
  9. data/lib/factbook-readers/page_info.rb +15 -3
  10. data/lib/factbook-readers/version.rb +2 -2
  11. data/test/helper.rb +3 -0
  12. data/test/test_counter.rb +9 -6
  13. data/test/test_download.rb +27 -0
  14. data/test/test_fields.rb +44 -27
  15. data/test/test_json.rb +4 -4
  16. data/test/test_page.rb +8 -8
  17. data/test/test_version.rb +15 -0
  18. metadata +11 -48
  19. data/data/categories.csv +0 -164
  20. data/data/codes.csv +0 -262
  21. data/data/codesxref.csv +0 -280
  22. data/data/comparisons.csv +0 -75
  23. data/lib/factbook-readers/builder.rb +0 -187
  24. data/lib/factbook-readers/builder_item.rb +0 -201
  25. data/lib/factbook-readers/builder_json.rb +0 -68
  26. data/lib/factbook-readers/codes.rb +0 -121
  27. data/lib/factbook-readers/comparisons.rb +0 -49
  28. data/lib/factbook-readers/normalize.rb +0 -42
  29. data/lib/factbook-readers/reader_json.rb +0 -50
  30. data/lib/factbook-readers/sanitizer.rb +0 -351
  31. data/lib/factbook-readers/sect.rb +0 -28
  32. data/lib/factbook-readers/subsect.rb +0 -17
  33. data/lib/factbook-readers/table.rb +0 -51
  34. data/lib/factbook-readers/utils.rb +0 -47
  35. data/lib/factbook-readers/utils_info.rb +0 -128
  36. data/test/test_builder.rb +0 -30
  37. data/test/test_codes.rb +0 -72
  38. data/test/test_comparisons.rb +0 -16
  39. data/test/test_item_builder.rb +0 -97
  40. data/test/test_json_builder.rb +0 -23
  41. data/test/test_normalize.rb +0 -21
  42. data/test/test_sanitizer.rb +0 -36
  43. data/test/test_sanitizer_regex.rb +0 -87
@@ -1,11 +1,23 @@
1
1
 
2
2
  module Factbook
3
3
 
4
+ ## todo/check: change to PageMeta/ProfileMeta
5
+ ## or Page/ProfileMetaInfo or MetaInfo or Meta or such - why? why not?
6
+
7
+
8
+ ### was before 2021 (when using html page scrapping)
9
+ # PageInfo = Struct.new( :country_code,
10
+ # :country_name,
11
+ # :country_affiliation,
12
+ # :region_code,
13
+ # :region_name,
14
+ # :last_updated )
15
+
4
16
  PageInfo = Struct.new( :country_code,
5
17
  :country_name,
6
- :country_affiliation,
7
- :region_code,
8
18
  :region_name,
9
- :last_updated )
19
+ :published, ## note: published is NOT before updated (like an alias for created) BUT is often older/later than updated - why!?
20
+ :updated )
21
+
10
22
 
11
23
  end # module Factbook
@@ -3,8 +3,8 @@ module Factbook
3
3
  module Module
4
4
  module Readers
5
5
  MAJOR = 1
6
- MINOR = 0
7
- PATCH = 1
6
+ MINOR = 1
7
+ PATCH = 0
8
8
  VERSION = [MAJOR,MINOR,PATCH].join('.')
9
9
 
10
10
  def self.version
data/test/helper.rb CHANGED
@@ -1,3 +1,6 @@
1
+ $LOAD_PATH.unshift( "../factbook-codes/lib" )
2
+ $LOAD_PATH.unshift( "../factbook-fields/lib" )
3
+
1
4
  ## minitest setup
2
5
  require 'minitest/autorun'
3
6
 
data/test/test_counter.rb CHANGED
@@ -8,19 +8,22 @@ require 'helper'
8
8
  class TestCounter < MiniTest::Test
9
9
 
10
10
  def read_test_page( code )
11
- html = File.read( "#{Factbook.root}/test/data/src/#{code}.html" )
12
- page = Factbook::Page.new( code, html: html )
11
+ path = "#{Factbook::Module::Readers.root}/../testdata/json/#{code}.json"
12
+ page = Factbook::Page.read_json( path )
13
+ page
13
14
  end
14
15
 
16
+
15
17
  def test_counter
16
- c = Factbook::Counter.new
18
+ counter = Factbook::Counter.new
17
19
 
18
- codes = %w(au be)
20
+ codes = ['au', 'be']
19
21
  codes.each do |code|
20
- c.count( read_test_page( code )) # use builtin test page (do NOT fetch via internet)
22
+ page = read_test_page( code )
23
+ counter.count( code, page ) # use builtin test page (do NOT fetch via internet)
21
24
  end
22
25
 
23
- h = c.data
26
+ h = counter.data
24
27
  pp h
25
28
 
26
29
  assert true ## assume everything ok if we get here
@@ -0,0 +1,27 @@
1
+ ###
2
+ # to run use
3
+ # ruby -I ./lib -I ./test test/test_download.rb
4
+
5
+
6
+ require 'helper'
7
+
8
+
9
+ class TestDownload < MiniTest::Test
10
+
11
+ def test_pages
12
+
13
+ ['au','be'].each do |code|
14
+
15
+ page = Factbook::Page.download( code, cache: true )
16
+
17
+ File.open( "./tmp/#{code}.debug.json", 'w:utf-8' ) do |f|
18
+ f.write JSON.pretty_generate( page.to_h )
19
+ end
20
+ end
21
+
22
+ assert true ## assume everthing ok
23
+ end
24
+
25
+
26
+ end # class TestDownload
27
+
data/test/test_fields.rb CHANGED
@@ -8,43 +8,60 @@ require 'helper'
8
8
  class TestFields < MiniTest::Test
9
9
 
10
10
  def read_test_page( code )
11
- html = File.read( "#{Factbook.root}/test/data/src/#{code}.html" )
12
- page = Factbook::Page.new( code, html: html )
11
+ path = "#{Factbook::Module::Readers.root}/../testdata/json/#{code}.json"
12
+ page = Factbook::Page.read_json( path )
13
13
  page
14
14
  end
15
15
 
16
- def test_fields_full
17
- ## Factbook::Page.new( 'au', fields: 'full' )
18
- page = read_test_page( 'au' ) # use builtin test page (do NOT fetch via internet)
19
16
 
20
- assert_equal '-1.1% of GDP (2015 est.)', page['Economy']['Budget surplus (+) or deficit (-)']['text']
21
- assert_equal '0.7%', page['Economy']['Labor force - by occupation']['agriculture']['text']
17
+ def test_fields_au
18
+ page = read_test_page( 'au' ) # note: use builtin test page (do NOT fetch via internet)
22
19
 
23
- assert_equal 'Enns, Krems, Linz, Vienna (Danube)', page['Transportation']['Ports and terminals']['river port(s)']['text']
24
- end
25
-
26
- def fix_xxx_test_fields_full_w_header
27
- page = Factbook::OldPage.new( 'au', header: true, fields: 'full' )
28
- page.html = read_test_page( 'au' ) # use builtin test page (do NOT fetch via internet)
29
-
30
- assert_equal 'au', page['Header']['code']
31
- assert_equal "factbook/#{Factbook::VERSION}", page['Header']['generator']
20
+ assert_equal '-0.7% (of GDP) (2017 est.)',
21
+ page['Economy']['Budget surplus (+) or deficit (-)']['text']
22
+ assert_equal '0.7%',
23
+ page['Economy']['Labor force - by occupation']['agriculture']['text']
32
24
 
33
- assert_equal '-2.4% of GDP (2014 est.)', page['Economy']['Budget surplus (+) or deficit (-)']['text']
34
- assert_equal '5.5%', page['Economy']['Labor force - by occupation']['agriculture']
35
-
36
- assert_equal 'Enns, Krems, Linz, Vienna (Danube)', page['Transportation']['Ports and terminals']['river port(s)']
25
+ assert_equal 'Enns, Krems, Linz, Vienna (Danube)',
26
+ page['Transportation']['Ports and terminals']['river port(s)']['text']
37
27
  end
38
28
 
39
- def fix_xxx_test_fields_std
40
- page = Factbook::OldPage.new( 'au' )
41
- page.html = read_test_page( 'au' ) # use builtin test page (do NOT fetch via internet)
42
-
43
- assert_equal '-2.4% of GDP (2014 est.)', page['econ']['budget_surplus_or_deficit']['text']
44
- assert_equal '5.5%', page['econ']['labor_force_by_occupation']['agriculture']
45
29
 
46
- assert_equal 'Enns, Krems, Linz, Vienna (Danube)', page['trans']['ports_and_terminals']['river_ports']
30
+ def strip_tags( text )
31
+ ## simple quick and dirty helper
32
+ text = text.gsub( '<p>', '' )
33
+ text = text.gsub( '</p>', '' )
34
+ text = text.gsub( '<strong>', '' )
35
+ text = text.gsub( '</strong>', '' )
36
+ text
47
37
  end
48
38
 
39
+ def test_fields_br
40
+ ## check fields from readme
41
+ page = read_test_page( 'br' ) # note: use builtin test page (do NOT fetch via internet)
42
+
43
+ assert strip_tags( page['Introduction']['Background']['text'] ).start_with?(
44
+ 'Following more than three centuries' )
45
+ assert_equal '8,515,770 sq km',
46
+ page['Geography']['Area']['total']['text']
47
+ assert_equal '8,358,140 sq km',
48
+ page['Geography']['Area']['land']['text']
49
+ assert_equal '157,630 sq km',
50
+ page['Geography']['Area']['water']['text']
51
+ assert strip_tags( page['Geography']['Area']['note'] ).start_with?(
52
+ 'note: includes Arquipelago de Fernando de Noronha, Atol das Rocas,' )
53
+ assert_equal 'slightly smaller than the US',
54
+ page['Geography']['Area - comparative']['text']
55
+ assert_equal 'mostly tropical, but temperate in south',
56
+ page['Geography']['Climate']['text']
57
+ assert page['Geography']['Terrain']['text'].start_with?(
58
+ 'mostly flat to rolling lowlands in north;' )
59
+ assert_equal 'Atlantic Ocean 0 m',
60
+ page['Geography']['Elevation']['lowest point']['text']
61
+ assert_equal 'Pico da Neblina 2,994 m',
62
+ page['Geography']['Elevation']['highest point']['text']
63
+ assert page['Geography']['Natural resources']['text'].start_with?(
64
+ 'alumina, bauxite, beryllium, gold, iron ore, manganese, nickel,' )
65
+ end
49
66
 
50
67
  end # class TestFields
data/test/test_json.rb CHANGED
@@ -15,7 +15,7 @@ class TestJson < MiniTest::Test
15
15
  codes = [ 'au',
16
16
  'ag',
17
17
  'be',
18
- #'br',
18
+ 'br',
19
19
  #'mx',
20
20
  #'ls',
21
21
  #'vt',
@@ -25,10 +25,10 @@ class TestJson < MiniTest::Test
25
25
 
26
26
  codes.each do |code|
27
27
 
28
- html = File.read( "#{Factbook.root}/test/data/src/#{code}.html" )
29
- page = Factbook::Page.new( code, html: html )
28
+ path = "#{Factbook::Module::Readers.root}/../testdata/json/#{code}.json"
29
+ page = Factbook::Page.read_json( path )
30
30
 
31
- h = page.data
31
+ h = page.to_h
32
32
  pp h
33
33
 
34
34
  ### save to json
data/test/test_page.rb CHANGED
@@ -9,11 +9,11 @@ require 'helper'
9
9
  class TestPage < MiniTest::Test
10
10
 
11
11
 
12
- def test_sects
12
+ def test_pages
13
13
  pages = [
14
- [ 'au', 10 ],
15
- [ 'be', 10 ],
16
- # [ 'br', 10 ],
14
+ [ 'au', 11 ],
15
+ [ 'be', 11 ],
16
+ [ 'br', 10 ],
17
17
  # [ 'ee', 10 ],
18
18
  # [ 'mx', 10 ],
19
19
  # [ 'xx', 10 ],
@@ -23,12 +23,12 @@ class TestPage < MiniTest::Test
23
23
 
24
24
  pages.each do |rec|
25
25
  code = rec[0]
26
- sects_size = rec[1]
26
+ size = rec[1]
27
27
 
28
- html = File.read( "#{Factbook.root}/test/data/src/#{code}.html" )
29
- page = Factbook::Page.new( code, html: html )
28
+ path = "#{Factbook::Module::Readers.root}/../testdata/json/#{code}.json"
29
+ page = Factbook::Page.read_json( path )
30
30
 
31
- assert_equal sects_size, page.sects.size
31
+ assert_equal size, page.size
32
32
  end
33
33
  end
34
34
 
@@ -0,0 +1,15 @@
1
+ ###
2
+ # to run use
3
+ # ruby -I ./lib -I ./test test/test_version.rb
4
+
5
+ require 'helper'
6
+
7
+
8
+ class TestVersion < MiniTest::Test
9
+
10
+ def test_version
11
+ pp Factbook::Module::Readers.root
12
+ pp Factbook::Module::Readers.banner
13
+ end
14
+
15
+ end # class TestVersion
metadata CHANGED
@@ -1,17 +1,17 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: factbook-readers
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gerald Bauer
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-11-27 00:00:00.000000000 Z
11
+ date: 2021-03-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: logutils
14
+ name: factbook-codes
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - ">="
@@ -25,7 +25,7 @@ dependencies:
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
- name: csvreader
28
+ name: factbook-fields
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - ">="
@@ -52,20 +52,6 @@ dependencies:
52
52
  - - ">="
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
- - !ruby/object:Gem::Dependency
56
- name: nokogiri
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - ">="
60
- - !ruby/object:Gem::Version
61
- version: '0'
62
- type: :runtime
63
- prerelease: false
64
- version_requirements: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - ">="
67
- - !ruby/object:Gem::Version
68
- version: '0'
69
55
  - !ruby/object:Gem::Dependency
70
56
  name: rdoc
71
57
  requirement: !ruby/object:Gem::Requirement
@@ -114,47 +100,25 @@ files:
114
100
  - Manifest.txt
115
101
  - README.md
116
102
  - Rakefile
117
- - data/categories.csv
118
- - data/codes.csv
119
- - data/codesxref.csv
120
- - data/comparisons.csv
121
103
  - lib/factbook-readers.rb
122
- - lib/factbook-readers/builder.rb
123
- - lib/factbook-readers/builder_item.rb
124
- - lib/factbook-readers/builder_json.rb
125
- - lib/factbook-readers/codes.rb
126
- - lib/factbook-readers/comparisons.rb
104
+ - lib/factbook-readers/convert.rb
127
105
  - lib/factbook-readers/counter.rb
128
- - lib/factbook-readers/normalize.rb
129
106
  - lib/factbook-readers/page.rb
130
107
  - lib/factbook-readers/page_info.rb
131
- - lib/factbook-readers/reader_json.rb
132
- - lib/factbook-readers/sanitizer.rb
133
- - lib/factbook-readers/sect.rb
134
- - lib/factbook-readers/subsect.rb
135
- - lib/factbook-readers/table.rb
136
- - lib/factbook-readers/utils.rb
137
- - lib/factbook-readers/utils_info.rb
138
108
  - lib/factbook-readers/version.rb
139
109
  - lib/factbook/readers.rb
140
110
  - test/helper.rb
141
- - test/test_builder.rb
142
- - test/test_codes.rb
143
- - test/test_comparisons.rb
144
111
  - test/test_counter.rb
112
+ - test/test_download.rb
145
113
  - test/test_fields.rb
146
- - test/test_item_builder.rb
147
114
  - test/test_json.rb
148
- - test/test_json_builder.rb
149
- - test/test_normalize.rb
150
115
  - test/test_page.rb
151
- - test/test_sanitizer.rb
152
- - test/test_sanitizer_regex.rb
116
+ - test/test_version.rb
153
117
  homepage: https://github.com/factbook/factbook
154
118
  licenses:
155
119
  - Public Domain
156
120
  metadata: {}
157
- post_install_message:
121
+ post_install_message:
158
122
  rdoc_options:
159
123
  - "--main"
160
124
  - README.md
@@ -171,9 +135,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
171
135
  - !ruby/object:Gem::Version
172
136
  version: '0'
173
137
  requirements: []
174
- rubyforge_project:
175
- rubygems_version: 2.5.2
176
- signing_key:
138
+ rubygems_version: 3.1.4
139
+ signing_key:
177
140
  specification_version: 4
178
141
  summary: factbook-readers - turn thee world factbook country profile pages into open
179
142
  structured data e.g JSON
data/data/categories.csv DELETED
@@ -1,164 +0,0 @@
1
- Num,Category,Name,Notes
2
- ,Introduction,Background,
3
- ,Geography,Location,
4
- ,Geography,Geographic coordinates,
5
- ,Geography,Map references,
6
- ,Geography,Area,
7
- ,Geography,Area - comparative,
8
- ,Geography,Land boundaries,
9
- ,Geography,Coastline,
10
- ,Geography,Maritime claims,
11
- ,Geography,Climate,
12
- ,Geography,Terrain,
13
- ,Geography,Elevation extremes,
14
- ,Geography,Natural resources,
15
- ,Geography,Land use,
16
- ,Geography,Irrigated land,
17
- ,Geography,Total renewable water resources,
18
- ,Geography,Freshwater withdrawal (domestic/industrial/agricultural),
19
- ,Geography,Natural hazards,
20
- ,Geography,Environment - current issues,
21
- ,Geography,Environment - international agreements,
22
- ,Geography,Geography - note,
23
- ,People and Society,Nationality,
24
- ,People and Society,Ethnic groups,
25
- ,People and Society,Languages,
26
- ,People and Society,Religions,
27
- ,People and Society,Population,
28
- ,People and Society,Age structure,
29
- ,People and Society,Dependency ratios,
30
- ,People and Society,Median age,
31
- ,People and Society,Population growth rate,
32
- ,People and Society,Birth rate,
33
- ,People and Society,Death rate,
34
- ,People and Society,Net migration rate,
35
- ,People and Society,Urbanization,
36
- ,People and Society,Major urban areas - population,
37
- ,People and Society,Sex ratio,
38
- ,People and Society,Infant mortality rate,
39
- ,People and Society,Life expectancy at birth,
40
- ,People and Society,Total fertility rate,
41
- ,People and Society,Contraceptive prevalence rate,
42
- ,People and Society,Health expenditures,
43
- ,People and Society,Physicians density,
44
- ,People and Society,Hospital bed density,
45
- ,People and Society,Drinking water source,
46
- ,People and Society,Sanitation facility access,
47
- ,People and Society,HIV/AIDS - adult prevalence rate,
48
- ,People and Society,HIV/AIDS - people living with HIV/AIDS,
49
- ,People and Society,HIV/AIDS - deaths,
50
- ,People and Society,Obesity - adult prevalence rate,
51
- ,People and Society,Education expenditures,
52
- ,People and Society,School life expectancy (primary to tertiary education),
53
- ,People and Society,"Unemployment, youth ages 15-24",
54
- ,Government,Country name,
55
- ,Government,Government type,
56
- ,Government,Capital,
57
- ,Government,Administrative divisions,
58
- ,Government,Independence,
59
- ,Government,National holiday,
60
- ,Government,Constitution,
61
- ,Government,Legal system,
62
- ,Government,International law organization participation,
63
- ,Government,Suffrage,
64
- ,Government,Executive branch,
65
- ,Government,Legislative branch,
66
- ,Government,Judicial branch,
67
- ,Government,Political parties and leaders,
68
- ,Government,Political pressure groups and leaders,
69
- ,Government,International organization participation,
70
- ,Government,Diplomatic representation in the US,
71
- ,Government,Diplomatic representation from the US,
72
- ,Government,Flag description,
73
- ,Government,National symbol(s),
74
- ,Government,National anthem,
75
- ,Economy,Economy - overview,
76
- ,Economy,GDP (purchasing power parity),
77
- ,Economy,GDP (official exchange rate),
78
- ,Economy,GDP - real growth rate,
79
- ,Economy,GDP - per capita (PPP),
80
- ,Economy,Gross national saving,
81
- ,Economy,"GDP - composition, by end use",
82
- ,Economy,"GDP - composition, by sector of origin",
83
- ,Economy,Agriculture - products,
84
- ,Economy,Industries,
85
- ,Economy,Industrial production growth rate,
86
- ,Economy,Labor force,
87
- ,Economy,Labor force - by occupation,
88
- ,Economy,Unemployment rate,
89
- ,Economy,Population below poverty line,
90
- ,Economy,Household income or consumption by percentage share,
91
- ,Economy,Distribution of family income - Gini index,
92
- ,Economy,Budget,
93
- ,Economy,Taxes and other revenues,
94
- ,Economy,Budget surplus (+) or deficit (-),
95
- ,Economy,Public debt,
96
- ,Economy,Fiscal year,
97
- ,Economy,Inflation rate (consumer prices),
98
- ,Economy,Commercial bank prime lending rate,
99
- ,Economy,Stock of narrow money,
100
- ,Economy,Stock of broad money,
101
- ,Economy,Stock of domestic credit,
102
- ,Economy,Market value of publicly traded shares,
103
- ,Economy,Current account balance,
104
- ,Economy,Exports,
105
- ,Economy,Exports - commodities,
106
- ,Economy,Exports - partners,
107
- ,Economy,Imports,
108
- ,Economy,Imports - commodities,
109
- ,Economy,Imports - partners,
110
- ,Economy,Reserves of foreign exchange and gold,
111
- ,Economy,Debt - external,
112
- ,Economy,Stock of direct foreign investment - at home,
113
- ,Economy,Stock of direct foreign investment - abroad,
114
- ,Economy,Exchange rates,
115
- ,Energy,Electricity - production,
116
- ,Energy,Electricity - consumption,
117
- ,Energy,Electricity - exports,
118
- ,Energy,Electricity - imports,
119
- ,Energy,Electricity - installed generating capacity,
120
- ,Energy,Electricity - from fossil fuels,
121
- ,Energy,Electricity - from nuclear fuels,
122
- ,Energy,Electricity - from hydroelectric plants,
123
- ,Energy,Electricity - from other renewable sources,
124
- ,Energy,Crude oil - production,
125
- ,Energy,Crude oil - exports,
126
- ,Energy,Crude oil - imports,
127
- ,Energy,Crude oil - proved reserves,
128
- ,Energy,Refined petroleum products - production,
129
- ,Energy,Refined petroleum products - consumption,
130
- ,Energy,Refined petroleum products - exports,
131
- ,Energy,Refined petroleum products - imports,
132
- ,Energy,Natural gas - production,
133
- ,Energy,Natural gas - consumption,
134
- ,Energy,Natural gas - exports,
135
- ,Energy,Natural gas - imports,
136
- ,Energy,Natural gas - proved reserves,
137
- ,Energy,Carbon dioxide emissions from consumption of energy,
138
- ,Communications,Telephones - fixed lines,
139
- ,Communications,Telephones - mobile cellular,
140
- ,Communications,Telephone system,
141
- ,Communications,Broadcast media,
142
- ,Communications,Radio broadcast stations,
143
- ,Communications,Television broadcast stations,
144
- ,Communications,Internet country code,
145
- ,Communications,Internet users,
146
- ,Transportation,Airports,
147
- ,Transportation,Airports - with paved runways,
148
- ,Transportation,Airports - with unpaved runways,
149
- ,Transportation,Heliports,
150
- ,Transportation,Pipelines,
151
- ,Transportation,Railways,
152
- ,Transportation,Roadways,
153
- ,Transportation,Waterways,
154
- ,Transportation,Merchant marine,
155
- ,Transportation,Ports and terminals,
156
- ,Military,Military branches,
157
- ,Military,Military service age and obligation,
158
- ,Military,Manpower available for military service,
159
- ,Military,Manpower fit for military service,
160
- ,Military,Manpower reaching militarily significant age annually,
161
- ,Military,Military expenditures,
162
- ,Transnational Issues,Disputes - international,
163
- ,Transnational Issues,Refugees and internally displaced persons,
164
- ,Transnational Issues,Illicit drugs,