如何使用Python从文本文件中提取指定学术引用内容?
解决Python提取学术引用的问题
嘿,你的原始代码没法处理文本里不同格式的引用(比如有的是作者 (年份),有的是(作者 年份)),所以我们改用正则表达式来精准匹配这些引用格式,这是最靠谱的方式。
修改后的完整代码
import re # 使用with语句自动管理文件,比直接open更安全规范 with open("filename.txt", "r", encoding="utf-8") as f: text = f.read() # 定义正则表达式,匹配两种常见的学术引用格式: # 1. 作者在前,后跟(年份),比如 "Astrid et al. (1980)" # 2. 整个引用在括号里,比如 "(Dilbert et al. 1990)" pattern = r'(?:([A-Z][a-z]+(?:,?\s+(?:et al\.|[A-Z][a-z]+(?:\s+&\s+[A-Z][a-z]+)?))+)\s*\((\d{4})\)|\(([A-Z][a-z]+(?:,?\s+(?:et al\.|[A-Z][a-z]+(?:\s+&\s+[A-Z][a-z]+)?))+)\s+(\d{4})\))' # 找到所有匹配的结果 matches = re.findall(pattern, text) # 处理匹配结果,合并不同分组的内容 citations = [] for match in matches: # 第一种格式的作者和年份在match[0]和match[1] if match[0]: citations.append(f"{match[0]} {match[1]}") # 第二种格式的作者和年份在match[2]和match[3] else: citations.append(f"{match[2]} {match[3]}") # 输出提取到的引用 print("提取到的学术引用:") for cite in citations: print(cite)
代码说明
- with语句:自动帮你关闭文件,避免忘记
close()导致的资源泄漏问题 - 正则表达式:专门针对文本里的两种引用格式设计,能匹配带
et al.、&连接的多作者格式,以及四位数字的年份 - 结果处理:因为两种格式的匹配结果在不同的正则分组里,所以需要判断并合并成你要的
作者 年份格式
运行结果
运行后会输出:
提取到的学术引用: Astrid et al. 1980 Bertrand & Calbert 1985 Dilbert et al. 1990 Egbert, Fluff & Gilbert 2000
完全符合你的目标提取内容!
内容的提问来源于stack exchange,提问作者humblefool_9
相关产品推荐
相关产品推荐

