<commit_before>#!/usr/bin/perl

use HTML::TokeParser;
require "finmandats.pm";

$file = shift;
$xml = shift || 0;

open $fh, $file ;
$p = HTML::TokeParser->new($fh);

my %depute;

if ($file =~ /(\d+)/) {
    $depute{'id_an'} = $1;
    $depute{'url_an'} = "http://www.assembleenationale.fr/13/tribun/fiches_id/$1.asp";
    $depute{'Fin_Mandat'} = $fin_mandat{"$1.asp"};
}

sub infosgene {
    $p = shift;
    $t = $p->get_tag("li");
    $depute{'Nom'} = $p->get_text("/li");
    $depute{'Sexe'} = ($depute{'Nom'} =~ /M[ml]/) ? 'F' : 'H';
    $depute{'Nom'} =~ s/^\s*M\S+\s//;
    while($t = $p->get_tag('u', '/div')) {
	return if ($t->[0] eq '/div');
	$txt = $p->get_text('/u');
	$txt =~ /^(\S+)\s*/;
	$e = $1;
	$p->get_tag('td');
	$txt = $p->get_text('/td');
	if ($e =~ /groupe|président/i) {
	    $fonction = ($e =~ /président/i) ? 'président' : 'membre';
	    if ($txt =~ s/apparenté //i) {
		$fonction = 'apparenté';
	    }
	    ${$depute{'Groupe'}}{lc($txt)." / $fonction"} = 1;
	    next;
	}
	next if ($e =~ /Commission/);
	$depute{$e} = $txt;
	return if ($e =~ /Suppléant/);
    }
}


