Search
是否有一個 Unix 命令可以搜尋相似的字元串,主要基於它們在說話時的聲音?
我有一個名稱文件,我想在其中搜尋,不太關心我是否正確拼寫了名稱(我正在搜尋)。我知道它
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).