5 with open(path,
'rb')
as f:
6 config = tomllib.load(f)
9def extract_structure(jsonl_file_path):
12 with open(jsonl_file_path,
'r', encoding=
'utf-8')
as file:
15 json_obj = json.loads(line.strip())
17 structure.update(json_obj.keys())
21def extract_key_contents(jsonl_file_path, key_val):
24 with open(jsonl_file_path,
'r', encoding=
'utf-8')
as file:
27 json_obj = json.loads(line.strip())
29 if key_val
in json_obj:
30 insert_contents.append(json_obj[key_val])
32 return insert_contents
34def check_structure(jsonl_file_path):
35 structure = extract_structure(jsonl_file_path)
36 print(
"JSONLファイルの構造(キーの一覧):")
40def check_key(jsonl_file_path,key_val):
41 insert_data = extract_key_contents(jsonl_file_path,key_val)
42 print(
"JSONLファイル内の",key_val,
"キーの中身:")
43 for content
in insert_data:
46def get_content(meta, data, keyname, label, lang):
47 lang_inv =
'en' if lang ==
'ja' else 'ja'
50 if label
in data
and keyname
in meta[
'type'] :
51 if lang
in data[label]:
52 result = data[label][lang]
55 result = data[label][lang_inv]
59def get_content_without_lang(meta, data, keyname, label):
61 if label
in data
and keyname
in meta[
'type'] :
67def dump_content_with_lang(meta,data,keyname,lists,lang):
69 for i
in range(len(data)):
71 for j
in range(len(lists)):
72 row_data.append( get_content(meta[i], data[i], keyname, lists[j], lang) )
74 if len(row_data[0]) > 1:
75 all_data.append(row_data)
78def dump_content_without_lang(meta,data,keyname,lists,):
80 for i
in range(len(data)):
82 for j
in range(len(lists)):
83 row_data.append( get_content_without_lang(meta[i], data[i], keyname, lists[j]) )
85 if len(row_data[0]) > 1:
86 all_data.append(row_data)
90def dump_paper_misc_list(meta,data,pmflag):
91 data1 = dump_content_with_lang(meta,data,pmflag,[
'paper_title',
'authors',
'publication_name'],
'en')
92 data2 = dump_content_without_lang(meta,data,pmflag,[
'volume',
'publication_date'])
94 print(f
"len(data1): {len(data1)}")
95 print(f
"len(data2): {len(data2)}")
99 for k
in range(len(data1)):
102 for j
in range(len(data1[k])):
105 for i
in range(len(data1[k][1])):
106 authors_list.append(data1[k][1][i][
'name'])
107 if(authors_list[i]==
'F. Endo'):
109 elif(authors_list[i]==
'遠藤史隆'):
113 authors_list[ref] = f
"<u>{authors_list[ref]}({str(ref+1)}-st)</u>"
116 authors_list[ref] = f
"<u>{authors_list[ref]}({str(ref+1)}-nd)</u>"
119 authors_list[ref] = f
"<u>{authors_list[ref]}({str(ref+1)}-rd)</u>"
122 authors_list[ref] = f
"<u>{authors_list[ref]}({str(ref+1)}-th)</u>"
124 output1.append(
', '.join(map(str, authors_list)))
127 output1.append(f
"<b>{data1[k][j]}</b>")
129 output1.append(f
"{data1[k][j]}")
133 print(k,data1[k][0],data2[k])
134 for j
in range(len(data2[k])):
137 output2.append(f
"({data2[k][j][:4]})")
139 output2.append(f
"<b>{data2[k][j]}</b>")
143 print(f
"\t\t<span class=\"toggle-btn\">")
144 print(f
"\t\t\t{output1[0]}")
145 print(f
"\t\t</span>")
146 print(f
"\t\t<span class=\"dots\">...</span>")
147 print(f
"\t\t<span class=\"moreContent\">")
148 print(f
"\t\t\t<br/>")
149 print(f
"\t\t\t{output1[1]}")
150 print(f
"\t\t\t<br/>")
151 print(f
"\t\t\t{output1[2]} {output2[0]} {output2[1]}")
152 print(f
"\t\t</span>")
155 result_i.append(f
"\t<p>")
156 result_i.append(f
"\t\t<span class=\"toggle-btn\">")
157 result_i.append(f
"\t\t\t{output1[0]}")
158 result_i.append(f
"\t\t</span>")
159 result_i.append(f
"\t\t<span class=\"dots\">...</span>")
160 result_i.append(f
"\t\t<span class=\"moreContent\">")
161 result_i.append(f
"\t\t\t<br/>")
162 result_i.append(f
"\t\t\t{output1[1]}")
163 result_i.append(f
"\t\t\t<br/>")
164 result_i.append(f
"\t\t\t{output1[2]} {output2[0]} {output2[1]}")
165 result_i.append(f
"\t\t</span>")
166 result_i.append(f
"\t</p>")
168 result_all.append(result_i)
173def dump_presentations_list(meta,data,pmflag):
174 data1 = dump_content_with_lang(meta,data,pmflag,[
'presentation_title',
'presenters',
'event'],
'en')
175 data2 = dump_content_without_lang(meta,data,pmflag,[
'publication_date'])
178 for k
in range(len(data1)):
181 for j
in range(len(data1[k])):
184 for i
in range(len(data1[k][1])):
185 authors_list.append(data1[k][1][i][
'name'])
186 if(authors_list[i]==
'F. Endo'):
188 elif(authors_list[i]==
'Fumitaka ENDO'):
190 elif(authors_list[i]==
'遠藤 史隆'):
192 elif(authors_list[i]==
'遠藤史隆'):
196 authors_list[ref] = f
"<u>{authors_list[ref]}({str(ref+1)}-st)</u>"
199 authors_list[ref] = f
"<u>{authors_list[ref]}({str(ref+1)}-nd)</u>"
202 authors_list[ref] = f
"<u>{authors_list[ref]}({str(ref+1)}-rd)</u>"
205 authors_list[ref] = f
"<u>{authors_list[ref]}({str(ref+1)}-th)</u>"
207 output1.append(
', '.join(map(str, authors_list)))
210 output1.append(f
"<b>{data1[k][j]}</b>")
212 output1.append(data1[k][j])
214 for j
in range(len(data2[k])):
216 output2.append(f
"({data2[k][j][:4]}/{data2[k][j][5:7]})")
218 output2.append(data2[k][j])
222 print(f
"\t\t<span class=\"toggle-btn\">")
223 print(f
"\t\t\t{output1[0]}")
224 print(f
"\t\t</span>")
225 print(f
"\t\t<span class=\"dots\">...</span>")
226 print(f
"\t\t<span class=\"moreContent\">")
227 print(f
"\t\t\t<br/>")
228 print(f
"\t\t\t{output1[1]}")
229 print(f
"\t\t\t<br/>")
230 print(f
"\t\t\t{output1[2]} {output2[0]}")
231 print(f
"\t\t</span>")
234 result_i.append(f
"\t<p>")
235 result_i.append(f
"\t\t<span class=\"toggle-btn\">")
236 result_i.append(f
"\t\t\t{output1[0]}")
237 result_i.append(f
"\t\t</span>")
238 result_i.append(f
"\t\t<span class=\"dots\">...</span>")
239 result_i.append(f
"\t\t<span class=\"moreContent\">")
240 result_i.append(f
"\t\t\t<br/>")
241 result_i.append(f
"\t\t\t{output1[1]}")
242 result_i.append(f
"\t\t\t<br/>")
243 result_i.append(f
"\t\t\t{output1[2]} {output2[0]}")
244 result_i.append(f
"\t\t</span>")
245 result_i.append(f
"\t</p>")
247 result_all.append(result_i)
251def separate_paper_mist_1st_author(data):
256 for j
in range(len(data)):
257 test0 = data[j][7].replace(
'<u>',
'')
258 test1 = test0.replace(
'</u>',
'')
259 test2 = test1.split(
',')
261 for i
in range(len(test2)):
262 if 'F. Endo' in test2[i]:
264 if 'Fumitaka ENDO' in test2[i]:
266 if '遠藤 史隆' in test2[i]:
268 if '遠藤史隆' in test2[i]:
272 data_1st.append(data[j])
274 data_other.append(data[j])
276 return data_1st,data_other
279def write_with_hugo_format():
281 config = read_config(
"param/publication.toml")
282 input_path = config[
"publication"][
"input"].strip()
283 output_ja_path = config[
"publication"][
"ja"][
"output"].strip()
284 output_en_path = config[
"publication"][
"en"][
"output"].strip()
286 jsonl_file_path = input_path
290 data = extract_key_contents(jsonl_file_path,
'merge')
291 meta = extract_key_contents(jsonl_file_path,
'insert')
293 paper = dump_paper_misc_list(meta,data,
'published_papers')
294 misc = dump_paper_misc_list(meta,data,
'misc')
295 prese = dump_presentations_list(meta,data,
'presentations')
297 p1st, poth = separate_paper_mist_1st_author(paper)
308 f = open(output_ja_path,
'w')
310 f.write(f
"archetype = \"theming\"\n")
311 f.write(f
"weight = 2 \n")
312 f.write(f
"title = \"Publications\"\n")
315 f.write(f
"<!DOCTYPE html>\n")
316 f.write(f
"<html lang=\"ja\">\n")
318 f.write(f
"\t<style>\n")
319 f.write(f
"\t\t.moreContent {{\n")
320 f.write(f
"\t\t\tdisplay: none;\n")
322 f.write(f
"\t\t.btn {{\n")
323 f.write(f
"\t\t\tcursor: pointer;\n")
324 f.write(f
"\t\t\tbackground-color: transparent;\n")
325 f.write(f
"\t\t\tborder: none;\n")
326 f.write(f
"\t\t\tfont-size: 16px;\n")
328 f.write(f
"\t</style>\n")
329 f.write(f
"</head>\n")
334 f.write(f
"\t<a href=\"https://researchmap.jp/FumitakaENDO\" target=\"_blank\" rel=\"noopener noreferrer\">research map</a>\n")
335 f.write(f
"\tをもとに作成した業績リスト\n")
337 f.write(f
"\t<p>タイトルをクリックすると共著者や雑誌名が表示されます。</p>\n")
339 f.write(f
"\t<h3>学術雑誌に発表した論文 (筆頭著者)</h3>\n")
340 for i
in range(len(p1st)):
341 for j
in range(len(p1st[i])):
343 f.write(f
"{p1st[i][j][:3]}[{i+1}] {p1st[i][j][3:]}")
345 f.write(f
"{p1st[i][j]}\n")
347 f.write(f
"\t<h3>学術雑誌に発表した論文 (共著者)</h3>\n")
348 for i
in range(len(poth)):
349 for j
in range(len(poth[i])):
351 f.write(f
"{poth[i][j][:3]}[{i+1}] {poth[i][j][3:]}")
353 f.write(f
"{poth[i][j]}\n")
355 f.write(f
"\t<h3>一般講演・招待講演</h3>\n")
356 for i
in range(len(prese)):
357 for j
in range(len(prese[i])):
359 f.write(f
"{prese[i][j][:3]}[{i+1}] {prese[i][j][3:]}")
361 f.write(f
"{prese[i][j]}\n")
363 f.write(f
"\t<h3>MISC</h3>\n")
364 for i
in range(len(misc)):
365 for j
in range(len(misc[i])):
367 f.write(f
"{misc[i][j][:3]}[{i+1}] {misc[i][j][3:]}")
369 f.write(f
"{misc[i][j]}\n")
371 f.write(f
"\t<script src=\"dump_all_info.js\"></script>\n")
372 f.write(f
"</body>\n")
373 f.write(f
"</html>\n")
376 f = open(output_en_path,
'w')
378 f.write(f
"archetype = \"theming\"\n")
379 f.write(f
"weight = 2 \n")
380 f.write(f
"title = \"Publications\"\n")
383 f.write(f
"<!DOCTYPE html>\n")
384 f.write(f
"<html lang=\"en\">\n")
386 f.write(f
"\t<style>\n")
387 f.write(f
"\t\t.moreContent {{\n")
388 f.write(f
"\t\t\tdisplay: none;\n")
390 f.write(f
"\t\t.btn {{\n")
391 f.write(f
"\t\t\tcursor: pointer;\n")
392 f.write(f
"\t\t\tbackground-color: transparent;\n")
393 f.write(f
"\t\t\tborder: none;\n")
394 f.write(f
"\t\t\tfont-size: 16px;\n")
396 f.write(f
"\t</style>\n")
397 f.write(f
"</head>\n")
400 f.write(f
"\tList of achievements created from \n")
401 f.write(f
"\t<a href=\"https://researchmap.jp/FumitakaENDO\" target=\"_blank\" rel=\"noopener noreferrer\">research map</a>\n")
403 f.write(f
"\t<p>Click on the title will display the co-authors, the journal name and so on.</p>\n")
405 f.write(f
"\t<h3>Major Papers (1st author)</h3>\n")
406 for i
in range(len(p1st)):
407 for j
in range(len(p1st[i])):
409 f.write(f
"{p1st[i][j][:3]}[{i+1}] {p1st[i][j][3:]}")
411 f.write(f
"{p1st[i][j]}\n")
413 f.write(f
"\t<h3>Major Papers (co-author)</h3>\n")
414 for i
in range(len(poth)):
415 for j
in range(len(poth[i])):
417 f.write(f
"{poth[i][j][:3]}[{i+1}] {poth[i][j][3:]}")
419 f.write(f
"{poth[i][j]}\n")
421 f.write(f
"\t<h3>Presentation</h3>\n")
422 for i
in range(len(prese)):
423 for j
in range(len(prese[i])):
425 f.write(f
"{prese[i][j][:3]}[{i+1}] {prese[i][j][3:]}")
427 f.write(f
"{prese[i][j]}\n")
429 f.write(f
"\t<h3>MISC</h3>\n")
430 for i
in range(len(misc)):
431 for j
in range(len(misc[i])):
433 f.write(f
"{misc[i][j][:3]}[{i+1}] {misc[i][j][3:]}")
435 f.write(f
"{misc[i][j]}\n")
437 f.write(f
"\t<script src=\"dump_all_info.js\"></script>\n")
438 f.write(f
"</body>\n")
439 f.write(f
"</html>\n")
443if __name__ ==
'__main__':
444 config = read_config(
"param/publication.toml")
445 input_path = config[
"publication"][
"input"].strip()
446 output_ja_path = config[
"publication"][
"ja"][
"output"].strip()
447 output_en_path = config[
"publication"][
"en"][
"output"].strip()
449 print(
"Input:", input_path)
450 print(
"JA Output:", output_ja_path)
451 print(
"EN Output:", output_en_path)