Я пытаюсь проанализировать и проанализировать контракты, которые получает министерство обороны, сопоставляя их с другими экономическими данными, которые я уже получил.Все это общедоступно на Defense.gov .
Однако они не занесены в таблицу, а соответствующая информация (Подрядчик, Дата, Имя, Идентификатор контракта и т. Д.)написано в форме абзаца.Я пытался передать данные в CSV, чтобы я мог выполнить их через R.
Обычно я просто извлекаю данные на основе тегов вокруг данных, но кто-нибудь может порекомендовать более простой способ полученияэти данные?Я уже извлек данные с помощью wget, но я просто пытаюсь извлечь их.
Это пример типичного абзаца :
Компания Booz Allen Hamilton, Inc., Херндон, Вирджиния, получает контракт стоимостью $ 9 450 189 с фиксированной платой и бессрочными поставками, требования к исследованиям и разработкам, чтобы завершить / выполнить оценку задач армейского ведения боевых действий и интегрированного обучения.планы, итоговые отчеты об экспериментах и планы экспериментов.Армия США будет использовать эти отчеты для разработки и пересмотра концепций армии и внесения вклада в другие службы и совместные концепции;дать рекомендации по разработке сценариев развития армии и совместных возможностей;исследовать текущие и будущие войны путем экспериментов;и создавать модели и симуляции для проверки новых идей боевых действий.ESG / PKS DTIC, база ВВС Оффут, Небраска, является контрактной деятельностью (SP0700-03-D-1380, заказ на поставку: 0452).
Я начал со скрипта Perl, нодобыча не работает так хорошо.Мне любопытно, если кто-то создал сценарий, который более динамичен, чем его можно построить, а не восстанавливать с нуля.
#!/usr/bin/perl -w
use Spreadsheet::WriteExcel;
# Create a new workbook called simple.xls and add a worksheet.
my $workbook = Spreadsheet::WriteExcel->new('Dec4_min.xls');
my $worksheet = $workbook->add_worksheet();
our $row = 0;
@files = <~/Def_Contracts/*.*>;
foreach $HTML (@files) { # open each file in folder #$HTML = "contract.html";
open (HTML) or die "Can't open the file!";
@fullpage = <HTML>;
print "fullpage array size = ", @fullpage. "\n";
my @cleaned; # this is a simplified array we will create
foreach $curr (@fullpage){ #this for each loop cuts array elements without dollar signs
# [0-9]+?\/[0-9]+?\/[0-9]{3}
if($curr =~ m/content="([0-9]+?\/[0-9]+?\/[0-9]{4})/) { #get date - looking for this: content="8/29/1995"
print $1;
# if ($currnt =~ m/([0-9]+,.[0-9]{4}/){ # extract date dd,(space)dddd
our $date = $1;
}
# CLEAN UP
while(substr($curr,0,1) =~ m/[^\w]/){ # while not a word char
substr($curr,0,1)=''; #cut that char
}
if($curr =~ m/\$[0-9]/) { # only use if has $number.
####################### Now we've got what we need, output relevant parts into excel.
my $firstcom = index($curr, ',');
$name = substr($curr,0,$firstcom);
# print "Name:", $name. "\n";
$worksheet->write($row,0,$name); # print the name in the first col
$worksheet->write($row,1,$date); # print the date in the 2nd col
if($curr =~ m/\$([0-9,]*)/) { # finds the cost PROBLEM: there may be more than one
# print "Cost:", $1. "\n";
$worksheet->write($row,2,$1);
}
if($curr =~ m/([A-Za-z0-9][A-Z0-9]{4}[A-Z0-9]?\-[0-9]+\-[A-Z]\-[A-Z0-9]{4})/) { # print ref # in 3rd col
# print "Cost:", $1. "\n";
$worksheet->write($row,3,$1); # ref takes form (letter ...-...-...number)
}
# 2nd attempt to get ref #
if($curr =~ m/\((.*\-.*\-.*)\)/){ # print ref # in 4rd col
# print "Cost:", $1. "\n";
$worksheet->write($row,4,$1); # ref takes form (letter ...-...-...number)
}
$worksheet->write($row,5,$curr); # print full record (for verification!)
$row ++;
} # close for if has a number statement
} # close foreach line of HTML Page
#print "cleaned array size = ", @cleaned. "\n";
print "The end.\n";
close (HTML);
} # End of foreach file