Pythonを使用してAnkiに単語を登録するスクリプトを書いてみた ChatGPT活用

Ankiとは

この記事を読んでいる方はAnkiを既に使用していると思いますが、知らない方のために説明します。

Ankiは、記憶を効率的に維持・向上させるために設計された無料のスペースドリピティション(間隔反復)フラッシュカードアプリです。

以下はAnkiの特徴です。

1. スペースドリピティション: Ankiは、スペースドリピティションという学習方法を利用しています。これは、学習者が知識を長期記憶に定着させるために、効果的なタイミングで情報を復習するという方法です。Ankiは、復習のタイミングを自動的に調整し、それぞれの学習者にとって最適な反復間隔を提供します。

2. カスタマイズ: Ankiでは、フラッシュカードのデザインや内容を自由にカスタマイズできます。テキスト、画像、音声などを組み合わせて、学習者が理解しやすいカードを作成することができます。

3. 共有デッキ: Ankiのユーザーコミュニティでは、さまざまなトピックの共有デッキが提供されています。これにより、他の人が作成したデッキをダウンロードして学習することができます。また、自分で作成したデッキを他の人と共有することもできます。

4. 同期機能: Ankiは、クロスプラットフォーム対応であり、スマートフォン、タブレット、コンピュータ間でデッキと進捗状況を同期することができます。これにより、どのデバイスでも学習の続きをスムーズに行うことができます。

5. 無料: Ankiはオープンソースであり、基本的な機能は無料で利用できます。これにより、多くの人が低コストで高品質な学習ツールにアクセスできるようになっています。(スマホアプリ版は3000円ほど)

Ankiの効率的な学習方法やカスタマイズ機能、共有デッキなどにより、語学学習、専門知識、一般教養など幅広い分野で利用されています。これらの特徴が、Ankiを優れた学習ツールとして評価される理由です。

Anki Connectとは

この記事のプログラムはAnki Connectを使用してPythonで開発しています。

Anki Connectは、Ankiというスマートなフラッシュカードプログラムの拡張機能です。Ankiは、効果的な学習や情報の定着に役立つフラッシュカードを作成、管理、学習するための人気のあるツールです。Anki Connectは、Ankiの機能をAPIを通じて外部アプリケーションやスクリプトと連携させるための手段を提供します。

Anki Connectを使用することで、外部アプリケーションやスクリプトからAnkiにアクセスし、データを読み込んだり、フラッシュカードを作成したり、既存のカードを編集したり、学習の進行状況を追跡したりすることができます。
これにより、Ankiの機能をカスタマイズしたり、他のアプリケーションとの連携を可能にしたりすることができます。

Anki Connectは、JSON形式のリクエストを使用して情報の送受信を行います。
例えば、外部アプリケーションがAnki Connectに対して「新しいフラッシュカードを作成してください」というリクエストを送信すると、Anki Connectはそれに応じてフラッシュカードを作成し、結果を返します。

Anki Connectは、Ankiのアドオンとして提供されており、公式のAnkiウェブサイトからダウンロードしてインストールすることができます。

開発経緯

Ankiへの単語の登録が面倒なのでPythonスクリプトで自動で一気に登録できるようにしました。

下記の記事でDiscordにメッセージを送るだけでWEBの辞書から完全に自動で単語の意味や例文を取得してくれるアプリを開発して運用しているのですが、難しい単語、イディオム、スラングは意味や例文が取得できない事もあるのでChatGPTの方が使い勝手がいい場合もあるのでこちらのスクリプトを書きました。

前準備

Anki Connectをインストール、および必要なPythonライブラリを一通りインストールします。

「Front」

「back」
読み方:

意味:

例文:

上記のフォーマットに合わせて各単語ごとにブロックを作っていきます。

まずは登録したい単語を用意してChatGPTに以下のように質問すればすべて自動で作成してくれます。

例では日本語でやっていますが、もちろんどんな言語でも対応できます。

ChatGPTプロンプト

領袖
播植
夙夜


上記の単語の読み方、意味、例文を教えてください。
例文は1つでいいです。

例文は1つでいいです。

