Skip to content

Repository files navigation

Literature Evidence Miner

这是一个本地 Python 文献证据整理项目。当前版本是 A 版:只处理手动导出的文献记录、摘要和你已经合法保存到本地的 txt 全文,不做自动登录、不做验证码处理、不抓取受限全文。

第一版目标

A 版优先实现一个可运行、可复核的本地流程:

  1. 读取手动导出的 ScienceDirect / Web of Science / googlescholar.pro / scholar.lanfanshu.cn 检索结果。
  2. 去重并整理为统一文献表。
  3. 检查摘要和 data/fulltext/txt/ 中的用户保存全文。
  4. 使用全文关键词规则筛选:例如 4 个关键词中至少 3 个关键词在全文 txt 中各出现不少于 3 次。
  5. 后续基于通过全文关键词规则的文献再做 AbleSci 分区、SCI 1区/2区筛选、关键词命中统计、证据段落摘取和 Markdown 报告。

严格边界

第一版不自动登录 ScienceDirect / Web of Science,不自动 CSTCloud 登录,不调用外部 LLM API,不批量下载 PDF。Playwright 只允许用于渲染公开的 googlescholar.pro 搜索结果页,不用于登录、验证码、机构认证或受限全文访问。

本项目不会绕过验证码,不会保存 CSTCloud、ScienceDirect、Web of Science 的账号密码,不会破解付费墙,也不会自动访问受限全文。ScienceDirect / Web of Science 第一版只读取你手动导出的结果,或你手动保存到 data/fulltext/txt/ 的合法全文。

如果无法合法获取全文,系统只处理标题、摘要、关键词和用户已保存的 txt。最终输出只做中文概括、必要短证据句、原文定位和 DOI/链接,不大段复制受版权保护的论文全文。

Python 环境

推荐 Python 3.10 或更高版本:

python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt

如果要使用 googlescholar.pro 的公开搜索页渲染模式,还需要安装 Chromium:

python -m pip install playwright
python -m playwright install chromium

当前依赖不包含 LangExtract、Streamlit 或向量数据库。

运行模式

配置位于:

config/query_config.yaml
run_mode: sample
  • run_mode: sample 表示当前使用测试样例。
  • run_mode: real 表示准备运行真实检索数据。

真实运行前必须移走 data/input/manual_exports/sample_manual_export.csv 和测试全文 data/fulltext/txt/D000004.txt,否则 sample 文献会混入真实结果。

填写关键词

编辑:

data/input/keywords.txt

每行一个关键词或关键句。以 # 开头的行会被忽略。

示例:

land degradation
ecological restoration
policy effect

关键词过滤规则

配置位于:

config/query_config.yaml

核心配置:

keyword_filter:
  match_mode: at_least_k_required
  total_keywords: 4
  min_required_keywords: 3
  verification_scope: fulltext_required
  strict_fulltext_required: true
  min_hits_per_keyword: 3
  case_sensitive: false
  allow_plural_variants: true
  allow_hyphen_space_variants: true
  keep_not_verifiable_for_review: true

含义:

  • match_mode: all_required:每个关键词都必须达到最低全文命中次数。
  • match_mode: at_least_k_required:N 个关键词中至少 K 个关键词达到最低全文命中次数。
  • min_required_keywords: 3:当前推荐规则是 4 个关键词中至少 3 个通过。
  • strict_fulltext_required: true:只有用户保存的 txt、OA HTML 提取 txt、OA PDF 提取 txt 可以算全文验证;摘要和 snippet 只能辅助展示,不能算通过。
  • min_hits_per_keyword: 3:通过的关键词在全文中至少出现 3 次。

如果没有全文 txt,系统不能声称全文通过,只会进入 fulltext_pending_review.csv。当前推荐配置是:4 个关键词中至少 3 个关键词在全文中各出现不少于 3 次。

关键词匹配规则

