0

動作するアルゴリズムを作成しましたが、実行時間は非常にひどいものです。はい、私はそれが恐ろしいことになることを最初から知っていますが、それほどではありません. わずか 200000 レコードの場合、プログラムは 1 時間以上実行されます。

基本的に私がやっていることは次のとおりです。

for each searchfield in search fields
    for each sample in samples
        do a q-gram matching
    if there are matches then return it
    else
        split the searchfield into uniwords
        for each sample in samples
            split sample into uniwords
            for each uniword in samples
                if the uniword is a known abbreviation
                    then search the dictionary for its full word or other known abbr
                else do a jaro-winkler matching
            average the distances of all the uniwords
            if the average is above threshold then make it as a match and break
        end for
        if there is a match make a comment that it matched one of the samples partially
    end else
end for

はい、このコードは非常にループに適しています。リコールが非常に重要であるため、私は総当たりを使用しています。だから、何百万ものデータの200000データに対して実行しているだけでなく、クライアントのコンピューターがハイエンドではないため、どうすれば高速化できるのでしょうか。このプログラムをテストするコンピューターは、4 GB の RAM を搭載したデュアル コアです)。TF/IDF に出会いましたが、それで十分かどうかはわかりません。どうすればグーグルはリアルタイムで検索できるのだろうか。

前もって感謝します!

編集:このプログラムはデータフィルターです。200,000 個のダミー データ (実際のデータは約 12M です) から、サンプルに関係のないデータをフィルタリングする必要があります (500 個のダミー サンプル、実際のサンプルの量はまだわかりません)。

与えられたダミーデータとサンプルでは、​​実行時間は約 1 時間ですが、あちこちいじくり回した後、10 ~ 15 分に短縮することに成功しました。同じ文字で始まるフィールドとサンプルをグループ化し (the、a、an などの特別で意味のない単語を割り引いて)、同じ最初の文字でフィールドをサンプルに一致させることで、それを軽減しました。そこに問題があることはわかっています。フィールドの最初の文字のスペルが間違っていた場合はどうなりますか? しかし、その数はごくわずかだと思います。サンプルは常に維持されているため、正しいスペルになっています。

4

1 に答える 1

0

あなたのプログラミング言語は何ですか?q=2 または 3 で十分だと思います。また、ユニグラムからより高い学位に進むことを提案しました。

于 2012-05-03T20:43:11.480 に答える