Skip to main content

PERDIDO Geoparser python library

Project description

Perdido Geoparser Python library

PyPI PyPI - License PyPI - Python Version


To install the latest stable version, you can use:

pip install --upgrade perdido

Quick start


Binder Open In Colab


from perdido.geoparser import Geoparser

Run geoparser

text = "J'ai rendez-vous proche de la place Bellecour, de la place des Célestins, au sud de la fontaine des Jacobins et près du pont Bonaparte."
geoparser = Geoparser()
doc = geoparser(text)

Some parameters can be set when initializing the Geoparser object:

  • version: Standard (default), Encyclopedie
  • pos_tagger: spacy (default), stanza, and treetagger

Get tokens

  • Access token attributes (text, lemma and UPOS part-of-speech tag):
for token in doc:
    print(f'{token.text}\tlemma: {token.lemma}\tpos: {token.pos}')
  • Get the IOB format:
for token in doc:
  • Get a TSV-IOB format:
for token in doc:

Print the XML-TEI output


Print the XML-TEI output with XML syntax highlighting

from display_xml import XML
XML(doc.tei, style='lovelace')

Print the GeoJSON output


Get the list of named entities

for entity in doc.named_entities:
    print(f'entity: {entity.text}\ttag: {entity.tag}')
    if entity.tag == 'place':
        for t in entity.toponym_candidates:
            print(f' latitude: {}\tlongitude: {t.lng}\tsource {t.source}')

Get the list of nested named entities

for nested_entity in doc.nested_named_entities:
    print(f'entity: {nested_entity.text}\ttag: {nested_entity.tag}')
    if nested_entity.tag == 'place':
        for t in nested_entity.toponym_candidates:
            print(f' latitude: {}\tlongitude: {t.lng}\tsource {t.source}')

Get the list of spatial relations

for sp_relation in doc.sp_relations:
    print(f'spatial relation: {sp_relation.text}\ttag: {sp_relation.tag}')

Shows named entities and nested named entities using the displacy library from spaCy

displacy.render(doc.to_spacy_doc(), style="ent", jupyter=True)
displacy.render(doc.to_spacy_doc(), style="span", jupyter=True)

Display the map (using folium library)


Saving results



Binder Open In Colab


from perdido.geocoder import Geocoder

Geocode a single place name

geocoder = Geocoder()
doc = geocoder('Lyon')

Some parameters can be set when initializing the Geocoder object:

  • sources:
  • max_rows:
  • country_code:
  • bbox:

Geocode a list of place names

geocoder = Geocoder()
doc = geocoder(['Lyon', 'la place des Célestins', 'la fontaine des Jacobins'])

Get the geojson result


Get the list of toponym candidates

for t in doc.toponyms: 
    print(f'lat: {}\tlng: {t.lng}\tsource {t.source}\tsourceName {t.source_name}')

Get the toponym candidates as a GeoDataframe


Perdido Geoparser REST APIs

Example: call REST API in Python

import requests

url = ''
service = 'geoparsing'
data = {'content': 'Je visite la ville de Lyon, Annecy et le Mont-Blanc.'}
parameters = {'api_key': 'demo'}

r =, params=parameters, json=data)



Cite this work

Moncla, L. and Gaio, M. (2023). Perdido: Python library for geoparsing and geocoding French texts. In proceedings of the First International Workshop on Geographic Information Extraction from Texts (GeoExT'23), ECIR Conference, Dublin, Ireland.


Perdido is an active project still under developpement.

This work was partially supported by the following projects:

Project details

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

perdido-0.1.50.tar.gz (61.3 MB view hashes)

Uploaded Source

Built Distribution

perdido-0.1.50-py3-none-any.whl (98.6 MB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page