Lingua-PT-ProperNames
view release on metacpan or search on metacpan
lib/Lingua/PT/ProperNames.pm view on Meta::CPAN
while(/(?:[\w\«\»,]\s+|[(])($np),\s*(?:(?:$sep2)\s+)?($prof)/g)
{ $profissao{$1} = $2 }
}
}
# tratamento dos nomes "duvidosos" = Nome prop no inicio duma frase
#
for (keys %namesduv) {
if (/^(\w+)/ && $vazia{lc($1)}) { #exemplo "Como Jose Manuel"
s/^\w+\s*//; # retira-se a 1.a palavra
$names{$_}++
} else {
$names{$_}++
}
}
for (keys %names) {
if (/^(\w+)/ && $vazia{lc($1)}) { #exemplo "Como Jose Manuel"
my $ant = $_;
s/^\w+\s*//; # retira-se a 1.a palavra
$names{$_} += $names{$ant};
delete $names{$ant}
}
}
if ($opt{oco}) {
for (sort {$names{$b} <=> $names{$a}} keys %names ) {
printf("%60s - %d\n", $_ ,$names{$_});
}
} else {
if ($opt{comp}) {
my @l = sort _compara keys %names;
_compacta(\%names, @l)
} else {
for (sort _compara keys %names ) {
printf("%60s - %d\n", $_ ,$names{$_});
}
}
if ($opt{prof}) {
print "\nProfissões\n";
for (keys %profissao) {
print "$_ -- $profissao{$_}"
}
}
if ($opt{em}) {
print "\nGeograficos\n";
for (sort _compara keys %gnames ) {
printf("%60s - %d\n", $_ ,$gnames{$_})
}
}
}
}
=head2 getPN
=cut
sub getPN {
local $/ = ""; # input record separator=1 or more empty lines
my %opt;
@opt{@_} = @_;
my (%profissao, %names, %namesduv, %gnames);
while (<>) {
chop;
s/\n/ /g;
for (/[.?!:;"]\s+($np1\s+$np)/g) { $namesduv{$_}++;}
for (/[)>(]\s*($np1\s+$np)/g) { $namesduv{$_}++;}
for (/(?:[\w\«\»,]\s+)($np)/g) { $names{$_}++;}
if ($opt{em}) {
for (/$em\s+($np)/g) { $gnames{$_}++;}}
if ($opt{prof}) {
while(/\b($prof)\s+(?:(?:$sep1)\s+)?($np)/g)
{ $profissao{$2} = $1 }
while(/(?:[\w\«\»,]\s+|[(])($np),\s*(?:(?:$sep2)\s+)?($prof)/g)
{ $profissao{$1} = $2 }
}
}
# tratamento dos nomes "duvidosos" = Nome prop no inicio duma frase
#
for (keys %namesduv) {
if(/^(\w+)/ && $vazia{lc($1)}) { # exemplo "Como Jose Manuel"
s/^\w+\s*//; # retira-se a 1.a palavra
$names{$_}++
} else {
$names{$_}++
}
}
return (%names)
}
=head2 printPN
printPN("oco")
printPN - extrai os nomes próprios dum texto.
-comp junta certos nomes: Fermat + Pierre de Fermat = (Pierre de) Fermat
-prof
-e "Sebastiao e Silva" "e" como pertencente a PN
-em "em Famalicão" como pertencente a PN
=cut
sub printPN{
local $/ = ""; # input record separator=1 or more empty lines
my %opt;
@opt{@_} = @_;
my (%profissao, %names, %namesduv, %gnames);
while (<>) {
chop;
s/\n/ /g;
for (/[.?!:;"]\s+($np1\s+$np)/g) { $namesduv{$_}++ }
for (/[)>(]\s*($np1\s+$np)/g) { $namesduv{$_}++ }
for (/(?:[\w\«\»,]\s+)($np)/g) { $names{$_}++ }
if ($opt{em}) {
for (/$em\s+($np)/g) { $gnames{$_}++ }
}
if ($opt{prof}) {
while(/\b($prof)\s+(?:(?:$sep1)\s+)?($np)/g)
{ $profissao{$2} = $1 }
while(/(?:[\w\«\»,]\s+|[(])($np),\s*(?:(?:$sep2)\s+)?($prof)/g)
{ $profissao{$1} = $2 }
}
}
# tratamento dos nomes "duvidosos" = Nome prop no inicio duma frase
#
for (keys %namesduv){
if(/^(\w+)/ && $vazia{lc($1)} ) #exemplo "Como Jose Manuel"
{s/^\w+\s*//; # retira-se a 1.a palavra
$names{$_}++;}
else
{ $names{$_}++;}
}
##### Não sei bem se isto serve...
for (keys %names){
if(/^(\w+)/ && $vazia{lc($1)} ) #exemplo "Como Jose Manuel"
{ my $ant = $_;
s/^\w+\s*//; # retira-se a 1.a palavra
$names{$_}+=$names{$ant};
delete $names{$ant};}
}
if($opt{oco}){
for (sort {$names{$b} <=> $names{$a}} keys %names )
{printf("%6d - %s\n",$names{$_}, $_ );}
}
else
{
if($opt{comp}){my @l = sort _compara keys %names;
_compacta(\%names, @l); }
else{for (sort _compara keys %names )
{printf("%60s - %d\n", $_ ,$names{$_});} }
if($opt{prof}){print "\nProfissões\n";
for (keys %profissao){print "$_ -- $profissao{$_}";} }
if($opt{em}){print "\nGeograficos\n";
for (sort _compara keys %gnames )
{printf("%60s - %d\n", $_ ,$gnames{$_});} }
( run in 0.524 second using v1.01-cache-2.11-cpan-8dfa8b56332 )