open-ani / animeko

一站式在线弹幕追番平台:全自动 BT + 在线多数据源聚合,离线缓存,Bangumi 收藏同步,弹幕云过滤 ... 100% Kotlin Compose Multiplatform
https://myani.org
GNU Affero General Public License v3.0
1.93k stars 59 forks source link

L1中正则`collectionPattern`匹配不到 OAD 等 #671

Open xrz-cloud opened 3 months ago

xrz-cloud commented 3 months ago

进度

问题描述

在部分情况下无法匹配到OVA等

示例标题

[DBD-Raws][约会大作战 第一季/Date a Live S1/デート・ア・ライブ][导演剪辑版/Director's Cut/ディレクターズカット版][01-12TV全集+OAD][1080P][BDRip][HEVC-10bit][简繁外挂][FLAC][MKV] 且DBD-Raws的所有合集均会出现全集字段。

collectionPattern参与匹配的字符

01-12TV全集+OADepisodeRemove后变为01-12TV全+OAD接着参与collectionPattern匹配

期望匹配到

01-12TV全+OAD

"groups": {
    "start": "01",
    "extra": "OVA",
    "end": "12"
}

匹配到的字符

01-12TV

"groups": {
    "start": "01",
    "extra": null,
    "end": "12"
}

可能的修复方案

加上全(集)的匹配

(?<start>(?:SP)?\d{1,4})\s?(?:-{1,2}|~|~)\s?(?<end>\d{1,4})(?:TV|BDrip|BD)?(?:全(集)?)?(?<extra>\+.+)?

复现步骤

No response

Ani 版本号

3.6.0-beta02

操作系统

No response

应用日志

No response

Him188 commented 3 months ago

都看到这一步了,不考虑PR吗

xrz-cloud commented 3 months ago

等我看看还有没有别的例外情况

Him188 commented 3 months ago

等我看看还有没有别的例外情况

这个 parser 有 test generator(就在模块里),你可以给他“约会大作战”,它去动漫花园搜索然后生成一千个用例。直接肉眼扫一眼用例就知道有哪些情况没有解析出来了

https://github.com/open-ani/ani/blob/master/data-sources/api/test-codegen/src/main/AddMoreData.kt

https://github.com/open-ani/ani/blob/master/data-sources/api/test-codegen/src/main/GenerateTests.kt

xrz-cloud commented 3 months ago

貌似还有类似 [DBD-Raws][进击的巨人 最终季/Shingeki no Kyojin: The Final Season/進撃の巨人 The Final Season][01-28TV全集+完结篇+特典映像][1080P][BDRip][HEVC-10bit][简繁日双语外挂][FLAC][MKV] [DBD-Raws][泽塔奥特曼/Ultraman Z/ウルトラマンゼット][01-25TV全集+特别篇+特典映像][1080P][BDRip][HEVC-10bit][FLAC][MKV] 解析出来extra分别是结篇+特典映像特别篇+特典映像,按道理要把+拆了,但这样又要该Combined(只有first和second),并且remove时把完结篇给匹配掉了。 感觉要改的逻辑有点多。

Him188 commented 3 months ago

combined 不用改吧,用Combined套就行(second 放 Combined,类似链表)

Him188 commented 3 months ago

这种问题处理不完的,我们可以一步一步解决,先解决 OAD

NeKoOuO commented 3 months ago

382 這個能一起解決嗎 問題看起來挺像的