#1 - 2018-8-16 23:02
缘事析理
动机:为了把从各地搜刮来的黄油,里番,本子进行分类,我们自然希望靠脚本从数据库里查询到所下载的文件对应的游戏,获取更多的信息。比如可以查询到黄油对应的会社名称,从而进行整理。

问题描述:不同人上传的文件起的文件名大部分都是乱的。比如“[101224]Tiny Dungeon ~BLESS of DRAGON~(iso+mds+rr3)”或者是“[160624] [ぱれっとクオリア] オトメ*ドメイン + Drama CD + Radio CD + Manual + Wallpaper”。直接让脚本去查询整个文件名肯定是不会得到什么好结果的。

去掉一部分,看起来结果还不错

再去掉一点:

结果又不行了
但是起文件名规则都不一样,有的是方括号,有的是圆括号,有的是“+”,“_”等等,那么到底该取哪一部分进行查询呢?

解决办法:思路从一开始就错了。不应该是把资源和数据库对应,而应该是按数据库的名称去查找资源。
提高源的质量才是最根本的办法。现在基本只拖某站带有id的页面里的资源,还有bt站单一的一手源。
(现在的问题是重新打包的代价太大了……而且还是需要整理)
#2 - 2018-8-16 23:11
(天生万物以养人,人无一物以报天)
我也在苦恼这个事,不过我在苦恼怎么把番剧名跟bgm的条目对上……
#2-1 - 2018-8-16 23:27
Vincent
自己做算法搜吧,简单点的把数据稍微处理下丢 es 里什么的b38
#2-2 - 2018-8-18 03:11
bangumi大西王
Vincent 说: 自己做算法搜吧,简单点的把数据稍微处理下丢 es 里什么的b38
没法用es,只能用Python,虽然有各种包可用…

解决不了就准备每季度人工匹配了233
#3 - 2018-8-16 23:37
(情更怯)
有同样的想法,曾想根据名称把黄油的封面扒下了,以及匹配 Bangumi VNDB 的条目链接。
个人的思路是: 日期+游戏名称。 游戏名称尽量非贪婪匹配, 搜索结果先利用日期过滤,然后使用完整的文件名称 + fuzzy search 的库筛选
楼主举例的文件名分别是 2dj 、girlcelly 发布的档。游戏名称都还好判断吧,规律都是一致的。
#4 - 2018-8-17 04:54
(V1046-R MAHORO)
一个简单的正则就能对应90%的文件名了,加点逻辑判断估计99%没问题

当年写的对应eh下载的cg包的:

r'^(\((?P<prefix>.+?)\))* *(\[(?P<date>\d+)\])* *(\[(?P<brand>[^\]\[]+)\])* *(?P<title>[^\[].+?[^) ]) *([\[\(](?P<formats>[^\)\]]+)[\]\)])*(?P<is_sample>-1280x)*\.(?P<extension>(.+?))$'

(Python)

N久以前写的对应share的同人誌的:

            temp = temp.Trim();
            Regex EventRegex = new Regex(@"[((](?<event>C\d+?|COMIC.+?|サンクリ\d+?|SC\d\+?|東方[^Pp同 )]+?)[))]");
            if (EventRegex.IsMatch(temp))
            {
                Event = EventRegex.Match(temp).Groups["event"].Value;
                if (Event.Contains("SC"))
                    Event.Replace("SC", "サンクリ");               

                temp = temp.Replace(EventRegex.Match(temp).Value, "");
                temp = temp.Replace("  ", " ");
            }
            else
            {
                Regex myRe = new Regex(@"^[((](?<event>[^同]+?)[))][ ]*");
                if (myRe.IsMatch(temp))
                {
                    Event = myRe.Match(temp).Groups["event"].Value;
                    temp = temp.Replace(myRe.Match(temp).Value, "");
                    temp = temp.Replace("  ", " ");
                }
            }

            bool istouhou = false;
            if (temp.StartsWith("(東方)")||temp.StartsWith("(東方同人誌)"))
            {
                istouhou = true;
            }

            Regex MyRegex = new Regex(@"同人誌\)[ ]*\[(?<circle>.+?)\][ ]*(?<title>.+?)[ ]*(?<parodys>[([(].+[)\])])*$");
            Match MyMatch = MyRegex.Match(temp);
            GroupCollection groups = MyMatch.Groups;

