이름의 철자가 올바른지(검색 중인 이름) 여부에 대해 너무 신경 쓰지 않고 검색하고 싶은 이름 파일이 있습니다. 파일이나 스트림에서 많은 수의 유사한 문자열을 검색하는 기능이 꽤 많다는 것을 알고 있지만 grep
, 철자 오류를 수정하는 기능은 없으며, 설령 있었다 하더라도 이는 사람의 이름이기 때문에 , 표준 사전에서는 찾을 수 없습니다.
내 이름 파일을 특별한 사전에 넣은 다음 표준 철자 검사 도구를 사용할 수 있을까요? 이 응용 프로그램에서 특히 중요한 것은 비슷하게 들리는 단어를 일치시키는 기능입니다.
예를 들어, "jacob"
반환되어야 합니다 "Jakob"
. 언어 간 유사성도 고려하면 일치해야 "miguel"
합니다 "Michael"
.
이것은 이미 구현된 것입니까, 아니면 직접 구축해야 합니까?
답변1
@manatwork 말이 맞습니다. soundex가 여러분이 찾고 있는 도구일 수 있습니다.
CPAN을 사용하여 Perl Soundex 모듈을 설치합니다.
$ sudo cpan Text::Soundex
CPAN: Storable loaded ok (v2.27)
....
Text::Soundex is up to date (3.04).
테스트할 이름으로 가득 찬 파일을 만듭니다.names.txt
jacob
Jakob
miguel
Michael
이제 Soundex 모듈의 Perl 스크립트를 사용하여,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);
실행 가능하게 만들고 몇 가지 예를 실행하십시오.
$ 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).