在开发中,我们经常需要从海量文本中提取结构化信息。放弃复杂的手写规则吧,直接上大语言模型(LLM)API才是现代程序员的解法。
下面展示一个实战脚本,用Python调用大模型API,实现从Excel读取数据、清洗文本到批量提取POI地名的全自动化流程。代码即正义,效率至上。
核心工具栈
Python 3
Libraries:
pandas
,requests
,tqdm
外部依赖: 一个大语言模型服务商的API Key(本文以百度文心为例)
代码
整个流程分为三步:获取API凭证、调用模型、主逻辑编排。以下是完整代码:
from tqdm import tqdm
import requests
import json
import re
import pandas as pd
# --- 配置区 ---
# 替换为你的API Key和Secret Key
API_KEY = '你的api_key'
SECRET_KEY = '你的secret_key'
def get_access_token():
"""获取 API Access Token."""
url = 'https://aip.baidubce.com/oauth/2.0/token'
params = {'grant_type': 'client_credentials', 'client_id': API_KEY, 'client_secret': SECRET_KEY}
return requests.post(url, params=params).json().get('access_token')
def get_llm_result(prompt, access_token):
"""封装大模型API调用逻辑."""
url = f"https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/completions_pro?access_token={access_token}"
payload = json.dumps({'messages': [{'role': 'user', 'content': prompt}]})
headers = {'Content-Type': 'application/json'}
response = requests.post(url, headers=headers, data=payload)
response.raise_for_status() # 失败则抛出异常
return response.json().get('result', 'API_CALL_FAILED')
def main():
"""主执行流程."""
# 1. 数据加载与预处理 (可按需运行)
# df = pd.read_excel('景德镇.xlsx')
# df['cleaned_text'] = df.iloc[:, 2].astype(str).apply(lambda text: ''.join(re.findall(r'[\u4e00-\u9fa5]+', text)))
# df.to_excel('景德镇_清洗后.xlsx', index=False)
# print("文本预处理完成。")
# 2. 核心处理逻辑
try:
df = pd.read_excel('景德镇_清洗后.xlsx')
except FileNotFoundError:
print("错误:未找到'景德镇_清洗后.xlsx'。请先执行预处理步骤。")
return
print(f'数据加载成功,共 {df.shape[0]} 条记录。')
token = get_access_token() # 获取一次Token,复用
ai_results = []
# 3. 循环调用API,tqdm提供进度可视化
for text in tqdm(df.iloc[:, 16].astype(str), desc='AI处理进度'):
# --- Prompt Engineering: 决定输出质量的关键 ---
# 指令必须清晰、明确,严格限定输出格式。
prompt = (
f"文本内容是:{text}"
"帮我抽取其中的地名,需要是具体的poi的地名,只需要返回地名,不需要多余的描述,"
"不需要多余的文字,如果没有地名输出'无'即可。再说一遍,只返回地名或'无'。"
)
result = get_llm_result(prompt, token)
ai_results.append(result)
# 4. 保存结果
df['address'] = ai_results
output_file = '景德镇_结果.xlsx'
df.to_excel(output_file, index=False)
print(f'处理完成!结果已保存至 {output_file}')
if __name__ == '__main__':
main()
核心思想:Prompt Engineering
这个脚本的真正威力在于prompt
的设计。我们没有编写复杂的解析逻辑,而是通过精确的自然语言指令,让大模型成为我们的定制化信息提取器。指令越明确(例如“只返回地名或'无'”),输出结果就越稳定,越容易进行程序化处理。
这套模式可以轻松泛化到各种批量文本处理任务中,比如情感分析、关键词提取、文本分类等。别再写冗长的规则了,试试用Prompt驱动你的下一个自动化任务吧。
评论区