2016-12-13 13 views
1

これになるとa.newbのビットですが、XBRLデータを含む15,000個のhtmlファイルがあります。 私はこれらのファイルをhttp://download.companieshouse.gov.uk/en_monthlyaccountsdata.htmlからダウンロードしました これらのファイルのすべてから、会社の名前と無形資産に関する情報を抽出したいのですが、どうすればよいか分かりません。Xbrlデータ抽出

理想的には、データを1つのExcelファイルの列にエクスポートしたいと考えています。

ご協力いただければ幸いです。

+0

HTMLファイルを解析するためのプログラミング言語が必要です。私はあなたがPythonと美しいスープを調べることをお勧めします。 –

+0

あなたはYAMLの価値のチェックでこれを達成することもできますが、@ RaduGheorghiuは何らかのプログラミング言語が必要だと言いました。 – m33bo

+0

どの開発プラットフォームでこの作業を行いますか?それは.NETの仕事ですか? – JeffFerguson

答えて

1

少し遅れて返答しますが、気にしないでください。まず、VT Fact Viewerをご覧ください。これは、ドキュメント内のXBRLファクトのグリッド表示を提供し、Excelにエクスポートすることができます。いったんそこに "core:IntangibleAssets"や "uk-gaap:Intangible ...."のようなタグを探すフィルタリングをする必要があります。

しかし、多くのドキュメント(CHデータダンプなど)でこれを行っている場合は、プログラミング言語やスクリプト言語を使用して独自のXML処理を開始する必要があります。しかし、あなたが抽出しようとしている種類のものを表示するので、視聴者はまだ役立つでしょう。

単純な例として、以下は、Excelで開くことができるCSV形式の無形資産データを取得します。 C#で書かれ は(LINQPadを使用して)あなたは、必要に応じて変換する必要があります:

string fname = @"C:\ch_data\Prod223_1770_001_20160331.html"; 
var doc = XDocument.Load(fname); 
// The 'ix' namespace may use 2008 or 2013 schema so we'll just use the .LocalName property of the tag 
var elements = doc.Root 
    .Descendants() 
    .Where(x => x.Name.LocalName == "nonFraction") 
    .Where(x => x.Attributes().Any(a => a.Value.Contains("Intangible"))); 

var lines = new List<string>(); 
foreach (var element in elements) 
{ 
    var attribs = element.Attributes(); 
    var ctx = attribs.FirstOrDefault(a => a.Name == "contextRef")?.Value ?? ""; 
    var dec = attribs.FirstOrDefault(a => a.Name == "decimals")?.Value ?? ""; 
    var scale = attribs.FirstOrDefault(a => a.Name == "scale")?.Value ?? ""; 
    var units = attribs.FirstOrDefault(a => a.Name == "unitRef")?.Value ?? ""; 
    var fmt = attribs.FirstOrDefault(a => a.Name == "format")?.Value ?? ""; 
    var name = attribs.FirstOrDefault(a => a.Name == "name")?.Value ?? ""; 
    var value = element.Value; 

    string line = $"\"{ctx}\",\"{dec}\",\"{scale}\",\"{units}\",\"{name}\",\"{fmt}\",\"{value}\""; 
    lines.Add(line); 
    //Console.WriteLine(line); 
} 
File.WriteAllLines(Path.ChangeExtension(fname, "csv"), lines); 

ディレクトリを変更したり、必要に応じてファイル名のリストをループへの入力ファイル名を。