参考文献模型校对换阿里云百炼,完善各种校对细节

This commit is contained in:
wyn
2026-08-06 10:14:36 +08:00
parent f4ebd10bfa
commit bffac7755d
7 changed files with 1551 additions and 135 deletions

View File

@@ -60,8 +60,8 @@ class PubmedService
$pmid = trim($pmid);
if ($pmid === '') return null;
// v2:解析结果新增 journal_iso_abbr / journal_medline_ta,换 key 避免命中旧缓存
$cacheKey = 'pmid_v2_' . $pmid;
// v3:解析结果新增 language / journal_country / affiliations,换 key 避免命中旧缓存
$cacheKey = 'pmid_v3_' . $pmid;
$cached = $this->cacheGet($cacheKey, 30 * 86400);
if (is_array($cached)) return $cached;
@@ -254,6 +254,31 @@ class PubmedService
}
}
// 文献语种PubMed 用三字母代码eng/chi/ger…一篇可有多个
$languages = [];
$langNodes = $xp->query('//PubmedArticle//Article//Language');
if ($langNodes) {
foreach ($langNodes as $n) {
$t = strtolower(trim($n->textContent));
if ($t !== '') $languages[] = $t;
}
}
$languages = array_values(array_unique($languages));
// 期刊出版国MedlineJournalInfo/Country非研究开展国仅作兜底
$journalCountry = $this->xpText($xp, '//PubmedArticle//MedlineJournalInfo//Country');
// 作者单位原文,用于推断研究开展国
$affiliations = [];
$affNodes = $xp->query('//PubmedArticle//AuthorList//Author//AffiliationInfo//Affiliation');
if ($affNodes) {
foreach ($affNodes as $n) {
$t = trim($n->textContent);
if ($t !== '') $affiliations[] = $t;
}
}
$affiliations = array_values(array_unique($affiliations));
if ($title === '' && $abstract === '') {
return null;
}
@@ -267,6 +292,10 @@ class PubmedService
'journal_iso_abbr' => $journalIsoAbbr,
'journal_medline_ta' => $journalMedlineTa,
'year' => $year,
'language' => isset($languages[0]) ? $languages[0] : '',
'languages' => $languages,
'journal_country' => $journalCountry,
'affiliations' => $affiliations,
];
}