1

ユーザーが送信先の Excel ファイルをアップロードできる Web アプリケーションがあります。ファイルがアップロードされると、行を読み取り、SQL Server データベースに挿入します。
SQL Server では、テーブル内の宛先のリストと宛先を照合する必要があります。データベース内の目的地のリストが参照であるため、マッチングは正確でなければなりません。

データベースからの宛先とユーザーがアップロードした宛先の例を次に示します (一致させる必要があります)。

  • データベースから: イギリス - モバイル - O2
  • ユーザーによってアップロードされました: United Kingdom - O2 Mobile

より正確なマッチングを行うための最良の方法は何ですか?

4

3 に答える 3

1

このような多くの問題を解決してきました。データベース データを一時テーブルの関連する列 (国、デバイス、ブランド) に分割します。データベースにインポートする前に、ユーザー入力データ (Excel) を関連する列 (国、デバイス、ブランド) に分割します。次に、Excel データを一時テーブルにインポートします。その後、必要に応じてマッチングを調整できます。

于 2013-06-10T12:13:44.080 に答える
1

この問題は、T-SQL だけでは解決できないと思います。残念ながら、T-SQL にはあいまい一致に適したアルゴリズムがありません。Soundex はあまり関係がなく、全文検索もこの問題には当てはまりません。

C# http://anastasiosyal.com/post/2009/01/11/Beyond-SoundEx-Functions-for-Fuzzy-Searching-in-MS-SQL-Serverで書かれた非常に優れたライブラリをお勧めします。などの多くの文字列メトリック アルゴリズムを実装し、SQL Server の CLR 関数としてインポートできます。大量のデータに対してパフォーマンスの問題が発生する可能性があります。

特にデータをインポートする場合は、SSIS パッケージを作成することをお勧めします。パッケージでは、Fuzzy Lookup Transformation ブロックを使用して類似点を特定できます: http://msdn.microsoft.com/en-us/magazine/cc163731.aspx。これを使用して、類似性に基づいて、100 万を超えるレコードを持つテーブルで重複を識別します。また、どちらの場合も、ビジネスの場合に正確に一致させるために類似性のパーセントを定義するために、いくつかのテストを実行する必要があります。

于 2013-06-05T12:13:35.210 に答える
0

マッチング アルゴリズムを定義する必要があります。一致する単語をカウントする場合、出現順序に関係なく、次のようになります。

declare @t table(field varchar(200))
insert into @t values('United Kingdom - Mobile - O2')
declare @upload varchar(200) = ' United   Kingdom  -  O2    Mobile noise'

-- Let's find matching words, no matter in what order they are!
declare @IgnoreChars varchar(50) = char(13)+char(10)+char(9)+'-.,'
select t.field,
    MatchedWords = SUM(CASE WHEN m.WordFoundAt=0 THEN 0 ELSE 1 END),
    TotalWords = COUNT(*)
from @t t
    CROSS APPLY dbo.str_split(dbo.str_translate(@upload, @IgnoreChars, REPLICATE(' ', LEN(@IgnoreChars))), ' ') w
    OUTER APPLY (SELECT WordFoundAt = CHARINDEX(w.id, t.field)) m
where w.id <> ''
group by t.field

結果:

field MatchedWords TotalWords

イギリス - モバイル - O2 4 5

関数 str_translate と str_split は組み込みではありませんが、添付ファイルが許可されていないため、ここに投稿する方法がわかりません。

于 2013-06-10T11:39:28.720 に答える