(C#,很丑陋轻喷…)
#4-1 - 2018-8-17 08:53
缘事析理
主要是资源不是一个地方拖的。因为大部分论坛都是积分制,所以很多东西都得从积分白送的2手论坛收。就一个fgo的标签还能弄出fate grand order,fate/grand order之类的好几种形式。
更别说有的是罗马音,有的是片假名,有的直接上英文名,还有的混着来。
贴吧弄的cxx本子合集,都是这种鬼德行。
#5 - 2018-8-17 08:58
(616.sb)
mark
#6 - 2018-8-17 10:26
(BGMのTrinitas<=>婊冈妈<=>补冈妈<=>拜冈妈 三位一体 ...)
这种没办法,只能尽量往更大的数据库上靠.
#7 - 2018-8-17 10:46
看样子不能偷懒,还是只能针对每一种情况都单独判断。
#8 - 2018-8-17 12:27
(Nice Fever)
(bgm38)我苦恼的是音乐信息
#8-1 - 2018-8-20 09:48
#9 - 2018-8-17 12:41
(誰か散らせ 僕がここに居たという証も ...)
我也很苦恼,为何爱情动作片有番号,TV动画却没有
#9-1 - 2018-8-17 12:43
神戸小鳥
或许可以用BD编号(bgm38)
#9-2 - 2018-8-17 13:17
MousHu
前不久不是有个楼谈表番编号的事情么 ~
#9-3 - 2018-8-17 14:31
月火
神戸小鳥 说: 或许可以用BD编号
用商品去表示作品本身,原则上好像不妥...
给编号这件事本身又不难
#9-4 - 2018-8-17 14:32
月火
MousHu 说: 前不久不是有个楼谈表番编号的事情么 ~
site:bgm.tv 也找不到(bgm38)
#9-5 - 2018-8-17 14:42
MousHu
月火 说: site:bgm.tv 也找不到
... 那我试着手工翻一下 ~ (bgm93)
#9-6 - 2018-8-17 14:44
MousHu
月火 说: site:bgm.tv 也找不到
茶话会列表现在第五页就有 ...
https://bgm.tv/group/topic/346533
#9-7 - 2018-8-18 01:23
月火
MousHu 说: 茶话会列表现在第五页就有 ...
https://bgm.tv/group/topic/346533
谢谢(bgm61)
#9-8 - 2018-8-20 06:36
事实是柿子 - ⭐️VIP3
某种程度上番号真的是个好东西(bgm38)
#10 - 2018-8-18 04:22
不如来一发机器学习? (bgm38)
#10-1 - 2018-8-18 08:38
bangumi大西王
训练好的模型在吗(bgm38)
#11 - 2018-8-18 09:05
(明天,我就要去屠龙(失恋了,不想再屠龙了) ...)
除了文件名还有什么可以获得正确标题的方法吗?比如标题栏的信息能不能提取出来。
#11-1 - 2018-8-18 09:34
缘事析理
一般黄油的话,基本都是拿光盘镜像收藏。不知道有什么方便的操作压缩包里光盘镜像的方法……
#12 - 2018-8-18 10:25
(Information doesn't harm)
游戏有像图书一样的ISBN号码么
#12-1 - 2018-8-18 10:58
缘事析理
既然有数据库,自然就会有唯一对应的代码。
问题发资源的人不会去加这个代码。
#13 - 2018-10-19 13:09
(AWSL)
动画方面可以去扒一下弹弹play的接口。
弹弹play的根据文件名查动画名还是很准的。

本子方面就没辙了,想要较好解决你只能
要么选择获取更好的数据源,比如从大一点的论坛下本子而不是各种野鸡小论坛,或者直接从exhentai上拖本子,因为e绅士信息的完备信息记录下下载阶段就可以解决。

或者写一个半手动的脚本,提取关键字然后调用相关信息网页接口,手动从搜索结果里选择条目然后自动重命名。
这个其实和我写的本子管理系统有些相似。

我自己写的一个本子管理兼看本子恶系统,就是这样的。
首先将本子编入系统内,但是之后的本子名称规范化和标签怎么办,不可能手动去输入,那就从e绅士上扒了。
对于本子这种,其实你只要确保下载的资源质量,那么文件名的正则表达式只需要很简单几条就能对付相当多的本子资源


下图就是用正则自动抽取关键字,然后搜索e绅士,然后在搜索结果上手动点击一下符合条件的条目,就能自动录入标签了
#14 - 2018-11-17 01:05
((((;゚Д゚)))))))
或许可以参考一下猜视频文件名的工具? https://guessit.readthedocs.io/en/latest/
#15 - 2021-12-22 00:29
(cityhunter.me/anime/tags/?q=OVA 神作 童年)
洛阳马
#16 - 2021-12-22 01:19
不是很熟悉,但是似乎 VNDB 能提供全站数据库 dump,理论上可以手动拉下来做匹配。
这个问题似乎可以用 similarity calculation / record linkage / entity resolution 来建模,可以试试 Bergvca/string_grouper