Anki中国語デッキ作成覚書

 

 

共有デッキで「HSK」「中国語」それぞれ検索

(「中国語」で検索するとすこし出てくるが世界的に見ると英語ネイティブが中国語のHSKに沿ったデッキをたくさん出してくれている)

 

ダウンロード

 

自分のAnkiにインストール

 

それぞれCSVで書き出す

 

エクセルで自分の好きなように追加していく。

 

作成完了したらUnicodeテキストで保存。

(ダイレクトにタブ区切りテキストで保存するとWindowsメモ帳と中国語は相性が悪いのかそのあとずっと文字化けする)

 

メモ帳で開き、UFT8コードで保存し直す。

 

Anki自分のデッキに読み込む。

 

ある程度使って問題ないと思ったら最初にインストールしたデッキは容量圧迫しているので消すこと。

 

 

 

Ankiのカードテンプレートを作成する

 

 

 

 

以下リンクの先人方々を参考にコピペとカスタマイズした。

先人の時代よりもAnkiや他アプリが進化・更新されている為、自分のアプリの世代用に修正していく。

なおHTMLとCSSは10年以上前、自作HPが流行った時代に簡単なものを使っていただけなので必要部分だけ復習した。

 

 

リンクボタン

以下の先人の方々のサイトからコピペ。ありがとうございます。

github.com

note.com

 

物書堂が自動で開く

github.com

 

こちらのスクリプトですが、iphoneでは開いて欲しくなかったので

---------------

<a id="auto-click-link" href="mkdictionaries:///WISDOM3?text={{英単語}}"></a>

<script>

function isIOS() {

return /iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream;

}

if (isIOS()) {

document.getElementById("auto-click-link").click();

}

</script>

-------------

太字のiphoneの部分を削除しました。

(ここ消せばいいってわかるまで一週間かかりました)

 

 

物書堂リンク

上のリンク先のt9mdさんが物書堂アプリとリンクさせる方法も記載してくれていますが、自分の好きな辞書とリンクさせるには以下。

www.monokakido.jp

f:id:yoshiharay:20210921134610p:plain

スキーム

物書堂すごいな。めっちゃリンクさせる気満々。ありがとうございます。

 

WISDOM3、オックスフォード類語辞典とリンクさせたいので

mkdictionaries:///SOEJT?text={{英単語}}

mkdictionaries:///WISDOM3?text={{英単語}}

このURLを使う。

{{英単語}}は仮のフィールド。

 

フィールドごみ対策

