如何使用Google Natural Language API提取文本邮箱?含名片场景Python方案
嘿,刚好这两个问题可以串起来解决,我来给你详细说清楚——先讲基础的Google NLP API提取邮箱的逻辑,再给你一套结合Vision API识别名片的完整Python实现方案。
如何使用Google Natural Processing API从文本中提取邮箱地址?
Google Natural Language API的**实体识别(Entity Recognition)**功能直接支持识别EMAIL类型的实体,这是最可靠的方法(比自己写正则适配各种复杂场景省心多了)。
核心步骤:
- 先在Google Cloud控制台启用Natural Language API,配置好认证(比如设置
GOOGLE_APPLICATION_CREDENTIALS环境变量指向你的服务账号密钥JSON文件)。 - 调用API的实体分析接口,传入待处理的文本。
- 遍历返回的实体结果,筛选出类型为
EMAIL的条目,对应的name字段就是邮箱地址。
基于Python结合Google Vision API识别名片 + 提取邮箱的完整方案
如果你已经用Vision API识别了名片得到文本,那直接跳转到提取邮箱的步骤就行;如果还没做名片识别,咱们一步到位:
第一步:准备工作
- 安装依赖包:
pip install google-cloud-vision google-cloud-language
- 在Google Cloud控制台启用Vision API和Natural Language API,下载服务账号密钥JSON文件,设置环境变量:
- Linux/macOS:
export GOOGLE_APPLICATION_CREDENTIALS="/path/to/your/service-account-key.json" - Windows(命令提示符):
set GOOGLE_APPLICATION_CREDENTIALS=C:\path\to\your\service-account-key.json
- Linux/macOS:
第二步:Python代码实现
from google.cloud import vision_v1 as vision from google.cloud import language_v1 def extract_text_from_business_card(image_path): """用Google Vision API识别名片中的文本""" client = vision.ImageAnnotatorClient() with open(image_path, "rb") as image_file: content = image_file.read() image = vision.Image(content=content) # 用专门的文档文本识别,比通用OCR更适配名片排版 response = client.document_text_detection(image=image) document = response.full_text_annotation extracted_text = document.text if response.error.message: raise Exception( f"Vision API调用出错: {response.error.message}" ) return extracted_text def extract_email_from_text(text): """用Google Natural Language API从文本中提取邮箱""" client = language_v1.LanguageServiceClient() document = language_v1.Document( content=text, type_=language_v1.Document.Type.PLAIN_TEXT ) # 调用实体分析接口 response = client.analyze_entities(request={"document": document}) emails = [] # 遍历实体,筛选邮箱类型 for entity in response.entities: if entity.type_ == language_v1.Entity.Type.EMAIL: emails.append(entity.name) return emails # 主流程 if __name__ == "__main__": # 替换成你的名片图片路径 card_image_path = "business_card.jpg" try: # 1. 识别名片文本 card_text = extract_text_from_business_card(card_image_path) print("名片识别到的文本:\n", card_text) # 2. 提取邮箱 email_list = extract_email_from_text(card_text) if email_list: print("\n提取到的邮箱地址:") for email in email_list: print("-", email) else: print("\n未识别到邮箱地址") except Exception as e: print("出错了:", str(e))
一些实用提示
- 如果是中文名片,可以给Vision API加
language_hints=["zh"]参数,提升识别准确率。 - 如果文本里有多个邮箱,API会全部识别出来并返回列表。
- 记得检查Google Cloud账号的配额,避免因调用次数超限导致失败。
内容的提问来源于stack exchange,提问作者x86-64
相关产品推荐
相关产品推荐