sub contact {
    $p = shift;
    while($p->get_tag('u', '/div')) {
	last if ($t->[0] =~ /^\//);
	$_ = $p->get_text('/u');
	if (/Mél/) {
	    $_ = $p->get_text('/li');
	    if (/MAILTO:([^_]+)_([\w\-]+)/i) {
		${$depute{'Mails'}}{$1.$2.'@<EMAIL>'} = 1;
	    }
	}elsif (/Site internet/) {
	    $a = $p->get_tag('a');
	    $site = $a->[1]->{'href'};
            $site =~ s/\s+//g;
            $depute{'Site_Web'} = $site;
	}elsif (/Adresses/){
	    while ($t = $p->get_tag('li', '/ul')) {
		last if ($t->[0] =~ /^\//);
		$text = $p->get_text('/li');
		$text =~ s/^\s+//;
		if ($text =~ /\@/) {
	                if ($text =~ /\S+\@/) {
			    while ($text =~ /(\S+@\S+)/g) {
				${$depute{'Mails'}}{$1} = 1;
		 	    }
			}
		} else {
		    ${$depute{'Adresses'}}{$text} = 1
			if ($text);
		}
	    }
	}
    }
}

sub mandat {
    $p = shift;
    while ($t = $p->get_tag('u', '/div')) {
	last if ($t->[0] =~ /^\//);
	$_ = $p->get_text('/u');
	if (/Mandat|Commission|Mission/) {
	    $text = $p->get_text('ul');
	    if ($text =~ /Date de début de mandat : ([\d\/]+) /) {
		$depute{'Debut_Mandat'} = $1;
	    }
	    while ($t = $p->get_tag('li', '/li')) {
		last if ($t->[0] =~ /^\//);
		$text = $p->get_text('/li');
		if  ($text =~ /^(\S+\s*\S*\s*\S*)( du | de la | de l')\s*(.*)/) {
		    $fonction = $1;
		    $orga = $3;
		    $deb = "";
		    if ($orga =~ s/ depuis le : ([\d\/]+)//) {
			$deb = $1;
		    }
		}
		if ($fonction =~ /reprise de l'exercice/i) {
		    $orga =~ /(\d{2}\/\d{2}\/\d+)/;
		    $depute{'Debut_Mandat'} = $1;
		}else {
		    ${$depute{'Fonctions'}}{lc($orga)." / ".lc($fonction)." / ".$deb} = 1;
		}
		$p->get_tag('/li');
	    }
	}
    }
}

sub extra {
    $p = shift;
    while ($t = $p->get_tag('li', 'a')) {
	last if ($t->[0] eq 'a');
	my $text, $fonction, $orga;
	$text = $p->get_text('/li');
	if  ($text =~ /^(\S+\s*\S*\s*\S*)( du | de la | de l')\s*(.*)/) {
	    $fonction = $1;
	    $orga = $3;
	    ${$depute{'Extras'}}{lc($orga)." / ".lc($fonction)} = 1;
	}
    }
}

sub autre_mandat {
    $p = shift;
    my $text;
    while ($t = $p->get_tag('li', 'a')) {
	last if ($t->[0] eq 'a');
	$text = $p->get_text('/li');
	$text =~ s/\n//g;
	$text =~ s/^\s+//;
	$text =~ s/\s+$//;
	$text =~ s/\s\s+/ /g;
	${$depute{'AutresMandats'}}{$text} = 1;
    }    
}

sub place {
    $p = shift;
    $p->get_tag('p');
    $place = $p->get_text('/p');
    if ($place =~ /(\d+)/) {
	$depute{'Place_Hemicycle'} = $1;
    }
}

while($t = $p->get_tag("h1", "img")) {
    if ($t->[0] eq 'img') {
	if (! $depute{'photo'} && $t->[1]{'src'} =~ /photo/) {
	    $img = $t->[1]{'src'};
	    if ($img !~ /^http/) {
		$img = 'http://www.assemblee-nationale.fr'.$img;
	    }
	    $depute{'photo'} = $img;
	}
	next;
    }
    $_ = $p->get_text('/h1');
    if (/Informations générales/) {
	infosgene($p);
    }elsif (/Contacts et site internet/) {
	contact($p);
    }elsif (/Mandats et fonctions à l'Assemblée nationale/) {
	mandat($p);
    }elsif (/Organismes extra-parlementaires/) {
	extra($p);	
    }elsif (/^Mandats (locaux|intercommunaux)/) {
	autre_mandat($p);
    }elsif (/^Fonctions dans les instances internationales ou judiciaires/) {
	extra($p);
    }elsif (/Place dans l'hémicycle/) {
	place($p);
    }
}

#On récupère le nom de famille à partir des emails
$nomdep = $depute{'Nom'};
$nomdep =~ s/[éèêë]+/e/ig;
@noms = split / /, $nomdep;<commit_msg>Parsing des députés prenant en compte le nouveau design de l'AN<commit_after>#!/usr/bin/perl

use HTML::TokeParser;
require "finmandats.pm";

$file = shift;
$xml = shift || 0;

open $fh, $file ;
$p = HTML::TokeParser->new($fh);

my %depute;

if ($file =~ /(\d+)/) {
    $depute{'id_an'} = $1;
    $depute{'url_an'} = "http://www.assembleenationale.fr/13/tribun/fiches_id/$1.asp";
    $depute{'Fin_Mandat'} = $fin_mandat{"$1.asp"};
}

sub infosgene {
    $p = shift;
    $t = $p->get_tag("li");
    $depute{'Nom'} = $p->get_text("/li");
    $depute{'Sexe'} = ($depute{'Nom'} =~ /M[ml]/) ? 'F' : 'H';
    $depute{'Nom'} =~ s/^\s*M\S+\s//;
    while($t = $p->get_tag('span', '/div')) {
	return if ($t->[0] eq '/div');
	$txt = $p->get_text('/span');
	$txt =~ /^(\S+)\s*/;
	$e = $1;
	$p->get_tag('td');
	$txt = $p->get_text('/td');
	if ($e =~ /groupe|président/i) {
	    $fonction = ($e =~ /président/i) ? 'président' : 'membre';
	    if ($txt =~ s/apparenté //i) {
		$fonction = 'apparenté';
	    }
	    ${$depute{'Groupe'}}{lc($txt)." / $fonction"} = 1;
	    next;
	}
	next if ($e =~ /Commission/);
	$depute{$e} = $txt;
	return if ($e =~ /Suppléant/);
    }
}


sub contact {
    $p = shift;
    while($p->get_tag('span', '/div')) {
	last if ($t->[0] =~ /^\//);
	$_ = $p->get_text('/span');
	if (/Mél/) {
	    $_ = $p->get_text('/li');
	    if (/MAILTO:([^_]+)_([\w\-]+)/i) {
		${$depute{'Mails'}}{$1.$2.'<EMAIL>'} = 1;
	    }
	}elsif (/Site internet/) {
	    $a = $p->get_tag('a');
	    $site = $a->[1]->{'href'};
            $site =~ s/\s+//g;
            $depute{'Site_Web'} = $site;
	}elsif (/Adresses/){
	    while ($t = $p->get_tag('li', '/ul')) {
		last if ($t->[0] =~ /^\//);
		$text = $p->get_text('/li');
		$text =~ s/^\s+//;
		if ($text =~ /\@/) {
	                if ($text =~ /\S+\@/) {
			    while ($text =~ /(\S+@\S+)/g) {
				${$depute{'Mails'}}{$1} = 1;
		 	    }
			}
		} else {
		    ${$depute{'Adresses'}}{$text} = 1
			if ($text);
		}
	    }
	}
    }
}

sub mandat {
    $p = shift;
    while ($t = $p->get_tag('span', '/div')) {
	last if ($t->[0] =~ /^\//);
	$_ = $p->get_text('/span');
	if (/Mandat|Commission|Mission/) {
	    $text = $p->get_text('ul');
	    if ($text =~ /Date de début de mandat : ([\d\/]+) /) {
		$depute{'Debut_Mandat'} = $1;
	    }
	    while ($t = $p->get_tag('li', '/li')) {
		last if ($t->[0] =~ /^\//);
		$text = $p->get_text('/li');
		if  ($text =~ /^(\S+\s*\S*\s*\S*)( du | de la | de l')\s*(.*)/) {
		    $fonction = $1;
		    $orga = $3;
		    $deb = "";
		    if ($orga =~ s/ depuis le : ([\d\/]+)//) {
			$deb = $1;
		    }
		}
		if ($fonction =~ /reprise de l'exercice/i) {
		    $orga =~ /(\d{2}\/\d{2}\/\d+)/;
		    $depute{'Debut_Mandat'} = $1;
		}else {
		    ${$depute{'Fonctions'}}{lc($orga)." / ".lc($fonction)." / ".$deb} = 1;
		}
		$p->get_tag('/li');
	    }
	}
    }
}

sub extra {
    $p = shift;
    while ($t = $p->get_tag('li', 'a')) {
	last if ($t->[0] eq 'a');
	my $text, $fonction, $orga;
	$text = $p->get_text('/li');
	if  ($text =~ /^(\S+\s*\S*\s*\S*)( du | de la | de l')\s*(.*)/) {
	    $fonction = $1;
	    $orga = $3;
	    ${$depute{'Extras'}}{lc($orga)." / ".lc($fonction)} = 1;
	}
    }
}

sub autre_mandat {
    $p = shift;
    my $text;
    while ($t = $p->get_tag('li', 'a')) {
	last if ($t->[0] eq 'a');
	$text = $p->get_text('/li');
	$text =~ s/\n//g;
	$text =~ s/^\s+//;
	$text =~ s/\s+$//;
	$text =~ s/\s\s+/ /g;
	${$depute{'AutresMandats'}}{$text} = 1;
    }    
}

sub place {
    $p = shift;
    $p->get_tag('p');
    $place = $p->get_text('/p');
    if ($place =~ /(\d+)/) {
	$depute{'Place_Hemicycle'} = $1;
    }
}

while($t = $p->get_tag("h2", "img")) {
    if ($t->[0] eq 'img') {
	if (! $depute{'photo'} && $t->[1]{'src'} =~ /photo/) {
	    $img = $t->[1]{'src'};
	    if ($img !~ /^http/) {
		$img = 'http://www.assemblee-nationale.fr'.$img;
	    }
	    $depute{'photo'} = $img;
	}
	next;
    }
    $_ = $p->get_text('/h2');
    if (/Informations générales/) {
	infosgene($p);
    }elsif (/Contacts et site internet/) {
	contact($p);
    }elsif (/Mandats et fonctions à l'Assemblée nationale/) {
	mandat($p);
    }elsif (/Organismes extra-parlementaires/) {
	extra($p);	
    }elsif (/^Mandats (locaux|intercommunaux)/) {
	autre_mandat($p);
    }elsif (/^Fonctions dans les instances internationales ou judiciaires/) {
	extra($p);
    }elsif (/Place dans l'hémicycle/) {
	place($p);
    }
}

#On récupère le nom de famille à partir des emails
$nomdep = $depute{'Nom'};
$nomdep =~ s/[éèêë]+/e/ig;
@noms = split / /, $nomdep;
{'fraction_non_alphanumeric': 0.3019288660943249, 'fraction_numerical': 0.008919611996878136, 'mean_word_length': 2.3964407421431275, 'pattern_counts': {'":': 0, '<': 5, '<?xml version=': 0, '>': 83, 'https://': 0, 'lorem ipsum': 0, 'www.': 4, 'xml': 2}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '1754349', 'n_tokens_mistral': 4364, 'n_tokens_neox': 4111, 'n_words': 741}