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/21 of 2或只是2)。删除数字后,我可以剥离任何可选的“部分”,

但这一切似乎有点笨拙。感觉应该有一种更好的方法来识别组 - 也许类似于“查找仅在最后 n 个字符中不同的条目”?

有人可以指出我这样做的优雅方式吗?

4

1 回答 1

1

如果你的 5-6 行 kluge 有效,为什么不保留它呢?

在一般情况下,这是一个相当困难的问题,因为有很多不同的方法来标记不同的情节。我们通过 YouTube 视频在一定程度上解决了这个问题,但远非完美。正如您所说,有许多不同的格式,尽管它们采用两种一般形式之一:

<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

只要您可以标准化剧集命名和编号,问题就会变得更容易解决。我们得出的解决方案使用了字典,但您可以通过排序来完成。我们的解决方案基本上是:

  • 对于每个视频,推导出名称和剧集编号。(我们为此使用了自定义解析器和一些启发式方法,但如果不同的剧集编号方案的数量相当少,您可以使用正则表达式。对我们来说更难的部分是匹配名称,但如果您假设其中没有错别字名字,这很容易处理。)
  • 从这两条数据创建一个对象实例
  • 将该实例添加到所有项目的列表中

一旦我们这样做了,按名称和剧集对列表进行排序就很简单了。

您选择的解决方案将完全取决于您的数据的清洁程度。如果仅使用几种不同的剧集格式就相当干净,我强烈建议使用正则表达式解决方案。

于 2013-02-24T04:57:26.257 回答