不正確な一致の検索、入力エラーの検索

まえがき





当社には独自のCRMがあり、正確な住所を持つ特定の組織に関する情報が定期的にこのシステムに追加されます。主なことは、これらの住所は本質的に一意であるということです。ただしchelfakomによって制御されます*)。 最近、KLADRはシステムにねじ込まれましたが、万能薬でもありませんでした。 KLADRには多くの不正確さがあります。 ポイントは家番号などなしで残されました。 など。ただし、これらの住所は現実のものです(データは会社の従業員によって提供され、信頼性があります)。 一般に、住所の入力は、KLADRからのヒントとともに自由な形式で残されました。 フィールドの組み合わせを拒否したことをすぐに言いたいのは、 略語のさまざまな略語は前兆ではなく、似顔絵の住所も非常に容認されていました(「Ololoshskoe sh。5km」、「TC Veselchak U」、さらには「Central Market」)。 そして最後に、プログラマーの主な敵はchelfuckで、これは非識字とタイプミスからスティッキーなキーボードとタイプミスまでを暗示しています。 残りはカットの下にあり......





何がありますか





一方では、あるフィールドに特定のアドレスで満たされたデータベースがあり、他方では、すべての結果を従業員システムに報告するために急いでいます。 可能な限り重複からデータを保護したかったため、レコードの重複の可能性に関する警告をユーザーに表示することにしました。



問題解決





アルゴリズムについてできる限り正確にコメントしようとしたので、簡単な説明で説明します。







仕組み





以下はコードです。



function clearAddr($addr) { $associate = array( " " => "", //    "." => "", "." => "", "." => "", "." => "", "." => "", "." => "", "." => "", "." => "", "-." => "", "-" => "", "-." => "", "-" => "", "-." => "", "-" => "", "." => "", "" => "", ".-" => "", "." => "", "" => "", "." => "", "." => "", "." => "", "." => "", "." => "", "-." => "", "-" => "", "-" => "", "-." => "", "1-" => "", "2-" => "", "3-" => "", "4-" => "", "5-" => "", "6-" => "", "7-" => "", "8-" => "", "9-" => "", "1-" => "", "2-" => "", "3-" => "", "4-" => "", "5-" => "", "6-" => "", "7-" => "", "8-" => "", "9-" => "" ); $clrd_addr = strtolower(strtr($addr, $associate)); return $clrd_addr; } function getNums($search) { preg_match_all("/[0-9]*/", $search, $matches); $matches = array_diff($matches[0], array("")); //     $matches return $matches; } function getMatchAdress($addr_string, &$Addr_array) { if(!isset($addr_string) || strlen($addr_string) < 1) return false; $list = array(); $nums = getNums($addr_string); //       $addr_string = clearAddr(preg_replace("/[0-9]*/", "", $addr_string)); //     $word_parts = explode("\n", chunk_split(trim($addr_string), 2)); //       2  array_pop($word_parts); //     foreach($Addr_array as $row) { $word_match = 0; $last_pos = 0; //    $clr_row = clearAddr($row); $row_nums = getNums($row); //   ..    foreach($word_parts as $syllable) { $match_in = strpos($clr_row, strtolower(trim($syllable)), $last_pos); //  -   //        if($match_in > -1 && $match_in < $last_pos + 4) { $last_pos = $match_in + strlen(trim($syllable)); $word_match++; } } $all_percents = count($word_parts); //      $found_percents = $word_match; //    $match_perc = round($found_percents * 100 / $all_percents); //    $max_point = 70; //    //         if($match_perc >= $max_point) { if(!empty($nums)) { //      foreach($nums as $num) { if(in_array($num, $row_nums)) $list[] = $row; } } else { //    $list[] = $row; } } } return $list; }
      
      







それはどのように見えますか





データベースに含まれるもの:



. , .40

. , .14

4- ., .1

. , .15

., .6

. ., .48

...

...

...

. , .31/22

. , .23, . 41

. -, .11

- , .39, .1

4- ., .4

, .2









私たちは入り口で与える:Doryninsiy



出口には次のものがあります。



 Array ( [0] => 4-  ., .1 [1] => 4-  ., .4 )
      
      







検索クエリがドリニンスキーd.1のように見える場合、ゼロキーのみが表示されます。



利益!、生き延びてくれてありがとう。



All Articles