Skip to content

antononcube/Raku-DSL-Entity-Geographics

Repository files navigation

DSL::Entity::Geographics

MacOS Linux Win64 https://raku.land/zef:antononcube/DSL::Entity::Geographics License: Artistic-2.0

Raku grammar classes for geographic entities (names.)

This package is closely related, but independent of Data::Geographics, [AAp5].

Installation

From Zef ecosystem:

zef install DSL::Entity::Geographics

From GitHub:

zef install https://github.com/antononcube/Raku-DSL-Entity-Geographics.git

Examples

Basic entity name retrieval

Here we show how the entity ID is retrieved using an adjective:

use DSL::Entity::Geographics;

ToGeographicEntityCode('Brazilian');
# "Brazil"

Identifiers

The known cities are have identifier in the form: <country>.<province>.<city>. The names in the identifiers have underscore characters ("_") instead of spaces. For example:

United_States.Nevada.Las_Vegas

Remark: Both packages "DSL::Entity::Geographics" and "Data::Geographics" have the same identifiers.

City specs

There is a dedicated function for parsing city names together with a state- or country name:

entity-city-and-state-name('Chicago, IL')
# United_States.Illinois.Chicago

If the adverb :exhaustive (or just :ex) is used then all matches for city name in country (like USA) are returned:

.say for entity-city-and-state-name('Atlanta United States'):ex
# United_States.Missouri.Atlanta
# United_States.Kansas.Atlanta
# United_States.Indiana.Atlanta
# United_States.Michigan.Atlanta
# United_States.Texas.Atlanta
# United_States.Illinois.Atlanta
# United_States.Louisiana.Atlanta
# United_States.Georgia.Atlanta
# United_States.Wisconsin.Atlanta
# United_States.Nebraska.Atlanta

A city name without a specified country or state is considered a generic city name if found in the gazeteer database:

say entity-city-and-state-name('Miama');
#ERROR: Possible misspelling of 'miami' as 'miama'.
# CITYNAME.Miami

Remark: Misspellings are recognized and allowed:

Grammar parsing

One of the main motivations for this package is to be able to use known country names and related adjectives as grammar tokens. For example, in packages like "DSL::English::FoodPreparationWorkflows", [AAp4].

Here are few grammar parsing examples:

use DSL::Entity::Geographics::Grammar;

my $pCOMMAND = DSL::Entity::Geographics::Grammar.new;

$pCOMMAND.set-resources(DSL::Entity::Geographics::resource-access-object());

say $pCOMMAND.parse('Argentina', rule => 'geographic-entity-command');
#ERROR: Possible misspelling of 'argentine' as 'argentina'.
# 「Argentina」
#  entity-country-adjective => 「Argentina」
#   0 => 「Argentina」
#    word-value => 「Argentina」
say $pCOMMAND.parse('United States of America', rule => 'geographic-entity-command');
# 「United States of America」
#  entity-country-name => 「United States of America」
#   0 => 「United States of America」
#    word-value => 「United」
#    word-value => 「States」
#    word-value => 「of」
#    word-value => 「America」

Again, misspellings are recognized and allowed:

say $pCOMMAND.parse('Indianapolia, Indiana', rule => 'entity-city-and-state-name');
#ERROR: Possible misspelling of 'indianapolis' as 'indianapolia'.
# 「Indianapolia, Indiana」
#  entity-city-name => 「Indianapolia」
#   0 => 「Indianapolia」
#    word-value => 「Indianapolia」
#  entity-state-name => 「Indiana」
#   0 => 「Indiana」
#    word-value => 「Indiana」

References

[AAp1] Anton Antonov, DSL::Shared Raku package, (2020), GitHub/antononcube.

[AAp2] Anton Antonov, DSL::Entity::Jobs Raku package, (2021), GitHub/antononcube.

[AAp3] Anton Antonov, DSL::Entity::Foods Raku package, (2021), GitHub/antononcube.

[AAp4] Anton Antonov, DSL::English::FoodPreparationWorkflows Raku package, (2021), GitHub/antononcube.

[AAp5] Anton Antonov, Data::Geographics Raku package, (2024), GitHub/antononcube.