第一版采用稳健规则匹配,不使用复杂 NLP:

  • 默认大小写不敏感。
  • 多词短语按短语匹配。
  • 连字符和空格兼容,例如 land-use 可匹配 land usepolicy-driven 可匹配 policy driven
  • 使用英文词边界,避免把短词误匹配到长词中。
  • 支持简单英文复数兼容,例如 policy / policiesstudy / studies,常规名词单复数。
  • 不自动扩展同义词;如果需要同义词,请把同义表达作为关键词或后续规则补充。

手动导出文件

请把手动导出的 CSV、RIS、BibTeX 或简单 HTML/TXT 放入:

data/input/manual_exports/

当前最小实现优先支持 CSV。CSV 常见字段包括:

source,title,authors,year,journal,doi,url,abstract,keywords

自动检索 googlescholar.pro / scholar.lanfanshu.cn

A 版可以对公开 scholar-like 页面做候选文献检索。目前只支持:

googlescholar.pro
scholar.lanfanshu.cn

不会自动登录 ScienceDirect / Web of Science,不处理 CSTCloud,不绕过验证码,不访问受限全文,也不下载受限 PDF。

scholar.lanfanshu.cn 默认使用 requests + BeautifulSoupgooglescholar.pro 如果搜索页需要 JavaScript 渲染,可以设置 fetch_mode: playwright,系统只打开公开搜索结果页、等待渲染并读取 HTML;如果页面出现验证码、登录或异常提示,脚本会记录失败原因并停止,不会尝试绕过。

  1. data/input/keywords.txt 中填写关键词或关键句,每行一个。
  2. config/query_config.yaml 中启用:
search:
  enable_public_scholar_search: true
  sources:
    googlescholar_pro: true
    lanfanshu: true
    sciencedirect: false
    webofscience: false
  max_pages_per_source: 2
  max_results_per_source: 30
  request_delay_seconds_min: 5
  request_delay_seconds_max: 10
  fetch_mode: playwright
  query_mode: broad_then_strict

max_pages_per_source 控制每个站点最多请求多少页。请保持低频请求,不要高频刷新。

fetch_mode 可选:

  • requests:只用 requests + BeautifulSoup
  • playwright:用 Chromium 渲染公开搜索结果页。
  • auto:先用 requests,如果页面疑似需要 JavaScript 或解析不到结果,再用 Playwright 重试。

query_mode: broad_then_strict 会先构造所有关键词共同出现的 strict query,例如:

"land degradation" "ecological restoration" "policy effect"

然后构造关键词两两组合的 broad queries。检索阶段允许宽召回,因为最终仍由本地全文关键词规则过滤确认。

运行:

python scripts/13_search_public_scholars.py

输出:

data/raw/search_results/googlescholar_pro_raw.csv
data/raw/search_results/lanfanshu_raw.csv
data/interim/search_results_raw.csv

如果自动检索失败,查看:

logs/failures.csv

然后退回手动导出模式:把检索结果 CSV/RIS/BibTeX/HTML/TXT 放入 data/input/manual_exports/,再运行 pipeline。脚本不会绕过验证码;如果页面要求人工验证,请停止自动检索,改用手动导出。

本地全文 txt

如果你已经合法获取某篇文章全文,可手动保存为 txt 到:

data/fulltext/txt/

文件名优先使用文献去重后的 doc_id,例如:

data/fulltext/txt/D000004.txt

也可以使用 DOI 或标题的安全文件名,后续脚本会尝试匹配。

元数据补全与开放全文验证

当前真实数据阶段增加了 4 个脚本:

python scripts/14_enrich_metadata.py
python scripts/15_resolve_fulltext_links.py
python scripts/16_fetch_open_fulltext.py
python scripts/17_verify_fulltext_keywords.py

它们只使用 Crossref/OpenAlex 等公开元数据接口,以及公开可访问的 OA HTML/PDF 链接。不会自动登录 ScienceDirect / Web of Science,不处理 CSTCloud,不绕过验证码,不破解付费墙,不下载受限 PDF。

