Извлечение Xbrl-данных

Что-то вроде .newb, когда дело доходит до этого, но у меня есть около 15 000 html-файлов с данными XBRL. Я скачал эти файлы с сайта http://download.companieshouse.gov.uk/en_monthlyaccountsdata.html В идеале я хочу извлечь из всех этих файлов информацию, связанную с названием компании и нематериальными активами, но я не знаю, как это сделать.

В идеале я хотел бы экспортировать данные в столбцы в одном файле Excel.

Любая помощь будет оценена по достоинству.


person Freeforming    schedule 13.12.2016    source источник
comment
Вам нужен какой-то язык программирования для разбора файлов HTML. Я предлагаю вам поискать Python и Beautiful Soup.   -  person Radu Gheorghiu    schedule 13.12.2016
comment
Вы также можете добиться этого в YAML - стоит проверить, но, как сказал @RaduGheorghiu, вам понадобится какой-то язык программирования.   -  person m33bo    schedule 13.12.2016
comment
На какой платформе разработки вы будете выполнять эту работу? Это работа .NET?   -  person JeffFerguson    schedule 14.12.2016


Ответы (1)


Немного поздно отвечать, но неважно. Для начала вы можете взглянуть на VT Fact Viewer. Это может дать вам сетку фактов XBRL в документе, и вы можете экспортировать их в Excel. Оказавшись там, вам нужно будет выполнить некоторую фильтрацию в поисках таких тегов, как «core: IntangibleAssets» или, может быть, «uk-gaap: Intangible ....».

Однако, если вы делаете это с большим количеством документов (например, с дампом данных CH), вам нужно будет начать выполнять некоторую «правильную» обработку xml самостоятельно, используя язык программирования или язык сценариев. Но средство просмотра все равно будет полезно, поскольку покажет вам, какие вещи вы стремитесь извлечь.

В качестве простого примера ниже вы получите некоторые данные о нематериальных активах в формате CSV, которые вы можете открыть в Excel. Написано на C# (с использованием LINQPad), поэтому при необходимости вам придется перевести:

string fname = @"C:\ch_data\Prod223_1770_00101234_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);

Измените имя входного файла, чтобы прокрутить каталог или список имен файлов в зависимости от ситуации.

person shunty    schedule 22.12.2016