設定していないフィールド、例えば{{例文}}というフィールド。今は例文を入れていないかもしれない。その際は{{#例文}}{{例文}}{{/例文}}で消えるとのこと。

以下先人より。

ameblo.jp

 

 

画像の貼り方

画像を以下の方法で生成したら、リンクを生成する。

hobooboegaki.hatenablog.com

f:id:yoshiharay:20210921164511p:plain

画像タグ生成

タグ+画像名+タグ
をエクセルで作っていき、フィールド化する。

 

ナイトモード用に画像を暗くする場合↓

kouhekikyozou.com

音声

以下のawesomeTTSで音声を作る。

hobooboegaki.hatenablog.com

 

CSS(見た目)

saruwakakun.com

saruwakakun.com

saruwakakun.com

 

saruwakakun.com

 

coliss.com

フォント

parashuto.com

行間

saruwakakun.com

 

 

画像トリミング

www.webcreatorbox.com

 

リンク

rilaks.jp

www.ipentec.com

 

 

 

音声の合成/自動読み上げ

暗記は五感を多く使うほど効率がいいので音声は必須。

しかし野生の単語帳には音声がないものもあるので合成方法と読み上げ方法を調べた。

 

 

 

iphoneの合成音声

 

読み上げ

www.ankiyorihajimeyo.com

{{tts en_US voices=Apple_Alex:Field}}

一周回ってまんまこれコピーです。

ただしすごく合成音声。

あとこれ自動じゃない。

 

 

 

iphone以外の合成音声

ei-raku.com

えいらくさんの記事に沿ってやってみよう。いつもありがとうございます。

こちらのアドオンで色々な合成音声を選べる。

ankiweb.net

アドオンをまず入れる。

languagetools.anki.study

合成音声の設定

f:id:yoshiharay:20210926150026p:plain

合成音声

以下のサービスは英語の文章にも対応していて、正しく発音してくれる。(全部やってみた)

Microsoft  Speech API COM

Microsoft  Speech API JScript

Youdao dicrionary

Yuodaoが文章も単語もナチュラルなのでYuodaoがおすすめ。

男性ならMicrosoftのDaivid。

ちなみに音声はDaividが一番ちゃんと発音してくれる。ちょっとテンション低いけど。

どうしても女性の音声がよかったらZiraがいいと思う。

(発音がちゃんとしてる度 Daivid>Zira>Huihui>Haruka)

f:id:yoshiharay:20210926152016p:plain

おすすめ音声

 

音声を合成する前に、カードに音声フィールドを作っておくことであとから置換ができるそうです。

 

音声を合成

f:id:yoshiharay:20210926161744p:plain

合成

Anki→検索→デッキを選ぶ→追加したいカードを選ぶ(Ctrl+Aで全選択)→AwesomeTTS→Add Audio to select

 

f:id:yoshiharay:20210926160941p:plain

add

設定は右側の

fField しゃべらせたいフィールドを選択

Type Regular でOK(自動でしゃべってくれる)

Language 普段アメリカ英語を聞いている人はUSで。

 

 

1.2万語は2時間ちょっとかかりました。一気にやってごめんなさい。

 

Anki用画像調達 スクレイピング(google画像検索画面のスクショ)の改造方法

Ankiに載せる画像をスクレイピングという方法でネットから集めるプログラムを見つけた。

Pythonという言語を使う。

このプログラムはMac環境かつPython2環境のため、WinかつPtyhon3環境で動作するよう試行錯誤した記録の必要部分を以下に記した。というかやった当時のメモ。

 

 

やった人のスペック

Excelの関数は多少使えるがマクロは使ったことない

コマンドプロンプトの存在は知っているがうまく打ち込めた試しがない

Pythonという言語の名前すら知らない

・もちろんJavaC言語も言語の名前しか知らない

Pythonを知らない状態からこのプログラム動かすまで30-50時間かかりました。

 

 

github.com

 

 

こちらのページを素直に上からやってみる。

 

データをダウンロードした。

 

 

pythonの環境構築

 

パスの設定方法

 

www.javadrive.jp

techacademy.jp

 

さっぱりわからないが、c:\users\名前

ここ以外探す気がないとのこと。

今のフォルダの状態をスクショしてどれだけ散らかっても片付けられるようにしてから

bulk_screen_capture.pyをいれた。

 

もともとはアンダーバーではなくハイフンだったがWindows環境では区切り文字扱いっぽいのですべてアンダーバーに書きかえた。

 

 

 

 

 

python bulk_screen_capture.py -h

f:id:yoshiharay:20210912125055p:plain

-h

なんとか表示できた。

 

以下がオプションの単語リスト。


Options:
  -h, --help            show this help message and exit
  -d DIR, --dir=DIR     Directory to write captured images.
  -j JS_BEFORE_SAVE, --js-before-save=JS_BEFORE_SAVE
                        Eval js file before save mainly to scroll to element
  -f, --force-save      Overwrite existing file if exists
  -p PREFIX, --prefix=PREFIX
                        Prefix for filename
  -w WINDOW, --window=WINDOW
                        Window size. 1280x720 by default.
  -e ENGINE, --engine=ENGINE
                        Image search engine to use one of dict_keys(['google',
                        'google_unsafe', 'bing', 'bing_unsafe'])
  -s, --show            Do not hide chrome browser
  --sleep=SLEEP         Sleep duration on each take

 

ようやくhelpが読めました。

一週間かかりました。

 

 

とはいえなんかもう少しないのか。

note.nkmk.me

import sys
import pprint

pprint.pprint(sys.path)

f:id:yoshiharay:20210912131129p:plain

path

もうわけがわからないので、とりあえず

add_img~~~

before_scroll~~~

bulk_screen~~~

sample.tsv

をまんまユーザーのフォルダに放り込んで

 

python bulk_screen_capture.py -d collection.media -p "google-img--" -j before_scroll.js -w 720x720 sample.tsv

 

(.pyだけはハイフンをアンダーバーにかえた)

 

 

だめ

 

どうもwindows環境はエンコードが別らしい

 

qiita.com

 

f:id:yoshiharay:20210912144129p:plain

code1

とはいえ問題の部分にエンコード?ないので読む

for file in arges

ファイル名を読む部分かな

 

konprogrammer.hatenablog.com

 

上のスクショで言うところの117行目に,

        retrieve_snapshot_for_words(driver, get_words_from_file(file), encoding="utf-8_sig")

としたらエラーは減ったが

まだ

    mkdir_p(Options.dir)

でつっかかる

eng-entrance.com

 

わけがわからない。

以下を追加し、 encoding="utf-8_sig"は全て消した

blog.tsukumijima.net

ちょっと進んだ。

AttributeError: type object '_io.StringIO' has no attribute 'StringIO'

 

image = Image.open(StringIO.StringIO(screen))

ここかな

先人もここでつまづいたよう。

これはpillowという画像編集するやつ

 Image.open( 画像を開く

この中身のStringIOがpython3以降だとエラーになるらしい

 

StringIO→BytesIO

に全部書き換え

に伴い

import StringIO

import six
import io 
from io import BytesIO

 

また


def save_snapshot(driver, word, idx):

のあとの

if Options.js_before_save:

のあとの

 image = Image.open(BytesIO.BytesIO(screen))

 image = Image.open(io.BytesIO(screen))

そんなものはないとエラーが出たので書き換えた

techacademy.jp

 

 

ところで、

python bulk_screen_capture.py -d collection.media -p "google-img--" -j before_scroll.js -w 720x720 sample.tsv

-d collection.media

は、スクショ保存するフォルダ(collection.media)を指示する(-d)

だが、

そもそもcollection.mediaとは?

これはAnkiにメディアファイルが含まれていると自動的にここを参照するデフォルトフォルダらしい

Ankiをダウンロードしたが自分でデッキを作っていないので、AnkiWebから適当に音声と画像が付いたデッキをダウンロードしたところcollection.mediaが

\Users\名前\AppData\Roaming\Anki2\ユーザー 1

という深いよくわからない階層にみつかった。

しかしいままでの四苦八苦した感じだと

c:\users\名前

にないといけないのでは?

 

 

 

と思ったが、なくてもいけた。

python bulk_screen_capture.py -d collection.media -p "google-img--" -j before_scroll.js -w 720x720 sample.tsv

f:id:yoshiharay:20210912172453p:plain

image1

勝手にディレクトリ作ってくれた。

確かにディレクトリが無ければ作るし、既にあったら作らないってコードあった。

なるほど。

 

tsvはエクセルファイルっぽい。

test.csvは以下の単語が入っている。

 

tactic    戦術、戦法、作戦
backfire    計画などが裏目に出る、エンジン・車がさか火を起こす
catastrophic    壊滅的な、大異変の、最悪の

 

f:id:yoshiharay:20210912172905p:plain

image2

あ、これ追番ないやつだ

追番もファイル名につくと思ってたけどちがうのかな?

 

まあいっか

試しに自分でgoogle検索した

f:id:yoshiharay:20210912173223p:plain

image3

 

なんかちょっと違うな。

 

一応怖いので、作者様がサンプルに置いておいてくれた画像も確認した。

違う。よかった。

f:id:yoshiharay:20210912173451p:plain

image4

 

私やり遂げました。

pythonという単語すら知らなかったが、一週間30-40時間かければ以下ができるようになった。

  • 環境の導入
  • 多少構文が読める
  • プログラムの起動のさせ方がわかる
  • 間違えた部分が多少わかる
  • 間違いの検索方法が四苦八苦すればなんとかできる

プロの方々から見れば苦笑いか怒られそうなもの。

しかし満足です。

 

 

 

 

 

 

将来の自分のためにまとめておこう

 

 

pythonをダウンロードする。

chromedriverをダウンロードする。

github.com

f:id:yoshiharay:20210912174126p:plain

画像1

ここからダウンロードする。

フォルダ開く。

bulk-screen-capture.py は

bulk_screen_capture.py へ。

c:\users\名前にダウンロードデータから以下をコピー

 add_img~~~

 before_scroll~~~

 bulk_screen~~~

 sample.tsv(単語が端の列に順番に並んだエクセル)

bulk_screen_capture.pyをメモ帳で開き、四苦八苦した修正を入れていく。

コマンドプロントを立ち上げる

python bulk_screen_capture.py -d collection.media -p "google-img--" -j before_scroll.js -w 720x720 sample.tsv

と入れてエンター

終わり。

 

コマンドプロントでミスったりpythonとかのプログラム?を終了したくなったら

Ctrl+Z+エンター

 

 

 

 

ちなみに1000語だいたい40分くらいでした。

 

 

 

 

 

 

 

ようやくひと段落。

Anki用画像調達 スクレイピング(google画像検索画面のスクショ)試行錯誤の記録

語学などの学習で暗記する際、楽に効率的に暗記していきたい。

Ankiというアプリがあるが、これは暗記カードアプリで、教材をほぼゼロからカスタマイズできる。

教材には画像も入れることができる。

例えば単語。

もしグーグル検索で引っかかった画像がいくつか暗記カードに入っていたら、かなりイメージしやすい。

しかしめちゃくちゃ時間かかりそう、無理。

 

それを自動でやってくれるプログラム?を見つけた。

これをやろうと試行錯誤した記録を残しておく。

完全なるメモで人に見せる形ではないものの、自分や誰かの手助けになるかもしれない。

 

 

 

こういう勝手にネットで検索して情報収集してくれるのをスクレイピングというようです。

github.com

 

Pythonというプログラミング言語で動くらしい。

ここにたどり着くまでに数時間はかかった気がする。

 

techacademy.jp

 

 

とりあえずやってみようと思う。

 

【私のスペック】

一言でいうと、プログラミングはさっぱり。

C言語とかJAVAとかいう単語しか聞いたことないレベル。

平成中期にHTMLとCSSを苦労して使ってホームページを運営していた程度。

 

【うちのPC】

わからんけどなんかそれぽい部分書いておけばきっと役にたつ。

Intel(R) Core(TM) i5-4570 CPU @ 3.20GHz   3.20 GHz

実装RAM16.0 GB

Windows 10 Home

python3.9.6

 

f:id:yoshiharay:20210911180933p:plain

pythonのバージョン

 

 

googledriverをネットからダウンロード

ちゃんとバージョンはchromeと合わせた。

 

以下に置いてみた

C:\Users\*私の名前*\AppData\Local\Programs\Python\Python39\Scripts

 

コマンドプロントを立ち上げる

pip install Pillow

Pillow、selenium、あとなんだっけ、とかを打ち込んでいく

(なんかそいういうソフトをインストールするコマンドらしい)

 

Pillowて何?

note.nkmk.me

 

.pyて何?

www.tech-teacher.jp

 

 

 

 

 

 

techacademy.jp

 

 

調べていくと全く同じことをやった方を発見。

teratail.com

当然ですがわたしなどより知識があるようで、消す場所追加する場所もはっきりしておられる。

 

k-kuro.hatenadiary.jp

 

この質問は途中で見つけたので、下の調べた部分はもっと後進的というかよくわかっていないことをしています。

 

 

 

 

 

qiita.com

 

# -*- coding: utf-8 -*-

import sys

# START: Frawned approach to change default encoding
# But I intentionally take this approach since it's easy and believe it non-problematic in this limited program.
# See discussion detail here.
# https://stackoverflow.com/questions/3828723/why-should-we-not-use-sys-setdefaultencodingutf-8-in-a-py-script
reload(sys)
sys.setdefaultencoding('UTF8')
# END: Frawned approach to change default encoding

消す。

 

f:id:yoshiharay:20210911164606p:plain

error1

stringI0がないとのこと

f:id:yoshiharay:20210911165059p:plain

インストール1

f:id:yoshiharay:20210911165118p:plain

errors

このバージョンにはないから別の機能使えみたいなエラーですかね…

import StringIO

from io import StringIO

k-kuro.hatenadiary.jp

 

 

とりあえずいけるとこまで無謀にも読み込んでみた。

43行目

f:id:yoshiharay:20210911170344p:plain

43

f:id:yoshiharay:20210911173515p:plain

errored

blog.pyq.jp

インデントがそろってませんとのこと。

いや4つですし。

 

いままでコマンドプロントダイレクト入力でしたが、

python.exeから入力しても同じ。当然か。

 

 

わけわからんので、とりあえず置いといて、

ちょっと戻ってそれぞれ何してるか定義を読んでいく。

 

 

 

 

 

 

 

f:id:yoshiharay:20210911180013p:plain

path

 

def…関数の定義。

def f(x)= って感じかな。まずX=とする、これをY=X+********に代入して…ていう感じかなあ。

udemy.benesse.co.jp

と思っていたらそのようだ。このサイトわかりやすいな。半分しか理解できなかったけど、とても助かる。超初心者にはありがたい。

 

 

 

 

def mkdir_p(path):

フォルダを作るらしい。

note.nkmk.me

Try以降は、繰り返し処理時に同じフォルダに既にフォルダがあると無理!というのを避ける内容らしい。

バージョンの違いで書き方に差があるらしいがあとでうまくいかなかったら直そう。

 

pathてなに?

note.nkmk.me

じゃあ本文のpathってところは私がpathを指定しなければならないのでは?

という疑問が残るが…

この定義を使うときにわかるか…。

 

 

ところでピリオド、アンダーバー、スラッシュってどう違うのか?

アンダーバー…自分用の関数の名づけなどに使える

medium.com

 

バックスラッシュ…windowsでは改行とかタブの意味になってしまうらしい。パスの指定とかで\が入っているとうまく動かなくなるのでスラッシュに書き換えが必要。

¥はバックスラッシュの日本語変換版のよう。つまり¥=バックスラッシュ?

qiita.com

 

f:id:yoshiharay:20210911195436p:plain

filename

 


re.search…文字列にパターンとマッチする部分があるかを調べる

 

atmarkit.itmedia.co.jp

python.keicode.com

('[^\w\.\-_]', text): 英数字とかが入ってるテキストだったら

hashlib.sha256ハッシュ値16進形式文字列)を求める

()の中にutf-8とあるのは日本語でもエラー出さない為

こういう解釈であってますか…?

pg-chain.com

 

 

 

f:id:yoshiharay:20210911211101p:plain

snapshot all

この定義は長いので区切りながら解読しよう。

 

f:id:yoshiharay:20210911211147p:plain

snapshot1

os.path.join ()の中の,カンマで区切られた文字列を結合する

www.sejuku.net

このドットって何?

→パソコンで言ったら大フォルダの中のフォルダ、みたいなものらしい。

kankatsu338.hatenablog.com

 

Options.dir

で、これどこ指すの?

わからないので飛ばす。

"%s.jpg"  …… 文字列.jpg として出力。

qiita.com

% get_filename(Options.prefix + word)

ここで指定した値が上の部分の「文字列」に変換されるらしい。

www.javadrive.jp

Options.prefix + word

意味が全く分からず検索してもうまく出てこない。

飛ばす。

 

idx = "%03d" % (idx + 1)

idx= … a=a+1 という1を足す関数らしい。

%03d … dが10進法で、03の3は3桁整数で、という意味のよう。

単語帳が1000単語だったら1000個目だけ4桁にならないか?

とりあえずいまはこのままで。

gammasoft.jp

www.k-cube.co.jp

f:id:yoshiharay:20210911222047p:plain

snapshot2

os.path.isfile(fname) …fnameというファイル名が存在しているか確認している

Options.force_save

不明。

 

fnameというファイル名が存在していて、かつOptions.force_saveがfalseだと

 

ai-inter1.com

 

 

 

toukei-lab.com

グーグル立ち上げ→検索→クリック→スクショ

 

 

qiita.com

グーグル検索画像を保存。

Anki用の単語帳のメインテキストを作る

 

Anki用の単語帳のメインテキスト部分を作っていく。

 

必要なデータ

  • 語彙
  • 日本語訳(シンプルなものが記憶しやすくていい)
  • 例文(英)
  • 例文(日)

発音記号はなんとかなる。

 

 

探し方

Ankiは共有デッキがWebにUPされている。

しかし日本語、日本人が作っているものは比較的少ない。

そこで別のサービスも視野に入れた。

 

Quizletから単語帳を探す

SVL12000対応!Quizletの単語帳をAnkiにインストールする簡単な方法! | 世界のだんごドットコム

 

こちらの記事から、Quizletというサービスから英単語、日本語訳の一覧を探してきた。

f:id:yoshiharay:20210918120657p:plain

quizlet1

 

左側に単語帳が表示される。どうも1000単語までらしい。なのでSVLのLV1-12まで揃っているものを探した。

 

f:id:yoshiharay:20210918122056p:plain

quizlet2

1-12までメモ帳にコピペした。

ここで、よく見ると「拍手かっさい」などとある。喝采がひらがな。

また、手の字が小さかったりする。

これは中国語の漢字らしく、Excelでは文字化けした。

 

 

AnkiWebから単語帳を探す

素直にここから始めればいいものを。

f:id:yoshiharay:20210918122719p:plain

AnkiWeb1

検索画面に日本語を入力することである程度デッキがしぼり込めると思われる。英単語デッキが欲しかったため、英といれた。

f:id:yoshiharay:20210918124525p:plain

AnkiWeb2

中国語も引っかかるが、目で判断。

ここから単語数が多いものを探す。

・スーパーイングリッシュ 約11000語

スーパー イングリッシュ(日本人の英語学習者向けのデッキ) - AnkiWeb

 

・ANC(アメリカ英語コーパス) 約30000語

ANC英和頻度辞典 例文付き - AnkiWeb

 

f:id:yoshiharay:20210918150726p:plain

super

スーパーイングリッシュ 約11000語を抽出してSVL12000語(右)と比較。簡単な単語は抜けているが、難しい単語はほぼ網羅されているようだった。

f:id:yoshiharay:20210918163914p:plain

重複

スーパーイングリッシュは11587語。SVL12000と重複しているのが11429語なのでSVL12000の約98%は網羅されている。すごい。

あと、上のエクセルのポップアップを見て「こいつエクセル使いこなせてないな」とかは思わないように。

 

また、今の自分はDUO3.0を5回くらい軽く回して忘れかけている状態なので3万語はハードルが高すぎる。

ということで、このスーパーイングリッシュの単語帳を元にしていく。

ありがとうございます。

 

やったこと

  • スーパーイングリッシュとDUOの単語で重複する部分はDUOの日本語の意味をコピペ
  • (すでにDUOはうっすら記憶している為、文言が同じのほうが思い出しやすい)
  • 例文はスーパーイングリッシュとANCの二種類(どちらも例文が無い場合もある)
  • IDを追加(管理しやすいように)

 

IDのなんたるか、必要性は以下。

Ankiデッキ自作の勘所 | 学習メモ。

 

電子辞書の単語帳機能で単語はパソコンに吸い込めるのか?

手持ちの電子辞書SII SL901X

 

これには国語、英語、実用、資格、TOEICなど様々盛りだくさんの辞書が入っており、学生時代は授業中に広辞苑や百科事典を使って暇をつぶしていたが、今見ると英和が使いやすく多読で重宝している。本当にすごいものを持ち腐れていた。

以下は公式サイト。この電子辞書に入っている全辞書の一覧。

https://www.sii.co.jp/cp/products/english/srs9001/dictionary.html#gsc.tab=0

 

これには単語登録機能があり、調べたらボタン一つで単語帳に登録ができる。

そこでAnkiに入れることはできないかと、まずパソコンに吸い込めないか試した。

 

 

 

結論

パソコンに吸い込めない。

 

 

やったこと

  • 電子辞書に16GのSDカードを差し込んだ
  • 調べると2Gまでだったので絶望
  • 家宅捜索し発見
  • 2GのSDカードを差し込んだ
  • 単語帳をSDカードにコピーできた
  • パソコンで開いたところ、.bkuとなっていた

 

bkuファイルは有償またはお試しダウンロードのみでちょこちょこ使うなら有償

そして開けたところでバックアップファイルは開発者の知的財産保護のため読めない可能性もあるらしい。

 

残念。

今後はAnkiを意識してスマホ電子辞書を買おうかな。

しかしスマホは照明が強すぎるので夜やスマホの充電が死んでるときはこちらを引き続き使っていきたい。