You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用spaCy从地址数据中提取城市、国家实体并统计其出现次数

从地址文本提取城市、国家实体并统计频次的解决方案

原代码存在的问题

  • 依赖维基百科在线接口做实体分类,网络不稳定时会直接报错,同时接口响应速度慢,歧义匹配率高,不适用于批量地址处理
  • 缺失文本预处理、实体清洗逻辑,拼写差异、无效字符会导致同一实体被重复计数
  • 没有实现频次统计的相关逻辑

环境依赖安装

运行前先执行以下命令安装所需依赖:

pip install spacy pycountry
python -m spacy download en_core_web_lg

优化后可运行代码

import spacy
import pycountry
from collections import Counter

# 加载spaCy大模型
nlp = spacy.load('en_core_web_lg')

# 读取地址文件,替换为你本地的文件路径
with open("C:/Users/johns/Desktop/NewFolder/address1.txt", "r", encoding="utf-8", errors="ignore") as f:
    text = f.read()

# 提取所有GPE实体
gpe_entities = [ent.text.strip() for ent in nlp(text).ents if ent.label_ == "GPE"]

# 本地匹配国家实体,不需要联网
countries = []
cities = []
# 提前加载所有国家名称到集合,提升匹配速度
country_names = {country.name.lower() for country in pycountry.countries}
for ent in gpe_entities:
    if ent.lower() in country_names:
        countries.append(ent)
    else:
        cities.append(ent)

# 统计出现频次
country_counts = Counter(countries)
city_counts = Counter(cities)

# 打印结果
print("国家出现频次:")
for country, cnt in country_counts.most_common():
    print(f"{country}: {cnt}次")

print("\n城市/地区出现频次:")
for city, cnt in city_counts.most_common():
    print(f"{city}: {cnt}次")

效果说明

针对你提供的地址示例,运行后会正确识别出:

  • 国家:Egypt、India、Pakistan等,统计对应出现次数
  • 城市:GIZA、New Delhi、Islamabad、Hyderabad等,统计对应出现次数
    如果需要进一步提升识别准确率,可以自定义补充地名词典到spaCy的实体规则里,适配特殊拼写的地名。

内容的提问来源于stack exchange,提问作者Sherlock

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.13 16:48:03