Как извлечь страны из текста?

Я использую Python 3 (у меня также установлен Python 2) и хочу извлечь страны или города из короткого текста. Например, text = "I live in Spain" или text = "United States (New York), United Kingdom (London)".

Ответ для стран:

  1. Испания
  2. [США, Соединенное Королевство]

Я пытался установить geography, но не могу запустить pip install geography. Я получаю эту ошибку:

Сбор географии Не удалось найти версию, удовлетворяющую требованию географии (из версий: ) Не найдено подходящего распределения для географии

Похоже, geography работает только с Python 2.

У меня тоже есть geopandas, но я не знаю, как извлечь нужную инфу из текста с помощью геопанд.


person Markus    schedule 04.02.2018    source источник
comment
@smci Пакет называется geograpy, а не geography.   -  person MaxiMouse    schedule 20.04.2020
comment
@MaxiMouse: хорошо, тогда это должно быть закрыто как опечатка? Кроме того, вы можете добавить это как ответ.   -  person smci    schedule 21.04.2020
comment
@smci Да, это, вероятно, следует закрыть как опечатку. Я не думаю, что это может быть ответом.   -  person MaxiMouse    schedule 21.04.2020
comment
@MaxiMouse: поразмыслив, вопрос задает более широкий вопрос Как извлечь страны из текста?, не привязан строго к какому-либо пакету и имеет хорошие ответы, поэтому мы должны оставить его в силе.   -  person smci    schedule 21.04.2020


Ответы (2)


вы можете использовать pycountry для своей задачи (он также работает с python 3):

pip install pycountry

import pycountry
text = "United States (New York), United Kingdom (London)"
for country in pycountry.countries:
    if country.name in text:
        print(country.name)
person matyas    schedule 04.02.2018
comment
Прохладно. Но с аббревиатурами не получится, верно? Знаете ли вы что-то еще для распознавания аббревиатур и передачи их в названия стран? - person Markus; 04.02.2018
comment
Например, BVI -> British Virgin Islands - person Markus; 04.02.2018
comment
каждый объект страны имеет атрибуты alpha_2 и alpha_3, которые являются аббревиатурами страны. (Например: Germany.alpha_2 = DE, Germany.alpha_3 = DEU) - person matyas; 04.02.2018
comment
Я надеюсь, что это может покрыть ваш вариант использования. См. также: pypi.python.org/pypi/pycountry - person matyas; 04.02.2018
comment
Британские Виргинские острова находятся в pycountry, но их код alpha_3='VGB', alpha_2='VG' @Markus - person Todd; 20.04.2020
comment
«Корея» также не признается. - person Steven Van Dorpe; 17.08.2020

Существует более новая версия этой библиотеки, которая поддерживает python3, с именем geograpy3.

pip install geograpy3

Он позволяет извлекать географические названия из URL-адреса или текста и добавлять контекст к этим именам, например различать страну, регион или город.

Пример:

import geograpy
import nltk
nltk.download('punkt')
nltk.download('averaged_perceptron_tagger')
nltk.download('maxent_ne_chunker')
nltk.download('words')
url = 'http://www.bbc.com/news/world-europe-26919928'
places = geograpy.get_place_context(url=url)

Более подробную информацию можно найти по этой ссылке:

person Jendoubi Zaid    schedule 20.04.2020
comment
Я много раз видел этот точный текст. География позволяет извлекать географические названия из URL-адреса или текста, но все примеры веб-сайтов/форумов/проектов github показывают только то, как использовать Географию с URL-адресом, и я не встречал пример с обычная строка (это также не сработает, если мы просто заменим URL-адрес в примере кода обычным текстом) - person Mihaela; 13.05.2021