今回のやりたいこと
TF-IDFとは、各文書中に含まれる各単語(term)が 『その文書内でどれくらい重要か』 を表す統計的尺度の一つです。自然言語処理の基礎的知識になります。最終目標としてこの TF-IDF を活用して ワードクラウド を作成していきます。それぞれ下の順に解説記事を書いていこうと思います!
1. API活用編のEDINET APIの利用方法について(今回!)
2. EDINET APIを使ったデータ取得・加工編
3. scikit-learnを使った TF-IDF の計算
4. ワードクラウドの表示
と4つのパートに分けて解説していきます。
また、今回対象とする文書は各企業の 有価証券報告書 を元に TF-IDF を求めます。EDINET API取得方法なども下で解説していきたいと思います。
4つのパートに分けて解説するのは初めてです💦
TF-IDFの数式
TF(出現頻度) は下の通りです。
TF(単語の出現頻度) = \frac{当該文書における、ある単語の数}{当該文書における、すべての単語の数}
IDF(レア度) は下の通りです。
IDF(単語のレア度)= \log(\frac{全文書数}{ある単語を含む文書数}) + 1
この出現頻度TF値とIDF値を掛け合わせたものが TF-IDF値 となります。
例えば、東京スカイツリーの説明の文章があるとします。「東京スカイツリー」 という単語は確かに出現頻度は高いですが、その文章を特徴づける事は無いので、IDF値は低くでます。
東京スカイツリーを特徴づける単語として、TF値とIDF値それぞれ高く出そうな単語 「634m」 や 「日本一」 や 「電波塔」 があります。あくまで文章全体として他の文章とは際立っている単語は高い値となるのです。
固有名詞の説明にその固有名詞が使われることはないのです😑
EDINET APIの発行
EDINETという単語は(Electronic Disclosure for Investors' NETwork)のことです。金融庁が提供するオンラインシステムで、企業の有価証券報告書などを取得することが可能です。EDINET APIで非財務情報を取得していきます。2024年4月よりEDINETのAPI仕様が変わっています。 Version2となっていますので注意しましょう。また、実装はGoogleColaboratoryを使用します。
EDINET APIアカウント登録からEDINET APIを取得しましょう。
下画面のようにメールアドレスと指定のパスワードを入力してください。
次に多要素認証で電話番号を登録して、SMSコードを受け取ります。
そうしますと、下のような画面が表示されるので必須項目を入力してAPIを取得します。
このAPIキーは画面を閉じると表示されませんので、メモ帳に控えておきましょう。
Google ColaboratoryにAPI登録
また、下のようにコードを追加しましょう。
from google.colab import userdata
edinet_api_key = userdata.get('EDINET_API')
次に、実装で使うリクエストURLを先に紹介しておきます。
APIの使い方はEDINETが発行しているAPI仕様書を適宜確認しながら実行することをおすすめします。
1.docIDの取得
大前提としてEDINETは文書を一意のdocID(書類管理番号)で管理しています。 有価証券報告書を取得するためには、まずこのdocIDの取得が必要になってきます。
このリクエストURLで docID(書類管理番号) を取得します。バージョンはv2と置き換えましょう。
2.有価証券報告書の取得
上で取得した docID(書類管理番号) と組み合わせて、このリクエストURLで実際の提出本文書及び監査報告書を取得します。
上二つのリクエストURLはEDINET 操作ガイドのEDINET API仕様書(Version 2)から確認できます。
まとめ
今回はAPIの活用に焦点を説明しました。EDINETの概要など分からないところはホームページで確認しましょう!また、EDINETの仕様が変化するかもしれませんので、注意しておきましょう!
次回の記事
次回から上のリクエストURLを使ったデータの取得・加工をGoogleColaboratoryで実装します!
自然言語処理TF-IDFの応用Part2(データ取得・加工編)
参考資料
@osn_Lofiさんの資料がとても参考になりました。ありがとうございます!
・【自然言語処理】【Python】TF-IDFを使って文書の特徴をつかもう