3

誰かが間違った変数を入力した場合に正しい部分を返すことができることを確認する必要があるクライアントのために、バリエーション/シノニム テーブルを作成する必要があります。

たとえば、パーツ ID が GRX7-00C の場合。クライアントがこれをパーツ テーブルに入力すると、この製品のバリエーションを格納するバリエーション テーブルが自動的に作成されます。GBX7-OOC と同様 (数字の 0 の代わりに文字の O)。または、番号が 1 の場合は、L または I を使用できるようにします。

したがって、パーツ GRL8-OOI がある場合、バリエーション テーブルで以下を関連付けることができます。

  • GRI8-OOI
  • GRL8-0OI
  • GRL8-O0I
  • GRL8-OOI
  • 等....

私は現在、これを手動で入力していますが、これらのパーツにはさまざまなバリエーションがある可能性があります。それで、このための自動プロセスを作成する方法について誰かが良い考えを持っていますか?

C# や SQL でこれを行う方法に完全に困惑しています。

ありがとう!

4

4 に答える 4

4

私は C# プログラマーではありませんが、他の .NET 言語の場合は、類似したCHARACTERSのリストを作成し、それらをグループ化し、RegEx を使用して一致するかどうかを評価する方が理にかなっています。

つまり、あなたの例では:

オリジナル:

GRL8-001

正規表現展開:

GR(l|L|1)(8|b|B)-(0|o|O)(0|o|O)(1|l|L)

これは、交換可能な文字のテーブルを用意し、replace 関数を実行して文字の RegEx を自動的にサブすることで実現できます。

于 2011-07-15T19:59:47.340 に答える
3

Lookex 関数の疑似コード (soundex のように機能しますが、sound alike ではなく look alike)

string input
for each char c
  if c in "O0Q" c = 'O'
  else if c in "IL1" c = 'I'
  etc.

単一の Lookex コードを計算し、それを各製品 ID とともに保存します。ユーザーのエントリが製品 ID と一致しない場合は、エントリの Lookex コードを計算し、そのコードを持つすべての製品を検索します (複数存在する可能性があります)。これは最小限のスペースを消費し、単一のインデックスで非常に高速であり、計算も安価です。

于 2011-07-15T20:02:07.137 に答える
0

同義語のルートにはまったく行きません。

標準のルール セットを使用して、データベース内のすべての値をクレンジングします。

存在するすべての値について、すべての「0」を「O」に置き換えたり、ダッシュなどを取り除いたりして、実際の値ごとに変更された値が 1 つだけになり、それを別のフィールド\テーブルに保存します。

次に、同じ方法で入力をクレンジングし、2 つの部分からなる一致を行います。実際のデータベース値に対して実際の入力文字列を確認し (これにより正確な一致が得られます)、次に、クレンジングされた入力をクレンジングされた値に対してチェックします。次に、レーベンシュタイン距離などの距離計算を使用して実際のデータベース値に対して出力を並べ替え、最も可能性の高い一致を取得します。

次に入力します: GRL8-OO1

パーツ付き:GRL8-00I & GRL8-OOI

これらはすべて同じ値 GRL8OOI に正規化されますが、距離の一致は GRL8-OOI の方が近いため、それが最も近い賭けになります。

これにより、部品番号の「一意性」が劇的に低下しますが、2 つの部品の一致とレーベンシュタインの組み合わせにより、探しているものが得られるはずです。

利用可能なレーベンシュタインの T-SQL 実装がいくつかあります。

于 2011-07-18T14:50:02.410 に答える
0

上記の入力を踏まえて、私は同義語のテーブルを保存するのではなく、一連のルールをマスター ディクショナリに対してチェックします。たとえば、ユーザーが辞書にない値を入力した場合は、O を 0 に変更し、辞書に存在するかどうかを確認します。GR を GB に変更し、それを確認します。上記の許可したいすべてのバリエーションは、一度に 1 つまたは組み合わせて適用し、結果のエントリが存在するかどうかを確認できるルールとして説明できます。そうすれば、維持および更新する同義語の膨大な辞書を用意する必要がなくなります。

于 2011-07-15T19:56:31.810 に答える