关键配置:

keyword_filter:
  strict_fulltext_required: true
  min_hits_per_keyword: 3
  verification_scope: fulltext_required

fulltext:
  enable_metadata_enrichment: true
  enable_crossref: true
  enable_openalex: true
  enable_open_access_fetch: true

match_mode: at_least_k_requiredmin_required_keywords: 3min_hits_per_keyword: 3 时,4 个关键词中至少 3 个需要在全文 txt 中各出现不少于 3 次,文献才会进入 data/interim/fulltext_matched_keywords_papers.csv。摘要只能作为辅助信息,不能算作全文验证通过。

当前推荐使用:

keyword_filter:
  match_mode: at_least_k_required
  total_keywords: 4
  min_required_keywords: 3
  min_hits_per_keyword: 3

Strict keyword-group 本地设置 UI

当前严格概念组规则位于:

config/keyword_groups.yaml

默认不要直接改正式配置。先通过 draft 配置调试:

config/keyword_groups.draft.yaml

本地 UI 可运行:

streamlit run app/strict_config_ui.py

保存前 UI 会显示 diff;保存 draft 后可运行 strict validation 和 regression test。只有 validation 与 regression 都通过时,UI 才允许把 draft 提升为正式配置。

无 UI 环境可使用 CLI fallback:

python scripts/107_edit_strict_config_cli.py --show
python scripts/107_edit_strict_config_cli.py --set-min-groups 3 --set-min-hits 2 --validate
python scripts/107_edit_strict_config_cli.py --promote

安全边界:min_required_groups 不能低于 3,min_hits_per_group 不能低于 2,policygeospatial 必须保留 core-term requirement,D000031/D000032/D000035 必须保留,D000012/D000033 不能进入 eligible。

data/interim/fulltext_matched_keywords_papers.csv 是当前推荐的通过文件。为了兼容旧 pipeline,系统也会同步写出 data/interim/fulltext_all_keywords_papers.csv,但这个旧文件名现在也使用 at_least_k_required 规则,不再表示“全部关键词必须通过”。

开放全文抓取采用保守策略:只抓明确开放域名或直接 PDF;如果页面出现登录、机构访问、付费墙、人机验证等提示,会标记为 login_requiredfull_text_unavailable。A 版会保存公开 PDF 状态,但 PDF 文本解析可能进入 pdf_saved_text_extraction_pending,后续可单独做 PDF 解析增强。

新 pipeline 顺序

当前 A 版顺序为:

python scripts/13_search_public_scholars.py  # 如果 search.enable_public_scholar_search=true,由 10_run_pipeline.py 自动先运行
python scripts/02_deduplicate_results.py
python scripts/14_enrich_metadata.py
python scripts/21_resolve_journal_names_before_ablesci.py
python scripts/18_filter_candidate_quality.py
python scripts/15_resolve_fulltext_links.py
python scripts/16_fetch_open_fulltext.py
python scripts/17_verify_fulltext_keywords.py
python scripts/03_query_journal_quartile.py
python scripts/19_prepare_ablesci_manual_check.py
python scripts/04_filter_eligible_papers.py
python scripts/07_count_keyword_hits.py
python scripts/08_extract_relevant_passages.py
python scripts/09_generate_markdown.py

也可以运行:

python scripts/10_run_pipeline.py

关键词过滤输出文件

data/interim/keyword_presence_matrix.csv
data/interim/all_keywords_filter.csv
data/interim/all_keywords_papers.csv

keyword_presence_matrix.csv 逐文献逐关键词记录是否出现、命中次数、首次位置和出现区域。

all_keywords_filter.csv 逐文献记录总关键词数、匹配数、缺失关键词、是否通过、是否全文验证和过滤状态。

fulltext_matched_keywords_papers.csv 是当前全文关键词规则通过文件。all_keywords_papers.csv 是早期 available-text 规则的兼容输出,不作为当前严格全文筛选的主输入。

