|
12 | 12 | title: ['论文标题', 'title', '标题', '题目', '论文', 'paper', 'name'], |
13 | 13 | authors: ['作者信息', '作者', 'author', '参与者'], |
14 | 14 | venue: ['期刊/会议', '期刊', '会议', 'venue', 'conference', 'journal', 'publish', '发表', '来源'], |
| 15 | + publishedAt: ['论文发表日期', '发表日期', 'publication date', 'published at', 'published', 'date'], |
15 | 16 | pdf: ['arXiv主页', 'arxiv', 'pdf', '链接', 'link', 'url'], |
16 | 17 | code: ['Github仓库链接', 'github', 'code', '代码', 'repo', '仓库'], |
17 | 18 | project: ['刊印链接', 'project', '项目页', '主页', '刊印'], |
|
51 | 52 | .join(', '); |
52 | 53 | } |
53 | 54 |
|
54 | | - function yearFromVenue(venue) { |
55 | | - var m = String(venue || '').match(/\b(20\d{2})\b/); |
56 | | - return m ? m[1] : ''; |
| 55 | + function yearFromPublishedAt(value) { |
| 56 | + if (value === null || value === undefined || value === '') return ''; |
| 57 | + |
| 58 | + if (typeof value === 'number' || /^\d+$/.test(String(value).trim())) { |
| 59 | + var ts = Number(value); |
| 60 | + if (!Number.isNaN(ts) && ts > 0) { |
| 61 | + return String(new Date(ts).getUTCFullYear()); |
| 62 | + } |
| 63 | + } |
| 64 | + |
| 65 | + var text = String(value).trim(); |
| 66 | + var m = text.match(/\b(20\d{2})\b/); |
| 67 | + if (m) return m[1]; |
| 68 | + |
| 69 | + var parsed = new Date(text); |
| 70 | + return Number.isNaN(parsed.getTime()) ? '' : String(parsed.getUTCFullYear()); |
57 | 71 | } |
58 | 72 |
|
59 | 73 | function normalise(raw, map) { |
60 | 74 | var venue = map.venue ? (raw[map.venue] || '') : ''; |
61 | 75 | var authors = map.authors ? (raw[map.authors] || '') : ''; |
| 76 | + var publishedAt = map.publishedAt ? (raw[map.publishedAt] || '') : ''; |
62 | 77 | var tags = []; |
63 | 78 |
|
64 | 79 | if (map.tags && raw[map.tags]) { |
|
76 | 91 | title: map.title ? (raw[map.title] || '') : '', |
77 | 92 | authors: cleanAuthors(typeof authors === 'string' ? authors : extractUrl(authors)), |
78 | 93 | venue: typeof venue === 'string' ? venue : extractUrl(venue), |
79 | | - year: yearFromVenue(venue), |
| 94 | + year: yearFromPublishedAt(publishedAt), |
80 | 95 | pdf: map.pdf ? extractUrl(raw[map.pdf]) : '', |
81 | 96 | code: map.code ? extractUrl(raw[map.code]) : '', |
82 | 97 | project: map.project ? extractUrl(raw[map.project]) : '', |
|
87 | 102 |
|
88 | 103 | function buildMap(keys) { |
89 | 104 | var map = {}; |
90 | | - ['title', 'authors', 'venue', 'pdf', 'code', 'project', 'tags', 'thumbnail'].forEach(function (f) { |
| 105 | + ['title', 'authors', 'venue', 'publishedAt', 'pdf', 'code', 'project', 'tags', 'thumbnail'].forEach(function (f) { |
91 | 106 | map[f] = detectKey(keys, f); |
92 | 107 | }); |
93 | 108 | return map; |
|
0 commit comments