新闻聚合APP开发:如何从新闻网站提取文章关联地理位置?
从新闻文章中提取关联地理位置的可行方案
1. 基于文本内容的地名实体识别(NER)
直接分析抓取到的新闻正文或标题,无需用户权限:
- 使用开源NER工具:比如spaCy的预训练模型,可精准识别GPE(地缘政治实体,含国家、州、城市等),示例代码:
import spacy nlp = spacy.load("en_core_web_sm") doc = nlp("USA Today reports a new policy launched in Massachusetts") for ent in doc.ents: if ent.label_ == "GPE": print(ent.text) # 输出 Massachusetts - 针对新闻场景优化:可选用Hugging Face中经新闻语料微调的BERT类NER模型,进一步提升地名识别准确率。
2. 解析新闻页面的结构化元数据
多数正规新闻站会在页面中嵌入地理位置相关的结构化数据:
- 提取Meta标签:查找如
<meta property="article:location" content="Massachusetts">这类字段,直接通过网页抓取模块解析HTML获取。 - 解析JSON-LD数据:页面头部的
application/ld+json脚本通常包含新闻的结构化信息,示例解析逻辑:import json from bs4 import BeautifulSoup # 假设soup为抓取页面解析后的BeautifulSoup对象 script_tags = soup.find_all("script", type="application/ld+json") for script in script_tags: try: data = json.loads(script.string) data = data[0] if isinstance(data, list) else data if "location" in data: print(data["location"].get("name")) # 提取地点名称 except: continue
3. 从新闻URL提取隐含地理标识
部分新闻网站的URL会包含地理信息,可通过正则匹配提取:
import re url = "https://www.usatoday.com/massachusetts/news/local/2024/05/20/..." match = re.search(r"/([a-zA-Z-]+)/news/", url) if match: location = match.group(1).replace("-", " ").title() print(location) # 输出 Massachusetts
4. 替代Geo-Location API的方案
若需将识别到的地名转换为经纬度,可改用服务器端调用地理编码API:在APP客户端识别出地名后,传至你的后端服务器,由服务器调用无需用户权限的地理编码服务(如OpenStreetMap Nominatim),再将结果返回给APP,规避客户端权限问题。
内容的提问来源于stack exchange,提问作者DIXIT GOGOI
相关产品推荐
相关产品推荐

