Evernoteのタグ付けデータ
色々なドキュメントをEvernoteに入れてまして*1、気づいたら1万数千のノートと千数百のタグを運用する状態になってました。
私はタグ付けには色々こだわりがありまして、「テキスト検索だけで十分」という(多数派の)意見には断固反対なのですが、ここではそのこだわりについては措いておきます。
とにかく、タグの数はともかくとして、ノート数がこれだけ増えてくると、全体として各ノートに適切なタグが付けられているのか心配になってきます。タグづけルールが一貫してるかとか、同じような使い方をしてるタグが複数あって統合したほうがいいんじゃないかとかですね。
で、ふと思いついて、EvernoteのノートIDとそれに付与されているタグIDの対応表があれば、なんかデータ分析とかできるのではなかろうかと。同じような使われ方をしてるタグを割り出したりできれば、Rの練習をする上でもなんか面白そうだなと。
というわけで今日、データをつくってみました。ただ、いま大学院で書いてる論文の作業でやらないといけないことが色々あるので、今日はデータを取得するところまでしかやってません。あとで暇な時にいじってみます。
Evernoteのノート⇔タグ対応表をつくる
とりあえず、あとで何かの役にたつかもしれないので、ノートとタグの対応表を得る方法だけメモしておきます。EvernoteのMac版アプリを使ってる場合の話です。
ちなみにLang-8というサイト(リンク)で英作文指導をしてくれた外人さんが教えてくれたのですが(笑)、Evernoteは内部のデータベースにSQLiteを使っているので、SQLiteクライアントでデータの中身を直接みて、タグとノートの対応データをcsvとかで吐き出せばいいよと。
Macだと、
/Users/ユーザ名/Library/Application Support/Evernote/accounts/Evernote/Evernoteのアカウント名/
という場所に「Evernote.sql」という名前でデータベースが保存されてるので、これを開きます。
SQLiteのデータベースをみるのには、このアプリを使いました。
Database Browser for SQLite | SourceForge.net
このように、テーブルは6個あるんですが、このうち「Z_12TAGS」というテーブルが、ノートIDとタグIDの対応表になってます。
で、「ZENATTRIBUTEDENTITY」というテーブルに、あらゆるマスタがまとめて入ってるっぽいです。ノート名称のマスタもタグ名称のマスタもここに入ってるんですよね。
「Z_PK」というフィールドに各種IDがぶちこまれてまして、ここにノートIDもタグIDもタテに並ぶかたちで入ってます。「Z_ENT」というフィールドが12になっているレコードがノート関係で、17になってるレコードがタグ関係です。ということを↓の記事を読んで知りました。
mengwong - Direct access to the Evernote SQL database
ずーっと右のほうにいくと「ZNAME2」というフィールドにタグ名称が入っていて、「ZTITLE」というフィールドにノート名称が入っています。
なので、「Z_12TAGS」と「ZENATTRIBUTEDENTITY」という2つのテーブルだけあれば、ほしい情報は揃いますね。
あとはSQLの命令を書いてテーブルを出力すればいいのですが、私はAccessとかもマウスでしか使ったことがなくw、SQLの初歩も理解してないので、うまいやり方が分かりませんでした。
なんか、単にタグとノートのIDをキーにして「Z_12TAGS」のテーブルの横に「ZENATTRIBUTEDENTITY」から取ってきた「ZTITLE」と「ZNAME2」を表示させたいだけなんですが、
SELECT Z_12NOTES,ZTITLE, Z_17TAGS, ZNAME2 FROM Z_12TAGS LEFT JOIN ZENATTRIBUTEDENTITY ON Z_12TAGS.Z_17TAGS = ZENATTRIBUTEDENTITY.Z_PK OR Z_12TAGS.Z_12NOTES = ZENATTRIBUTEDENTITY.Z_PK
とか、
SELECT Z_12NOTES,ZTITLE, Z_17TAGS, ZNAME2 FROM (Z_12TAGS LEFT JOIN ZENATTRIBUTEDENTITY ON Z_12TAGS.Z_17TAGS = ZENATTRIBUTEDENTITY.Z_PK) LEFT JOIN ZENATTRIBUTEDENTITY ON Z_12TAGS.Z_12NOTES = ZENATTRIBUTEDENTITY.Z_PK
というふうにすると、「ZTITLE」を表示させる行と「ZNAME2」を表示される行が別々にできてしまって、レコード数が2倍になったんですよね。
こんなふうに。
初歩の初歩から間違ってて、「SQL入門」みたいなサイトでも読めばすぐ解決するんだろうと思いますが、SQLの勉強はべつに優先度高くないのであと回しに……。あとで詳しそうな人にきこうかな。
とりあえずタグ名とノート名を一緒に表示させるのはうまくできなかったので、↓のようにタグ名だけにしました。まあ、どのタグとどのタグが一緒に使われてるかみたいなデータを中心にみることになると思うので、べつにいいかなと。
SELECT Z_12NOTES, Z_17TAGS, ZNAME2 FROM Z_12TAGS LEFT JOIN ZENATTRIBUTEDENTITY ON Z_12TAGS.Z_17TAGS = ZENATTRIBUTEDENTITY.Z_PK
ちなみに、「ZENATTRIBUTEDENTITY」が1つのテーブルになってるせいなのかと思って、いったん「タグID⇔タグ名」「ノートID⇔ノート名」のマスタをつくってCSVで保存して再度読み込んでみたんですが、文字化けしたのでむかついてやめました。
とりあえず、データは得られたので、あとでなんかやってみたいと思います。
では、論文の作業に戻ります……。
*1:ただし、最悪漏洩した場合でも「まいっか」と思えるものだけクラウド(web上のEvernote)に上げており、より大事なデータはPCのEvernoteアプリのなかでオフラインノートブックとして管理してる。