目录

注册会计师《会计》分录荟萃

昨天CPA备考群群友向我求助,想将2023的会计分录荟萃做成Anki卡牌,方便平时工作中记忆。

原始文档是 word 版本:

基本上就是一道题目,一个表格。

最后批量做出的效果如下:

制作过程

通过 chatgpt 对话帮我写了个 python 代码,直接从 word 里提取出“问题-表格”,其中表格转换成 html 格式,批量写入到 anki 中(需要安装 anki-connect 插件)。

但这样对于合并单元格不能很好处理,导致效果不好。

所以改变思路,分成三步:

  1. 将 word 文档另存为 html 文档

直接利用 word 的功能,将其转换成 html 文档,这样对于合并单元格就不会有问题了。

  1. python 提取 html 文档中的问题和表格

  2. 循环批量制卡。(当然另存为 csv 文档导入 Anki 也可以)

代码

通过和 chatgpt4 友好对话,让它帮我写出下面代码。

其中 deck_name ,template_name ,fields 修改成你自己的实际参数。

( 注意:需要先在 Anki 创建个和 deck_name 变量相同的牌组)

from bs4 import BeautifulSoup
import requests

def extract_tables_and_titles(html_content):
    soup = BeautifulSoup(html_content, 'html.parser')
    tables = soup.find_all('table')
    titles = []

    for table in tables:
        # 初始化标题为空字符串
        title = ""
        # 检查表格的前一个兄弟节点
        prev_sibling = table.previous_sibling

        while prev_sibling:
            # 如果找到文本节点,则提取文本并停止循环
            if prev_sibling.name == 'p':
                title = prev_sibling.get_text(strip=True)
                break
            # 否则,继续检查前一个兄弟节点
            prev_sibling = prev_sibling.previous_sibling

        titles.append(title)

    return titles, tables

# 读取HTML文件(把word另存为html格式)
with open("注册会计师《会计》分录荟萃.html", "r", encoding="gb2312") as file:
    html_content = file.read()

titles, tables = extract_tables_and_titles(html_content)


# 卡牌名称
deck_name = '表格'
# 模板名称
template_name = "Analysis-Basic"
anki_connect_url="http://127.0.0.1:8765"

# 打印每个标题和对应的表格HTML
for title, table in zip(titles, tables):
    payload = {
        "action": "addNote",
        "version": 6,
        "params": {
            "note": {
                "deckName": deck_name,
                "modelName": template_name,
                "fields": { # 这里是对应卡片模板对应字段的映射
                    '问题':title,
                    '答案':str(table)
                },
                "tags": ''
            }
        }
    }
    response = requests.post(anki_connect_url, json=payload)
    print("Add Note Response:", response.text)

其中难点是需要让它解决,两个表格中间的文字才是下个表格的问题,因为可能会存在没有标题的情况。

这个代码应该通用于:一个文字,一个表格的情形。

这样就不用手工,一个一个利用插件添加了。

卡牌下载

我将 word 文档和代码以及做好的卡牌供大家下载,学习。

下载链接:

https://wwf.lanzouq.com/ij07C1mo1vch