2017-09-09 9 views
0

私はOCRプログラムに取り組んでいます。その中にテキストが入っている写真(この場合は運転免許証)と、最初の名前と最後のもの名前を引数として使用します。C#同じような針をhaystackで探している(OCRの場合)

ソフトウェアがID写真を読み取ると、認識されたテキストの姓と名を検索します。残念なことに、画質がかなり低くなる可能性があるため、の名前が正しく表示されないことがあります。

干し草の中に似た針を探す方法はありますか?つまり、名字に似た出現を探しますか?例:

Needle: campbell 

Haystack: 
operaioxsllcence 
gcltdriver 
exries13NOV2020 
carnpbeiljtttj 
... 

「carnpbeil」の文字列は十分に近いです。

これは私が今使っているもので、それだけで非常に特定の状況で役立ちます。

private bool SourceContains(string haystack, string needle) 
    { 
     bool ret = false; 
     if (haystack.Contains(needle) || 
       haystack.Replace("l", "i").Contains(needle) || 
       haystack.Replace("i", "l").Contains(needle) || 
       haystack.Replace("0", "o").Contains(needle) || 
       haystack.Replace("o", "0").Contains(needle) || 
       haystack.Replace("j", "d").Contains(needle) || 
       haystack.Replace("d", "j").Contains(needle) || 
       haystack.Replace("i", "j").Contains(needle) || 
       haystack.Replace("j", "i").Contains(needle) || 
       haystack.Replace("e", "f").Contains(needle) || 
       haystack.Replace("f", "e").Contains(needle) || 
       haystack.Replace("r", "p").Contains(needle) || 
       haystack.Replace("p", "r").Contains(needle) || 
       haystack.Replace("s", "r").Contains(needle) || 
       haystack.Replace("r", "s").Contains(needle) || 
       haystack.Replace("r", "n").Contains(needle) || 
       haystack.Replace("n", "r").Contains(needle) || 
       haystack.Replace("k", "n").Contains(needle) || 
       haystack.Replace("n", "k").Contains(needle) || 
       haystack.Replace("h", "n").Contains(needle) || 
       haystack.Replace("n", "h").Contains(needle) || 
       haystack.Replace("k", "ll").Contains(needle) || 
       haystack.Replace("ll", "k").Contains(needle) || 
       haystack.Replace("ci", "d").Contains(needle) || 
       haystack.Replace("d", "ci").Contains(needle) || 
       haystack.Replace("cl", "d").Contains(needle) || 
       haystack.Replace("d", "cl").Contains(needle) || 
       haystack.Replace("m", "in").Contains(needle) || 
       haystack.Replace("in", "m").Contains(needle) || 
       haystack.Replace("rn", "m").Contains(needle) || 
       haystack.Replace("m", "rn").Contains(needle) 
       ) 
     { 
      ret = true; 
     } 
     return ret; 
    } 

答えて

0

各単語についてhaystackにはneedlelevenshtein distanceを計算します。最短距離の単語があなたの針になる可能性が最も高いです。実装についてはthis questionをご覧ください。

+0

残念ながら、検出された単語が正しく分割されないことがあります。私が示した例のように、 "carnpbeil"はCampbell(LOOKも同じ)にマッチしますが、 "word"は "carnpbeiljtttj"です。 私がこれを改善する唯一の方法は、送信された画像の品質を向上させることだと思います。 –

関連する問題