用 Zotero 快速生成精简文献报告并导出为 Markdown
Zotero 是管理文献的利器,但默认报告往往包含大量无关信息。为提升效率,我借助 ChatGPT 编写了一段代码,只提取文献中的关键信息,如标题、作者和摘要,并导出为 Markdown 和 CSV 格式。
准备工作
- 在 Zotero 中选择想要导出的文献。
- 右键点击并选择“导出条目报告”功能。
- 使用 Command + S(Mac)或 Ctrl + S(Windows)保存 HTML 文件。
- 准备运行下面的代码。
完整代码
以下是完整的处理代码,包括从 HTML 文件中提取标题、作者、摘要、日期和期刊信息,去除摘要中的回车符,以及将提取的信息保存为 Markdown 和 CSV 文件的功能。请确保您已经安装了所需的库:beautifulsoup4
和 pandas
。
1 2 3
| pip install pandas
pip install beautifulsoup4
|
如果你在安装过程中遇到任何权限问题,可能需要在命令前加上sudo
(对于macOS或Linux)或使用管理员模式打开命令行界面(对于Windows)。
这里只提取类别为 item journalArticle
的条目,如果要提取学位论文需要加上 item thesis
接下来就可以运行代码了,使用前请将 html 文件放在 py 文件一个路径下。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75
| from bs4 import BeautifulSoup import pandas as pd
def extract_info_from_html(file_path): with open(file_path, 'r', encoding='utf-8') as file: soup = BeautifulSoup(file, 'html.parser')
articles_info = [] articles = soup.find_all('li', class_='item journalArticle')
for article in articles: title = article.find('h2').text.strip() authors = [td.text.strip() for td in article.find_all('td') if td.find_previous_sibling('th', class_='author')] abstract = article.find('th', text='摘要').find_next_sibling('td').text.strip() if article.find('th', text='摘要') else "摘要信息未提供" abstract = abstract.replace('\n', ' ') date = article.find('th', text='日期').find_next_sibling('td').text.strip() if article.find('th', text='日期') else "日期信息未提供" journal = article.find('th', text='期刊').find_next_sibling('td').text.strip() if article.find('th', text='期刊') else "期刊信息未提供" articles_info.append({ '标题': title, '作者': ', '.join(authors), '摘要': abstract, '日期': date, '期刊': journal }) return articles_info
def save_to_markdown(articles_info, md_file_path): markdown_content = "" for article in articles_info: markdown_content += f"### 标题: {article['标题']}\n" markdown_content += f"#### 作者: {article['作者']}\n" markdown_content += f"#### 日期: {article['日期']}\n" markdown_content += f"#### 期刊: {article['期刊']}\n" markdown_content += f"#### 摘要: \n{article['摘要']}\n\n---\n\n" with open(md_file_path, 'w', encoding='utf-8') as md_file: md_file.write(markdown_content)
def save_to_csv(articles_info, csv_file_path): df_articles = pd.DataFrame(articles_info) df_articles.to_csv(csv_file_path, index=False, encoding='utf-8-sig')
file_path = 'Zotero_报告.html' md_file_path = 'output.md' csv_file_path = 'output.csv'
articles_info = extract_info_from_html(file_path) save_to_markdown(articles_info, md_file_path) save_to_csv(articles_info, csv_file_path)
print("提取和保存完成。")
|
验证
如果出现问题可以尝试运行以下验证
验证提取的第一条信息
1 2 3 4
| file_path = 'path/to/your/Zotero_报告.html' articles_info = extract_info_from_html(file_path) print(articles_info[:1])
|
验证总数
效果预览
Markdown 文件预览
CSV 文件预览
优化:排序
尝试了一下用 python 代码排序,但是对于格式不一致的日期处理有些麻烦。不如把下好的 csv 文件拿 excel 处理好再转为易读的 markdown 格式用于在 pad 或者手机上摸鱼(
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| import pandas as pd
def read_csv_and_convert_to_markdown(csv_file_path, markdown_file_path): data = pd.read_csv(csv_file_path) def convert_to_markdown_custom_format(df): markdown_content = "" for index, row in df.iterrows(): markdown_content += f"### 标题: {row['标题']}\n" markdown_content += f"#### 作者: {row['作者']}\n" markdown_content += f"#### 日期: {row['日期']}\n" markdown_content += f"#### 期刊: {row['期刊']}\n" markdown_content += f"#### 摘要: \n{row['摘要']}\n\n---\n\n" return markdown_content markdown_content = convert_to_markdown_custom_format(data) with open(markdown_file_path, 'w', encoding='utf-8') as file: file.write(markdown_content) print(f"Markdown file has been saved to {markdown_file_path}")
csv_file_path = 'Zotero_报告提取.csv' markdown_file_path = 'Zotero_Report_Extracted_Custom.md'
read_csv_and_convert_to_markdown(csv_file_path, markdown_file_path)
print("转换和保存完成。")
|