[問題] 找出最接近的比對字串?

看板Perl作者 (HIHIHI)時間16年前 (2009/05/18 17:42), 編輯推噓5(504)
留言9則, 3人參與, 最新討論串1/2 (看更多)
如果有一個字串$s,要與一個都是字串的陣列@s做比對, 但需找出@s中,與$a比對結果最接近的字串,有沒有什麼好一點的作法... (最接近字串的字義是: 有最多字元相同) 小弟想到的很麻煩: foreach(@s){ if ($s=~/$_/){ push @match,$_; } } 接下來從@match中找出長度最長的字串... ,也就是最接近的字串... -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 59.124.185.18

05/18 18:48, , 1F
你說的"最接近"有更好的定義嗎?
05/18 18:48, 1F

05/18 19:08, , 2F
ex: $s="abcd" , @s=qw/ab bcd/ =>則bcd最近似
05/18 19:08, 2F

05/18 19:42, , 3F
先把要比較的 Pattern List 字串長度由長到短排序一下
05/18 19:42, 3F

05/18 19:42, , 4F
再套用 Aho-Corasick Algorithm 或 Wu-Manber Algorithm
05/18 19:42, 4F

05/18 19:42, , 5F
Pattern 數量少的話 建議使用 Wu-Manber 演算法比較好
05/18 19:42, 5F

05/18 23:09, , 6F
冉請問一下,patern list按長度排列,有什麼好方法嗎..
05/18 23:09, 6F

05/19 00:20, , 7F
依照字串長度 sort 一下不就好了 @@" 看一下 下一篇
05/19 00:20, 7F

05/19 11:42, , 8F
謝啦.@s = reverse( sort{length($a) <=> length($b)} @s );
05/19 11:42, 8F

05/19 11:44, , 9F
原來是卡在排序這裡,原以為只有數值大小可以排序
05/19 11:44, 9F
文章代碼(AID): #1A4Is9fi (Perl)
文章代碼(AID): #1A4Is9fi (Perl)