You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 16:48:11