候选文献质量过滤

scripts/21_resolve_journal_names_before_ablesci.py 会先用 DOI、Crossref、OpenAlex 和现有元数据尽量补全标准期刊名与 ISSN,输出:

data/interim/journal_names_resolved.csv

如果期刊名仍为空或仍带 ,后续不会拿它去查 AbleSci。

scripts/18_filter_candidate_quality.py 在期刊名补全之后运行,用于优先保留 SCI 1/2 区筛选真正需要的期刊论文候选。

分类规则:

  • journal_article:publisher、OpenAlex type、Crossref type 等元数据明确显示为 journal article。
  • possible_journal_article:正式期刊名非空,且没有 arXiv、preprint、conference、proceedings、workshop、symposium、thesis、dissertation、book chapter 等非期刊线索。
  • preprint:journal、title、url、source 中包含 arxivarXiv preprintpreprintbioRxivmedRxivSSRN 等线索。
  • conference:journal、title、source 中包含 conferenceproceedingsworkshopsymposiumJoint European ConferenceInternational ConferenceACMIEEE ConferenceCOLINGACL FindingsFindings of the AssociationEMNLP Findings 等线索。
  • thesis:title、source 或 ProQuest dissertation URL 中包含 thesis/dissertation 线索。
  • book_chapter:元数据中包含 book chapter 等线索。
  • unknown:缺少足够证据判断为期刊论文。

默认只有 journal_articlepossible_journal_article 进入:

data/interim/journal_article_candidates.csv

preprint、会议、学位论文、图书章节和未知类型不会进入最终 eligible_papers.csv,但会保留到:

data/output/non_journal_excluded.csv
data/output/candidate_quality_summary.md
data/output/journal_name_manual_resolution_required.csv

如果你确认某条被排除记录已有正式期刊版本,应在真实导出数据或元数据中补充正确期刊名和 DOI 后重新运行 pipeline。

手动维护 AbleSci 分区缓存

A 版不会在线访问 AbleSci。通过全文关键词规则且 is_journal_candidate=True 的正式期刊候选会进入:

data/interim/journal_quartile_cache.csv

arXiv、preprint、conference、thesis、book chapter 和 unknown 不会写入 journal_quartile_cache.csv。如果某个正式期刊还没有缓存,scripts/03_query_journal_quartile.py 会新增一行待人工复核记录,并写入:

data/output/journal_quartile_pending.csv

为了方便人工维护,运行下面脚本会生成 AbleSci 待查清单:

python scripts/19_prepare_ablesci_manual_check.py

输出文件:

data/output/journals_to_check_on_ablesci.csv

AbleSci 在中国 IP 下更稳定。建议打开该 CSV,优先使用 ablesci_search_url_by_issn,其次使用 ablesci_search_url_by_name,然后按“大类或小类任意一个为 1区/2区 即通过”的规则手动补充 data/interim/journal_quartile_cache.csv

你可以手动根据 AbleSci 查询结果填写:

category_major
major_quartile
category_minor
minor_quartile
all_categories_text
matched_journal_name
issn
ablesci_url

只要 major_quartileminor_quartileall_categories_text 中出现 1区2区,后续脚本会自动设置 is_q1_or_q2=True。如果分区字段为空,系统会设置 is_q1_or_q2=Unknownquery_status=manual_requiredmanual_review_required=True,并继续留在人工待查列表里;空分区不代表不符合 SCI 1/2 区。

手动补完分区后,可以重跑:

python scripts/04_filter_eligible_papers.py
python scripts/09_generate_markdown.py

或者直接重跑完整流程:

python scripts/10_run_pipeline.py

使用 Fenqubiao 2025 作为优先分区来源

