0

私は次のようなオーディオブックのパーツのリストを持っています。

20,000 Leagues Under The Sea
A Tale of Two Cities Part 1 of 2
A Tale of Two Cities Part 2 of 2
A Canterbury Tale 1
A Canterbury Tale 2
Great Expectations

そして、私はDb正規化と同様にリストを折りたたむことを試みています...

20,000 Leagues Under The Sea
    (Parts = {"20,000 Leagues Under The Sea"})
A Tale of Two Cities
    (Parts = {"A Tale of Two Cities Part 1 of 2", "A Tale of Two Cities Part 2 of 2"})
A Canterbury Tale
    (Parts = {"A Canterbury Tale 1", "A Canterbury Tale 2"})
Great Expectations
    (Parts = {"Great Expectations"})

これで、特定の数値パターンで終わるすべてのエントリを引き出すことができましたが、かなりの数の形式(、、、または単に)を処理する必要が1/2あり1 of 2ます2。番号を削除した後、オプションの「パーツ」を削除できます。

しかし、それはすべて少し不格好なようです。グループを識別するためのより良い方法があるはずだと感じています。おそらく、「最後のn文字だけが異なるエントリを検索する」という行に沿ったものでしょうか。

誰かがこれを行うためのエレガントな方法を教えてもらえますか?

4

1 に答える 1

1

5 ~ 6 行のクルーゲが機能する場合は、それを維持してみませんか?

さまざまなエピソードをマークするさまざまな方法があるため、これは一般的なケースではかなり難しい問題です。YouTube 動画である程度は解決しましたが、完璧にはほど遠いものでした。あなたが言うように、多くの異なる形式がありますが、それらは 2 つの一般的な形式のいずれかを取ります。

<name><episode>
<episode><name>

は書籍/ビデオ シリーズの名前で、さまざまな形をとることができます。しかし、それらでさえ通常は次のとおりです。

[word]<epidose-number>[of][<total-episodes>]

[word] はオプションで、「part」、「episode」、「installment」、「scene」などのいくつかの単語のいずれかです。[of] は通常存在し、通常は「of」、「/」、「-」です。など。著者が同じシリーズの形式を混在させることもありました。一貫性のない命名により、問題はさらに複雑になります。したがって、次のことがわかります。

My vacation, part 1 of 3
Vacation, tape 2
Part 3 of my vacation

エピソードの命名と番号付けを標準化できる限り、問題は解決しやすくなります。たどり着いた解決策は辞書を使用していましたが、並べ替えを使用することもできます。私たちの解決策は、基本的に次のとおりでした。

  • ビデオごとに、名前とエピソード番号を導き出します。(これにはカスタム パーサーといくつかのヒューリスティックを使用しましたが、異なるエピソードの番号付けスキームの数がかなり少ない場合は正規表現を使用できます。私たちにとって難しい部分は名前の照合でしたが、タイプミスがないと仮定すると名前、これは扱いやすいです。)
  • これら 2 つのデータからオブジェクト インスタンスを作成する
  • そのインスタンスをすべてのアイテムのリストに追加します

それができたら、リストを名前とエピソードで並べ替えるのは簡単なことでした。

どのソリューションを選択するかは、データのクリーン度に完全に依存します。ほんの一握りの異なるエピソード形式でかなりきれいな場合は、正規表現ソリューションを強くお勧めします.

于 2013-02-24T04:57:26.257 に答える