巨大なXMLの読み込みを許可するかの設定です。設定に関しては以下の記事をご覧ください。回避する【lxml.etree】クラスの初期化XBRL解析クラスの初期化部分です。ここでファイルの読み込みからデータ抽出まで行っています。テキストブロックをスキップ。DEIはスキップしない。改行統一タグのテキスト部分に含まれる空白文字類や改行コードの処理を行うメソッドです。textXBRLによっては、テキストの先頭と末尾に改行を入れて読み易くしているものがあります。そのような空白文字類は型変換の妨げになりますので、このメソッドで除去します。テキスト部分の改行コードもXBRLによってまちまちですので、正規表現による置換で統一します。種々の改行コードは、以下のパターンでマッチします。re_compile(r'\r\n|\r|\n').sub並びも大切です。これでマッチした改行コードを指定した改行コードで置換して統一します。xsdファイルパス取得スキーマファイル(xsd)のファイルパスを取得するメソッドです。element.get(self.xlink_href)スキーマファイルにはラベルファイルなどのファイルパスが載っていますので、それらを読み込むときに使います。タグを取得して辞書を作るメソッドです。勘定科目タグに日付やセグメント情報を付加するのに使います。odセグメント(segment)タグでは、勘定科目がどの表のどの列に属しているか、といった情報が取得できます。エディネットのシナリオ(scenario)タグと同じようなところです。取得コンテキストの中のアイデンティファイアー(identifier)タグを取得するメソッドです。"http://www.sec.gov/CIK"、テキストに個々の企業のセントラル・インデックス・キー(CIK)が入っているようです。フォーエバータグを取得するメソッドです。ように属性もテキストも持たないタグで、たとえば以下のXBRLで使われていました。取得コンテキストの中のエクスプリシット・メンバータグを取得するメソッドです。取得ユニットタグを取得するメソッドです。od単位はメジャータグに入っています。「1株当たりの利益」のように割り算になっている単位では、割り算タグに分子タグと分母タグが入っていて、それらの中にメジャータグが入っています。タグ取得を取得するメソッドです。''.join(units)分子はユニット・ニューメレーター、分母はユニット・デノミネーターというタグに入っています。ひとつの文字列へと連結しています。タグを取得するメソッドです。''.join(texts)単位を表すテキストですが、名前空間接頭辞が使われていたり、使われてなかったりしていました。いうわけで、とりあえずコロン「:」で分割して、接頭辞は取り除いています。XBRLでは、1つの決算の中で結構色々な単位が使われていました。その企業固有の業績を表す指標ですね、生産量とかユーザー数とか。このあたりも単位が設定されていました。その関係か、同じ勘定科目でも単位違いのタグがあったりして、それらの区別にユニットタグも読み込む必要がありました。勘定科目はタグ名・コンテキスト・ID・ユニットをキーにして、ようやく大部分が特定できる感じです。勘定科目タグを読み込むメソッドです。実際の金額などを定義しているタグですね、これをすべて取得して辞書にしています。テキストブロックをスキップ。DEIはスキップしない。属性を含むもので検索するとうまく取れました。そのようにしています。検索する方法に変えました。付いたタグは見かけなかったのですが、一応スキップ対象から除外しています。XBRLでは10万字、100万字を超えるテキストを持ったタグがたくさん登場します。付いているか否かにかかわらずです。すると、うまく読み込めないソフトが出てきます。1つのセルが3万字くらいを超えると、その部分から表が崩れます。セル内改行などを保持するためのクオーテーション記号が次のセルに送られてしまうためと思われるのですが、そういった問題を回避するために、巨大なテキストをスキップできるようにしています。モジュールでは大きな要素も読み込めましたが、それでも13万字くらいを超える場合では、以下のエラーが表示されました。読み込む前に上限を引き上げておくと回避できました。1000万くらいの値を渡して上限を設定します。見たい時だけ、それ用に加工するのが良いと思います。タプルをキーにしています。稀なのですが、「すべての属性が同じで金額違いのタグ」と「金額まで完全一致のタグ」も存在していました。XBRLの表現力の限界か何かでこのようなタグが生成されているのではないかなと、想像しています。エディネットXBRLでも見かけました。どちらの場合も区別する方法が無さそうだったので、ふたつ目以降はスキップしています。金額違いの場合は、一応、画面に表示するようにしています。