Fenqubiao 2025 是当前推荐的主分区来源,AbleSci 保留为 fallback。Fenqubiao 需要中国 IP 和登录授权;本项目不会保存账号密码,不会自动绕过验证码,也不会默认无登录抓取 Fenqubiao 页面。

推荐流程是手动/半自动填写:

  1. 生成 Fenqubiao 待查清单和填写模板:
python scripts/25_prepare_fenqubiao_manual_check.py
  1. 打开:
data/output/fenqubiao_quartile_fill_template.csv
  1. 点击其中的 fenqubiao_search_url。在浏览器中使用中国网络访问 Fenqubiao,并由你人工完成登录授权或验证码。

  2. 在模板中手动填写:

fenqubiao_subject_major
fenqubiao_major_quartile
fenqubiao_subject_minor
fenqubiao_minor_quartile
all_categories_text
is_q1_or_q2

分区判断规则仍然是:大类分区或小类分区任意一个为 1区2区,则 is_q1_or_q2=True。如果信息为空或不确定,保持 Unknown,不要把空分区当作不符合。

手动填写完成后,建议另存为:

data/output/fenqubiao_quartile_fill_template_by_hand.csv

后续导入脚本会默认优先读取这个 _by_hand.csv 文件。只要该文件存在,scripts/25_prepare_fenqubiao_manual_check.py 不会覆盖它;如需生成新模板,会写到:

data/output/fenqubiao_quartile_fill_template_new.csv

只有显式添加 --overwrite-template 时,才会重写默认的 fenqubiao_quartile_fill_template.csv

  1. 导入手动填写结果:
python scripts/26_import_fenqubiao_quartile_fill.py

也可以显式指定导入文件:

python scripts/26_import_fenqubiao_quartile_fill.py --input data/output/fenqubiao_quartile_fill_template_by_hand.csv

如果需要覆盖已确认的 quartile_source=fenqubiaoquery_status=manual_cache 记录,必须显式添加 --force

导入后会更新:

data/interim/journal_quartile_cache_clean.csv

并同步写入旧字段:

category_major = fenqubiao_subject_major
major_quartile = fenqubiao_major_quartile
category_minor = fenqubiao_subject_minor
minor_quartile = fenqubiao_minor_quartile

缓存来源优先级:

  • Fenqubiao 2025 手动结果优先,写入 quartile_source=fenqubiaoquartile_year=2025
  • AbleSci 自动或手动结果作为 fallback;
  • 已确认的 quartile_source=fenqubiaoquery_status=manual_cache 记录不会被重复导入覆盖,除非你在模板中额外添加 force_update=True

补完 Fenqubiao 分区后运行:

python scripts/26_import_fenqubiao_quartile_fill.py
python scripts/04_filter_eligible_papers.py
python scripts/09_generate_markdown.py

使用中国网络自动补 AbleSci 分区

如果当前网络可以稳定访问 AbleSci,可以用脚本自动尝试补全 journal_quartile_cache.csv

建议先在浏览器或终端确认 AbleSci 可访问:

python - <<'PY'
import requests
url = "https://www.ablesci.com/journal/index?keywords=Ecological+Indicators"
r = requests.get(url, timeout=20)
print(r.status_code, len(r.text))
PY

然后运行:

python scripts/20_fill_journal_quartile_cache_from_ablesci.py --resume --limit 10 --delay-min 10 --delay-max 25

脚本会读取:

data/output/journals_to_check_on_ablesci.csv
data/interim/journal_quartile_cache.csv

并更新:

data/interim/journal_quartile_cache.csv

同时生成:

data/output/ablesci_quartile_fill_report.md
data/raw/ablesci_pages/
data/raw/search_results/ablesci_quartile_diagnostics.csv

安全边界:

  • 不绕过验证码;
  • 不破解登录;
  • 不高频请求,默认每次请求间隔 10-25 秒,默认最多请求 10 个期刊;
  • 如果遇到验证码、异常页、空页或解析失败,会标记 manual_required
  • 不覆盖 query_status=manual_cachematch_method=manual_cache 的用户手动记录;
  • 不覆盖已经 query_status=auto_found 的自动记录;
  • arXiv、preprint、conference、thesis 不会进入 AbleSci 查询;
  • 如果遇到验证码,等待一段时间后重新运行同一条 --resume 命令。

