如何用Python将PDF词汇列表转为可导入Google Sheets的三列表格
词汇PDF转三列CSV解决方案
问题描述
作为教师,需要将包含词汇、音标和对应数字的PDF转换为vocab、API(音标)、number三列的CSV文件,方便直接粘贴到Google Sheets。PDF的文本结构为:
词汇+音标行
对应数字行
(交替重复)
示例PDF文本:
do your best duː jɔː best 33, 81 do your hair/make-up duː jɔː heə/ ˈmeɪkʌp 81 ...
原代码尝试提取PDF文本并保存为CSV,但生成空白文件,且未处理三列结构。
原代码问题分析
- 仅将每行文本作为单列写入CSV,未处理PDF的交替行结构,无法生成三列数据
- 未对词汇和音标行进行拆分,无法分离出vocab和API列
- 若
extract_text未正确提取PDF内容,也会导致空白CSV(需确保PDF可被文本提取)
修正后的代码
import os import csv import re from pdfminer.high_level import extract_text base_path = r"C:\Users\PC\OneDrive\Desktop\New folder" pdf_file = os.path.join(base_path, "vocab.pdf") csv_file = os.path.join(base_path, "vocab.csv") # 提取PDF文本并过滤空行 text = extract_text(pdf_file) lines = [line.strip() for line in text.splitlines() if line.strip()] # 定义正则:匹配词汇部分(英文短语)和音标部分(IPA) vocab_pattern = re.compile(r'([a-zA-Z\'\/\s]+)\s+([^\s].*)') with open(csv_file, "w", newline="", encoding="utf-8") as f: writer = csv.writer(f) # 写入表头 writer.writerow(["vocab", "API", "number"]) # 每两行一组处理:词汇音标行 + 数字行 for i in range(0, len(lines), 2): if i + 1 >= len(lines): break # 防止最后一行无对应数字行 vocab_line = lines[i] number_line = lines[i+1] # 拆分词汇和音标 match = vocab_pattern.match(vocab_line) if match: vocab = match.group(1).strip() api = match.group(2).strip() # 写入三列数据 writer.writerow([vocab, api, number_line]) print(f"Done! CSV文件已生成:{csv_file}")
代码说明
- 文本提取与过滤:提取PDF文本后,过滤掉空行,确保只处理有效内容
- 正则拆分:通过正则表达式准确分离英文词汇短语和IPA音标,适配带空格、撇号、斜杠的词汇
- 分组处理:按每两行一组的逻辑,将词汇音标行和数字行合并为一行三列数据
- CSV写入:写入表头和处理后的三列数据,生成的CSV可直接复制粘贴到Google Sheets
内容的提问来源于stack exchange,提问作者Hưng Phạm Đăng
相关产品推荐
相关产品推荐

