Existe um comando Unix que procura por strings similares, baseadas principalmente em como elas soam quando faladas?

5

Eu tenho um arquivo de nomes, e eu quero procurar dentro dele, não me importando muito se eu soletrei o nome (que estou procurando) corretamente. Eu sei que grep tem um pouco de funcionalidade para procurar por uma quantidade enorme de strings similares dentro de um arquivo ou fluxo, mas, até onde eu sei, ele não tem funcionalidade para corrigir erros de ortografia, e mesmo se Como esses nomes são de pessoas, eles não seriam encontrados dentro de um dicionário padrão.

Talvez eu possa transformar meu arquivo de nomes em um dicionário especial e usar alguma ferramenta de verificação ortográfica padrão? De particular importância nesta aplicação é a capacidade de fazer o mesmo com palavras que soam.

Por exemplo: "jacob" deve retornar "Jakob" . Melhor ainda seria se as semelhanças entre linguagens fossem também consideradas, de modo que "miguel" deveria corresponder a "Michael" .

Isto é algo que já foi implementado, ou terei de construir o meu próprio?

    
por gabkdlly 14.06.2013 / 11:20

1 resposta

2

@manatwork está certo, soundex é provavelmente a ferramenta que você está procurando.

Instale o módulo perl Soundex usando o CPAN:

$ sudo cpan Text::Soundex
CPAN: Storable loaded ok (v2.27)
....
Text::Soundex is up to date (3.04).

Crie um arquivo cheio de nomes para testar chamado names.txt

jacob
Jakob
miguel
Michael

Agora o script perl usa o módulo Soundex, soundslike.pl

#!/usr/bin/perl

use Text::Soundex;

open(FH, 'names.txt');

$targetSoundex=soundex($ARGV[0]);
print "Target soundex of $ARGV[0] is $targetSoundex\n";

while(<FH>) {
    chomp;
    print "Soundex of $_ is ".soundex($_);
    if($targetSoundex eq soundex($_)) {
        print " (match).\n";
    }else {
        print " (no match).\n";
    }
}
close(FH);

Torne-o executável e execute alguns exemplos:

$ chmod +x soundslike.pl 
$ ./soundslike.pl michael
Target soundex of michael is M240
Soundex of jacob is J210 (no match).
Soundex of Jakob is J210 (no match).
Soundex of miguel is M240 (match).
Soundex of Michael is M240 (match).
$ ./soundslike.pl jagub
Target soundex of jagub is J210
Soundex of jacob is J210 (match).
Soundex of Jakob is J210 (match).
Soundex of miguel is M240 (no match).
Soundex of Michael is M240 (no match).
    
por 17.06.2013 / 15:04