如果自动解析失败,请手动补 data/interim/journal_quartile_cache.csv。补完后运行:

python scripts/04_filter_eligible_papers.py
python scripts/09_generate_markdown.py

示例:

Ecological Indicators -> major_quartile=2区
Science of the Total Environment -> major_quartile=1区

人工复核

人工复核列表输出到:

data/output/manual_review_list.csv

以下情况会进入人工复核:

  • not_verifiable_no_fulltext
  • not_verifiable_no_text
  • fail_less_than_k_keywords
  • login_required
  • full_text_unavailable
  • preprintconferencethesisbook_chapterunknown 候选类型
  • strict_fulltext_required=true 时只有摘要但没有全文
  • journal_quartile_not_found
  • journal_match_uncertain
  • high_score_but_no_fulltext
  • 只缺 1 个关键词、接近通过的文献

主要输出文件

data/interim/search_results_raw.csv
data/interim/search_results_dedup.csv
data/interim/metadata_enriched.csv
data/interim/journal_names_resolved.csv
data/interim/journal_article_candidates.csv
data/interim/fulltext_link_candidates.csv
data/interim/fulltext_access_status.csv
data/interim/fulltext_keyword_verification.csv
data/interim/fulltext_matched_keywords_papers.csv
data/interim/fulltext_all_keywords_papers.csv
data/interim/keyword_presence_matrix.csv
data/interim/all_keywords_filter.csv
data/interim/all_keywords_papers.csv
data/interim/journal_quartile_cache.csv
data/interim/eligible_papers.csv
data/interim/keyword_hits.csv
data/interim/extracted_passages.csv
data/output/fulltext_pending_review.csv
data/output/journal_quartile_pending.csv
data/output/journals_to_check_on_ablesci.csv
data/output/non_journal_excluded.csv
data/output/candidate_quality_summary.md
data/output/journal_name_manual_resolution_required.csv
data/output/ablesci_quartile_fill_report.md
data/output/manual_review_list.csv
data/output/final_literature_evidence.md

初始化检查

python scripts/00_init_project.py

真实数据测试流程

建议先提交当前 sample 版本,然后再进入真实数据测试:

  1. 修改 config/query_config.yaml
run_mode: real
  1. 修改 data/input/keywords.txt,填入真实关键词或关键句。
  2. 预览真实运行准备操作:
python scripts/11_prepare_real_run.py --dry-run
  1. 确认无误后移动 sample 文件并清理旧输出,默认保留当前手动分区缓存:
python scripts/11_prepare_real_run.py --keep-journal-cache

如需清空 sample 分区缓存,使用:

python scripts/11_prepare_real_run.py --clear-journal-cache
  1. 将真实检索结果放入:
data/input/manual_exports/
  1. 检查真实输入:
python scripts/12_check_real_inputs.py
  1. 运行 pipeline:
python scripts/10_run_pipeline.py
  1. 手动补充 data/interim/journal_quartile_cache.csv 中的 AbleSci 分区。
  2. 再运行一次:
python scripts/10_run_pipeline.py
  1. 查看:
data/interim/eligible_papers.csv
data/output/final_literature_evidence.md

ScienceDirect 作为检索源

ScienceDirect 检索源采用 manual checkpoint 模式。脚本可以用 Playwright 打开公开搜索结果页,但不会自动登录 ScienceDirect,不会自动登录 CSTCloud,不保存账号密码,不绕过验证码,不破解付费墙,也不抓取受限全文。遇到验证码、机构登录、CSTCloud 或访问确认时,需要你在浏览器中手动完成,然后回到终端按 Enter 继续。

运行:

