18

次のようなファイルを解析しようとしています: http ://www.sec.gov/Archives/edgar/data/1409896/000118143112051484/0001181431-12-051484.hdr.sgml

Python 3を使用していますが、オープンタグを使用してSGMLファイルを解析するための既存のライブラリを使用したソリューションを見つけることができませんでした。SGMLは、暗黙的に閉じられたタグを許可します。LXML、XML、または美しいスープを使用してサンプルファイルを解析しようとすると、行末ではなくファイルの末尾で暗黙的に閉じられたタグが閉じられてしまいます。

例えば:

<COMPANY>Awesome Corp
<FORM> 24-7
<ADDRESS>
<STREET>101 PARSNIP LN
<ZIP>31337
</ADDRESS>

これは最終的に次のように解釈されます。

<COMPANY>Awesome Corp
<FORM> 24-7
<ADDRESS>
<STREET>101 PARSNIP LN
<ZIP>31337
</ADDRESS>
</ZIP>
</STREET>
</FORM>
</COMPANY>

ただし、次のように解釈する必要があります。

<COMPANY>Awesome Corp</COMPANY>  
<FORM> 24-7</FORM>
<ADDRESS>
<STREET>101 PARSNIP LN</STREET>
<ZIP>31337</ZIP>
</ADDRESS>

これを処理できるLXML/BS4に渡すデフォルト以外のパーサーがある場合、私はそれを見逃しています。

4

1 に答える 1

6

使用するドキュメントの SGML DTD を見つけることができる場合、解決策は、 OpenSP SGML ツールキットのosx SGML to XML コンバーターを使用してドキュメントを XML に変換することです。

簡単な例を次に示します。次の SGML ドキュメント (company.sgml; ルート要素を含む) があるとします。

<!DOCTYPE ROOT SYSTEM "company.dtd">
<ROOT>
<COMPANY>Awesome Corp
<FORM> 24-7
<ADDRESS>
<STREET>101 PARSNIP LN
<ZIP>31337
</ADDRESS>

DTD (company.dtd) は次のようになります。

<!ELEMENT ROOT       -  o (COMPANY, FORM, ADDRESS) >
<!ELEMENT COMPANY    -  o (#PCDATA) >
<!ELEMENT FORM       -  o (#PCDATA) >
<!ELEMENT ADDRESS    -  - (STREET, ZIP) >
<!ELEMENT STREET     -  o (#PCDATA) >
<!ELEMENT ZIP        -  o (#PCDATA) >

- oビットは、終了タグを省略できることを意味します。

SGML ドキュメントはosxで解析でき、出力は次のようにxmllintでフォーマットできます。

osx company.sgml | xmllint --format -

上記のコマンドからの出力:

<?xml version="1.0"?>
<ROOT>
  <COMPANY>Awesome Corp</COMPANY>
  <FORM> 24-7</FORM>
  <ADDRESS>
    <STREET>101 PARSNIP LN</STREET>
    <ZIP>31337</ZIP>
  </ADDRESS>
</ROOT>

これで、lxml やその他の XML ツールで処理できる整形式の XML ができました。

リンク先のドキュメントの完全な DTD があるかどうかはわかりません。次の PDF ファイルには、役立つ可能性のある DTD など、EDGAR に関する関連情報が含まれています: http://www.sec.gov/info/edgar/pdsdissemspec910.pdf (この回答で見つけました) SEC-HEADERしかし、リンクされた SGML ドキュメントには、PDF ファイルに記載されていない要素 ( など) が含まれています。

于 2012-09-21T16:27:22.007 に答える