Search

是否有一個 Unix 命令可以搜尋相似的字元串,主要基於它們在說話時的聲音?

  • January 8, 2019

我有一個名稱文件,我想在其中搜尋,不太關心我是否正確拼寫了名稱(我正在搜尋)。我知道它grep有很多功能可以在文件或流中搜尋大量類似的字元串,但據我所知,它沒有糾正拼寫錯誤的功能,即使有,因為這些是人名,在標準字典中找不到。

也許我可以把我的名字文件變成一個特殊的字典,然後使用一些標準的拼寫檢查工具?在這個應用程序中特別重要的是能夠匹配發音相似的單詞。

例如:"jacob"應該返回"Jakob". 如果還考慮到語言間的相似性,那就更好了,所以"miguel"應該匹配"Michael"

這是已經實現的東西,還是我必須自己建構?

@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).

引用自:https://unix.stackexchange.com/questions/79377