python scripts/40_search_sciencedirect_manual_checkpoint.py --manual-checkpoint --limit 50

输出:

data/raw/search_results/sciencedirect_raw.csv
data/interim/search_results_raw.csv
data/raw/search_pages/sciencedirect/

sciencedirect_raw.csv 单独保存 ScienceDirect 检索结果。search_results_raw.csv 会合并保留:

  • googlescholar.pro
  • scholar.lanfanshu.cn
  • ScienceDirect

每条 ScienceDirect 检索记录的 source 字段为 ScienceDirect。该脚本只解析搜索结果页题录元数据,包括标题、作者、年份、期刊、DOI、链接和 snippet,不访问受限全文。

如果你希望完整 pipeline 自动先跑 ScienceDirect 检索,需要在 config/query_config.yaml 中设置:

search:
  sources:
    sciencedirect: true

手动 checkpoint 检索完成后,可以继续运行:

python scripts/02_deduplicate_results.py
python scripts/14_enrich_metadata.py
python scripts/15_resolve_fulltext_links.py
python scripts/16_fetch_open_fulltext.py
python scripts/17_verify_fulltext_keywords.py

ScienceDirect Live Authorized Session Fetch

该模块用于复用你已经手动登录、已经完成机构授权的 Chrome 会话来获取 ScienceDirect 全文。它不会自动登录 ScienceDirect,不会自动登录 CSTCloud,不保存账号密码,不绕过验证码,不破解付费墙,只处理你合法可访问的全文。

运行顺序:

python scripts/30_prepare_sciencedirect_candidates.py
bash scripts/31_launch_chrome_sciencedirect_debug_macos.sh

第二步会打开一个独立 Chrome profile,默认 remote debugging port 为 9222,user-data-dir 为:

/tmp/paper_grab_chrome_sciencedirect_profile

请在打开的 Chrome 中人工完成:

  • ScienceDirect 登录;
  • CSTCloud 或机构认证;
  • 验证码或人工验证;
  • 必要时打开一篇目标文章并点击一次 View PDF。

完成后保持 Chrome 窗口打开,再运行:

python scripts/32_fetch_sciencedirect_live_session.py --debug-port 9222 --limit 10
python scripts/33_update_fulltext_status_from_sciencedirect.py
python scripts/17_verify_fulltext_keywords.py
python scripts/04_filter_eligible_papers.py
python scripts/09_generate_markdown.py

输出文件:

data/interim/sciencedirect_candidates.csv
data/interim/sciencedirect_live_fetch_status.csv
data/fulltext/pdf/{doc_id}.pdf
data/fulltext/txt/{doc_id}.txt

如果遇到登录页、验证码、403、access denied、expired PDF URL、或没有全文权限,脚本只会记录状态,不会绕过或继续强行访问。scripts/33_update_fulltext_status_from_sciencedirect.py 会把成功获得的 txt 标记为:

access_method=sciencedirect_live_session
access_status=sciencedirect_live_session_txt

随后 scripts/17_verify_fulltext_keywords.py 会把该 txt 当作合法全文来源进行关键词验证。

ScienceDirect captcha/login retry workflow

如果 data/interim/sciencedirect_live_fetch_status.csv 中有 captcha_requiredlogin_requiredpdf_url_expired_or_403access_denied,可以先生成重试清单:

python scripts/39_prepare_sciencedirect_retry_list.py

输出:

data/interim/sciencedirect_retry_candidates.csv
data/output/sciencedirect_retry_plan.md

默认不会重试 no_fulltext_access,因为这通常表示当前机构权限下没有全文;如果你确认上次只是没有完成机构登录,可以显式加入:

python scripts/39_prepare_sciencedirect_retry_list.py --include-no-access

随后运行交互式 checkpoint runner:

python scripts/40_run_sciencedirect_interactive_retry.py