Printされるものは以下のフォーマットに従ってください。例えば「可塑」を例に取ります。「Front」と「Back」は必ず入れてください。
読み方、意味、例文の間には必ず改行を2行入れて。

「Front」
可塑
「Back」
読み方:かそ

意味:形が容易に変えられさま。また、その物質。特に、高音にすると容易に形を変え、冷えると固まる性質のある物質。例えば、プラスチックや粘土などが可塑性を持つ。

例文:この素材は可塑性が高いため、さまざまな形に成型することが可能です。

漢字の書き取り追加用のプロンプト

点在
撤去
左遷


上記の単語の意味、例文を教えてください。
例文は1つでいいです。

Printされるものは以下のフォーマットに従ってください。例えば「統轄」を例に取ります。「Front」と「Back」は必ず入れてください。
答えと意味の間は2行、行間を開けて下さい。


「Front」
彼は会社の全事業を"とうかつ"している。
「Back」
答え:統轄

意味:「統轄」(とうかつ)は、全体を統一して管理・指揮することを意味します。組織や部門、業務全般を一元的に管理し、指導することを指します。

英語のイディオムを追加用のプロンプト

throw someone a bone 
take the plunge


上記のイディオムの英語意味、日本語訳、例文を教えてください。
例文は1つでいいです。

Printされるものは以下のフォーマットに従ってください。例えば「可塑」を例に取ります。「Front」と「Back」は必ず入れてください。

「Front」
hit the ground running 
「Back」
英語意味:to immediately work hard and successfully at a new activity 

日本語訳:「いきなり全速力で走り出す」、「スタートダッシュする」


例文: I assure you that I will be hitting the ground running.

ソースコード

import requests
import json

# アンキコネクトの設定
anki_connect_url = "http://localhost:8765"
headers = {'Content-Type': 'application/json'}


def add_card(front, back):
    data = {
        "action": "addNote",
        "version": 6,
        "params": {
            "note": {
                "deckName": "your_deck",  # ここにデッキ名を入れてください
                "modelName": "Basic",
                "fields": {
                    "Front": front,
                    "Back": back.replace("\n", "<br>").replace(front, f'<span style="color:red;">{front}</span>')  # Frontの単語を赤色でハイライトする
                },
                "options": {
                    "allowDuplicate": False
                },
                "tags": []
            }
        }
    }
    requests.post(anki_connect_url, headers=headers, data=json.dumps(data))


def parse_and_add_cards(text):
    card_texts = text.split('「Front」')
    for card_text in card_texts[1:]:
        split_text = card_text.split('「Back」')  # 「Back」の後ろの改行を削除
        front = split_text[0].strip()
        back = split_text[1].strip()
        # print(f"Front: {front}")  # デバッグ出力
        # print(f"Back: {back}")   # デバッグ出力
        add_card(front, back)

def sync_anki():
    data = {
        "action": "sync",
        "version": 6
    }
    response = requests.post('http://localhost:8765', json=data)
    print(response.text)

input_text = """
「Front」領袖

「Back」
読み方:りょうしゅ

意味:ある集団や組織の最高位に立つ人。指導者。

例文:彼はその政党の領袖として高い信頼を受けていた。

「Front」播植

「Back」
読み方:はしょく

意味:種子をまくこと。特に、農作物の種を土地に播くこと。

例文:春が来ると、彼は畑に野菜の種を播植した。

「Front」夙夜

「Back」
読み方:しゅくや

意味:昼夜を問わず、絶えず。ひたすら。

例文:彼は夙夜努力し、ついに目指していた目標を達成した。

"""

parse_and_add_cards(input_text)

sync_anki()

コードにはChatGPTでプリントされたフォーマットを貼り付けて実行するだけでOKです。

もちろんinputで入力する仕様にもできますが、ハードコードにしています。

実行した所、無事に単語が登録されています。

少し注意して頂きたいのはChatGPTで登録する文を作成すると読み方や意味を間違えている場合が時々あります。

この記事での運用は日本語で行なっていますが、英語にする場合はコード内の読み方を例えば「発音記号」、「類義語」に変えたりそもそも削除指定しまうという方法があります。

Follow me!

関連記事

PAGE TOP