Bulanık Metin Arama: Regex Joker Arama Jeneratör?

2 Cevap php

PHP bulanık dize eşleştirme yapmak şekilde bir tür olup olmadığını merak ediyorum. , Uzun bir dize içinde bir kelime arıyorsanız hatalı yazıldığından bile potansiyel bir maç bulmak; nedeniyle bir OCR hata bir karakter kapalı olsaydı onu bulmak bir şey.

Ben bir regex jeneratör bunu yapmak mümkün olabileceğini düşünüyordum. Yani "deli" bir giriş verilen bu regex oluşturmak olacaktır:

.*((crazy)|(.+razy)|(c.+azy)|cr.+zy)|(cra.+y)|(craz.+)).*

Daha sonra o kelimenin o kelime veya varyasyonları için tüm eşleşmeleri dönecekti.

How to build the generator: I would probably split the search string/word up into an array of characters and build the regex expression doing a foreach the newly created array replacing the key value (the position of the letter in the string) with ".+".

Bu bulanık metin araması yapmak için iyi bir yoldur ya da daha iyi bir yolu var mı? Ne bana ne kadar yakın olduğunu dayalı bir puan verir dize karşılaştırma bazı tür hakkında? Bazı kötü dönüştürülen OCR metin kısa bir kelime varsa ben görmek için çalışıyorum.

2 Cevap

Eğer doğru kelimenin ne olduğunu bilmiyorum zaman dize mesafe işlevleri işe yaramaz. Ben Pspell fonksiyonları öneririm:

$p = pspell_new("en");
print_r(pspell_suggest($p, "crazzy"));

http://www.php.net/manual/en/function.pspell-suggest.php

Levenshtein bir String bir örneğidir Edit-distance. Farklı amaçlar için farklı ölçütleri vardır. Onlarla tanışın ve sizin için çalışan birini bulmak.