脚本会提示你打开带 remote debugging 的 Chrome。请在 Chrome 中人工完成:

  • ScienceDirect 验证码;
  • 机构登录 / CSTCloud 登录;
  • 任何必须由真人完成的验证;
  • 打开任意一篇 ScienceDirect 文献并确认可以看到全文或 View PDF

完成后回到终端按 Enter,脚本会继续运行:

python scripts/32_fetch_sciencedirect_live_session.py --input data/interim/sciencedirect_retry_candidates.csv --debug-port 9222 --limit 10 --sleep 15
python scripts/33_update_fulltext_status_from_sciencedirect.py
python scripts/17_verify_fulltext_keywords.py
python scripts/04_filter_eligible_papers.py
python scripts/09_generate_markdown.py
python scripts/35_generate_pipeline_status_report.py

输出:

data/output/sciencedirect_interactive_retry_report.md

如果批量 retry 后仍然停在 captcha_required,推荐改用更稳的单篇人工 checkpoint 模式。先诊断当前 Chrome tab:

python scripts/42_diagnose_current_sciencedirect_tab.py --debug-port 9222

输出:

data/output/current_sciencedirect_tab_diagnostics.md

然后对单篇文献运行,例如:

python scripts/41_sciencedirect_manual_page_fetch.py --doc-id D000031 --debug-port 9222

脚本会打开该文献页面并暂停。请在 Chrome 页面里人工完成 ScienceDirect 验证码、access through institution、CSTCloud/机构登录,并确认能看到全文或 View PDF。完成后回到终端按 Enter,脚本才会读取当前页面并尝试保存:

data/fulltext/pdf/{doc_id}.pdf
data/fulltext/html/{doc_id}_sciencedirect_live.html
data/fulltext/txt/{doc_id}.txt
data/interim/sciencedirect_manual_page_fetch_status.csv

单篇成功后继续运行:

python scripts/33_update_fulltext_status_from_sciencedirect.py
python scripts/17_verify_fulltext_keywords.py
python scripts/04_filter_eligible_papers.py
python scripts/09_generate_markdown.py
python scripts/35_generate_pipeline_status_report.py

这个流程不会保存账号密码,不会自动登录,不会绕过验证码,不会破解付费墙;它只在你已经人工完成授权的 Chrome live session 中继续处理你合法可访问的全文。

查看当前 pipeline 状态

当检索、全文获取、关键词验证、Fenqubiao 分区和最终报告都跑过几轮后,可以用总控状态报告快速判断当前卡在哪一步:

python scripts/35_generate_pipeline_status_report.py

输出:

data/output/pipeline_status_report.md
data/output/pipeline_status_summary.csv

pipeline_status_report.md 会汇总候选文献数量、去重数量、元数据补全数量、全文获取状态、ScienceDirect live session 状态、全文关键词验证状态、Fenqubiao/SCI 分区状态、最终 eligible 文献列表,并自动判断当前主要瓶颈和下一步建议。

pipeline_status_summary.csv 是机器可读摘要,字段为:

metric,value,source_file,note

Web of Science 手动导出导入

本项目不自动登录 Web of Science,不保存账号密码,也不绕过 CSTCloud、机构认证或验证码。推荐流程是手动导出,再由本地脚本解析合并:

  1. 在浏览器中手动登录 Web of Science。
  2. 使用 Basic Search 或 Advanced Search 检索目标关键词。
  3. 在结果页选择需要导出的记录。
  4. 导出为 CSV、RIS 或 BibTeX,字段尽量包含 title、authors、year、source title、DOI、URL、abstract、keywords。
  5. 将导出文件放入:
data/input/manual_exports/
  1. 运行:
python scripts/60_import_wos_manual_exports.py

脚本输出:

data/raw/search_results/wos_raw.csv
data/interim/search_results_raw.csv

重复运行时,脚本会先移除旧的 source=Web of Science 导入行,再追加本次解析结果,避免同一批手动导出记录重复堆叠。

About

paper grab

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages