技术需求:统计5个PDF文件中作者合作对的出现次数
解决思路与实现步骤
1. 提取PDF中的有效作者信息
- 批量从5个PDF中提取每篇文档的作者列表,重点处理格式差异(如全称/缩写、不同分隔符),只保留给定700位作者列表内的人员
- 工具选型:用
pdfplumber或PyPDF2提取可编辑PDF文本;若为扫描件,搭配pytesseract做OCR识别 - 关键操作:将提取到的作者名与有效列表做精确匹配,排除无关人员,同时去重同一文档内的重复作者
- 工具选型:用
2. 生成作者合作组合
- 针对每篇PDF的有效作者列表,生成所有2人及以上的无序合作组合(如A&B与B&A视为同一组合)
- 实现方式:用Python的
itertools.combinations函数,遍历从2到当前文档作者数的所有长度,生成对应组合后排序,保证组合一致性
- 实现方式:用Python的
3. 统计组合出现次数
- 用
collections.Counter统计每个组合在所有PDF中的出现次数,注意同一篇PDF内的同一组合仅计数一次
代码示例
import pdfplumber from itertools import combinations from collections import Counter import re # 加载700位作者列表(假设为每行一个作者的txt文件) with open('authors_list.txt', 'r', encoding='utf-8') as f: valid_authors = set(line.strip() for line in f if line.strip()) # 初始化组合计数器 combination_counter = Counter() # 遍历目标PDF文件 pdf_files = ['doc1.pdf', 'doc2.pdf', 'doc3.pdf', 'doc4.pdf', 'doc5.pdf'] for pdf_path in pdf_files: with pdfplumber.open(pdf_path) as pdf: # 提取首页文本(作者通常位于首页,可按需调整页码范围) first_page = pdf.pages[0] text = first_page.extract_text() # 匹配作者区域(需根据实际PDF格式调整正则规则) author_match = re.search(r'(Authors?:|Author?:)\s*(.*?)(?=\n[A-Z]|$)', text, re.DOTALL) if author_match: authors_text = author_match.group(2) # 分割作者,兼容逗号、换行、and等分隔符 extracted_authors = re.split(r',|\n|and|&', authors_text) # 清洗并筛选有效作者 current_authors = [] for auth in extracted_authors: auth_clean = auth.strip().strip('.') if auth_clean in valid_authors: current_authors.append(auth_clean) # 去重同一文档内的重复作者 current_authors = list(set(current_authors)) # 生成所有2人及以上的合作组合 for combo_len in range(2, len(current_authors) + 1): for combo in combinations(current_authors, combo_len): # 排序后转元组,确保无序组合的一致性 sorted_combo = tuple(sorted(combo)) combination_counter[sorted_combo] += 1 # 按出现次数降序输出结果 for combo, count in sorted(combination_counter.items(), key=lambda x: x[1], reverse=True): print(f"组合: {', '.join(combo)} | 出现次数: {count}")
注意事项
- 作者名映射:若PDF中存在作者缩写(如J. Doe对应John Doe),需提前建立缩写与全称的映射表,避免匹配遗漏
- 扫描件处理:扫描生成的PDF需先通过OCR转成可编辑文本,可结合
pytesseract和PIL实现 - 性能优化:无需预生成700位作者的所有可能组合,仅处理PDF中实际出现的有效作者组合,减少不必要计算
内容的提问来源于stack exchange,提问作者Ann
相关产品推荐
相关产品推荐

