0

背景:

我正在开发一个程序,它遍历存储在我的计算机上的所有电影和电视剧集,对它们进行评分(使用烂番茄)并按评分顺序对它们进行排序。

我通过从文件名中删除所有不必要的文本(例如“.avi”、“720p”等)来提取电影名称。

我正在使用 Java。

问题:

某些文件夹包含电影文件,例如:

第301话热带雨林Schmainforest.avi

第302话自燃.avi

“剧集”这个词和数字是有效的,并且是电影中的常用词,所以我不能简单地删除它们。但是,从名称的重复性中可以清楚地看出“Episode”和“3XX”应该被删除。

另一个文件夹可能是:

720p.S5.E1.cripple Fight.avi

720p.S5.E2.towelie.avi

许多像这样的 任意模式存在于不同的文件组中,我需要一些东西来识别这些任意模式,以便我可以提取关键字。为每种情况编写正则表达式是不可行的。

概括:

是否有工具或 API 可用于查找复杂的重复模式(必须能够匹配数字序列)?[类似于最长的公共序列库]

4

3 回答 3

2

好吧,您可以简单地在您的目录中获取所有过滤后的名称,然后进行简单的字数统计。您可以对每次(大致)出现在同一地点的单词给予额外的重视。

最后你会得到一个计数和一个重量,你需要决定画什么线。可能不是目录中的每个文件(因为可能是图像或样本),但如果大多数都有某个词,它不是“the”或类似的东西,而且可能它们都出现在“开始”或“第二个”点”,您可以过滤它们。

但这不适用于随机示例 Friends 剧集。他们都被称为“那个......”。这将在您广受欢迎的算法的每个健全版本中进行过滤

底线是:由于朋友剧集问题,我认为你不能。想要的重复和不需要的重复之间没有足够的区别。

您唯一能做的就是将您想要过滤的内容列入黑名单,就像您似乎已经对 avi / 720 所做的那样。

于 2012-04-14T07:25:28.653 回答
1

我相信你所要求的并不是微不足道的。与单纯的识别相反,模式提取完全属于人工智能知识发现领域。我遇到了几个与 Java 相关的库,但大多数都需要大量额外的代码来定义即使是最简单的任务。

由于这是一个相当热门的研究领域,您可能希望在Google Scholar中使用适当的关键字进行粗略搜索。

免责声明:在您使用通过 Internet 找到的任何库或算法之前,您应该调查其法律状态。不幸的是,在活跃的研究领域中开发的许多算法经常受到专利的阻碍,等等……

于 2012-04-14T07:25:01.053 回答
0

我在这里发布了一个答案
http://pastebin.com/Eb0cQyKd

我想删除文件名的非唯一部分,例如“720dpi”、“Episode”、“xvid”、“ac3”,而不事先指定它们是什么。但我想保留像 S01E01 这样的信息。我创建了一个巨大的黑名单,但它并不方便,因为黑名单一直在变化。

上面链接的代码使用 Python(不是 Java)来删除文件名中的所有非唯一单词。基本上,它会创建文件名中使用的所有单词的列表,以及它放入字典中的大多数文件中出现的任何单词。然后它遍历文件并从中删除所有这些字典单词。

该脚本还进行了一些清理:一些电影使用下划线 ('_') 或句点 ('.') 来分隔文件名中的单词。我将所有这些转换为空格。

我最近使用了很多,而且效果很好。

于 2013-09-15T09:38:36.533 回答