2012-02-13 3 views
3

アーティストの正規表現(または他のテクニック)が、予測できない完全な曲タイトルを計算または「ベスト推測」するのに役立つでしょうか。正規表現(またはテクニック)は完全な曲のタイトルからアーティストを推測する?

次の曲のタイトルからDr Dreを見つける(ユーチューブからの例):

Xxplosive - Dr. Dre 
Dr Dre - Xxplosive 
Dr Dre- Xxplosive (lyrics) 
Dr. Dre - 05 - The Chronic - Nuthin' But AG Thang 

私の目的は、私が正しいアーティストを決定する必要があり、既存のAPIに送信しようとする可能性が最も高い2つのまたは3試合を、見つけることです。

+0

これらの5つの入力から2つの出力が得られれば問題ありませんか?たとえば、 "Xxplosive"と "Dr. Dre"はアウトプットとして、どのアーティストがアーティストであるかわかりません。 – FakeRainBrigand

+0

あなたが提供したデータで動作する唯一の方法は、アーチストの文字列を常に知っている場合です。この場合、名前自体を正規表現として使用することができます。 –

+0

私は、文章中のどの単語が名前を表しているかを推測するのに役立つ正規表現はないと思っています...標準の名前でも、最近誰かが音楽家のために思いつくすべてのランダムな仮名... –

答えて

8

/\s*-\s*のような正規表現を使用すると、 "Dr Dre - Xxplosive"が{Dr Dre,Xxplosive}のような配列になります。

そして、いずれかを使用して、あなたの分割セグメントに対して、検索用語Dr. Dreに一致する:

  • Levenshtein distanceO(log(n))、あなたのためにおそらくベストフィット)
  • MetaphoneO(1)、おそらく良いフィット感、偽陽性のための適度な電位)
  • Soundex(恐らく良好な適合性、偽陽性の可能性が高い)

トラックのリストが巨大な場合は、BKTreeを使用してください。

つまり、fuzzy/approximate string matchingまたはphonetic string matchingのいずれかを使用します。

Protip:検索用語の長さに関連してlevenshteinの制限を使用します(文字列が長いほど、上限が高くなります)。

+0

私の要件をはるかに超えていますが、素晴らしい洞察力、ありがとう! – sgb

1

なぜ正規表現を使用する必要がありますか?

単純な文字列分割作業を使用するだけではありませんか?文字列をダッシュ​​で分割し、トリムして各ビットをAPIに送ることができます。距離ベースの文字列近接アルゴリズムを使用して、曲タイトルのどのビットがアーティストである可能性が最も高いかを確認することができます

+0

ええ、私が探しているものを並べ替え、ここで正規表現という言葉を使用するのは完全に厳密ではありません – sgb

関連する問題