0

システムで最も多くの倍音を含む曲に注意を向けて、音楽ライブラリをクリーンアップしたいと考えています。それらをすべてリストし、並べ替えて手動で行うこともできますが、時間がかかりすぎます。最も可能性の高い重複でリストを並べ替えたいと思います。したがって、曲に 10 個の重複がある場合、互いに似ている曲名が 10 個あることを意味するため、最初にその曲に注意を向けて、最良のバージョンを維持します。

レーベンシュタイン文字列比較技術と gem を使用して、2 つの曲名を比較できました。

require 'levenshtein'
Levenshtein.distance("string1", "string2") => 1

しかし、x 個の曲があるとしましょう。通常のファイルの並べ替えに頼ることができないため、各曲を x 回比較する必要があります。例えば

The Beatles - Hey Jude
Beatles, The - hey jude
Beatles_-_Hey_Judy_(remastered)

ビートルズをあげるべき - ヘイ・ジュディ (x3)

ファイル名に基づいてインデックスを作成し、それを並べ替えて、すべての重複を降順で表示する方法はありますか? 比較できるハッシュの一種?

私は他の音楽比較方法を知っていますが、それらには欠点があり、これは他のタイプのファイルの比較にも使用できます。

4

1 に答える 1

3

このコードを使用してみてください

filesはファイル名の配列でありmax_distance、名前が類似していると見なすための最大距離です。

hash = {}
files.each do |file|
  similar = hash.keys.select { |f| Levenshtein.distance(f, file) < max_distance }
  if similar.any?
    hash[similar.first] += 1
  else
    hash.merge!({file => 0})
  end
end

その後、hashファイル名をキーとして、「重複」を値としてカウントするを取得し、必要に応じて並べ替えることができます。

于 2012-04-28T19:06:29.350 に答える