【问题标题】:How to extract countries from a text?如何从文本中提取国家?
【发布时间】:2026-02-11 19:55:01
【问题描述】:

我使用 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,但我不知道如何使用 geopandas 从文本中提取所需信息。

【问题讨论】:

  • @smci 这个包叫geograpy,而不是geography
  • @MaxiMouse:好的,那么这应该作为错字关闭吗?此外,您可以将其添加为答案。
  • @smci 是的,它可能应该作为拼写错误关闭。我不认为这可能是一个答案。
  • @MaxiMouse:经过反思,这个问题提出了更广泛的问题“如何从文本中提取国家/地区?”,没有严格绑定到任何包,并且有很好的答案,所以我们应该让它站起来。

标签: python python-3.x nltk geography


【解决方案1】:

你可以使用 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)

【讨论】:

  • 酷。但它不适用于缩写,对吧?你知道一些额外的东西来识别缩写并将它们传递给国家名称吗?
  • 例如BVI -> British Virgin Islands
  • 每个国家对象都有属性 alpha_2 和 alpha_3,它们是国家的缩写。 (例如:Germany.alpha_2 = DE,Germany.alpha_3 = DEU)
  • 我希望这可以涵盖您的用例,另请参阅:pypi.python.org/pypi/pycountry
  • 英属维尔京群岛在pycountry,但它的代码是alpha_3='VGB', alpha_2='VG'@Markus
【解决方案2】:

这个库有一个更新的版本,它支持名为 geograpy3

的 python3
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)

您可以在this link:下找到更多详细信息

【讨论】:

  • 我已经多次看到这个确切的文本“Geograpy 允许您从 URL 或文本中提取地名”,但所有网站/论坛/github 项目示例仅显示如何将 Geograpy 与 url 和我没有遇到过带有常规字符串的示例(如果我们只是将示例代码中的 url 替换为常规文本,它也不起作用)
  • @MihaelaGrigore places = geograpy.get_place_context(text="my text from Germany")