Yuukiy / JavSP

汇总多站点数据的AV元数据刮削器
GNU General Public License v3.0
2.5k stars 215 forks source link

支持演员艺名固定(演员多个艺名时均使用同一艺名处理) #228

Closed SummerDiver closed 6 months ago

SummerDiver commented 6 months ago

参考了之前另一位的 PR,不知道为何最终阵亡了:#181

使用一个 json 文件保存演员的艺名,针对数据集来源,我大概查看了几个网站,最后感觉可能只有 javdb 提供的信息比较合适,所以额外写了个函数从 javdb 来爬取并保存。

目前有以下问题可能需要进一步考虑:

  1. 数据的未来维护:个人认为可以考虑项目定期爬取更新与用户自定义相结合。实际使用中感觉容易存在别名冲突的主要就是枫哥、有腿那些改了名的较出名演员,有必要维护的也就那么些,可以项目自行爬取各类目下演员的前10页(约等于 Top500),提供的数据基本就能覆盖大多数用户需求了。实在没覆盖到的(小众 xp),用户自行编辑文件加入个别的演员也不是很费劲,毕竟个人理解这个功能主要就是为了解决“同一演员:放在了不同文件夹/在多媒体系统中识别为不同人/不便检索”类似的问题,完全可以由用户自行在检视结果时根据需要来修改。
  2. json 文件位置:我在代码中是放在了 data 文件夹下,在源码运行时没关系,但是打包为 exe 后用户就无法自行编辑了,考虑类似 config.ini 那样处理或者直接作为外置文件放在 exe 同目录下来读取和编辑。
  3. 数据爬取功能支持:目前只是写了爬虫函数,没有将其暴露给用户,我个人是通过直接运行 javdb.py 来爬的。需要考虑是否将这个功能提供给用户,目前有 2 种想法:(a)提供一个新的配置项,由用户选择是否需要在刮削时对每部影片的演员进行一次艺名查询(即边刮边更新),这样能保证人人有数据,但是增加了不少网络压力;(b)新增一个运行模式(同样还是根据配置项判断),该模式专门运行艺名爬虫,这样的话可能就有必要进一步丰富一下爬虫函数的参数,比如从第几页开始爬取什么的。
  4. 数据更新:这个功能支持用户自己设定固定使用哪个艺名,使得 json 文件有用户自定义配置的意义,这就导致不能通过直接覆盖来更新数据,可能需要额外写一个函数来实现 json 的无损更新。

其实感觉可以将爬虫和 json 文件这部分分离出来,新增一个项目或分支专门放置爬虫程序和 json 文件更新函数(如果会写)和最新爬取的 json 数据。原项目仅提供读取并根据 json 文件来在保存信息时固定艺名的功能(目前加入的代码效果基本就是这样子,只是 json 文件保存位置应该需要进一步考虑)。

Yuukiy commented 6 months ago

感谢PR。我去年底其实就有梳理过一些思路,但是最近工作挺累一直没有付诸实现,也还有一些问题没想好怎么处理。以下是之前的思路,希望能在讨论中得到完善。


JavLibrary的演员名鉴页面会按照罗马拼法的首字母显示演员的名称,通过切换语言可以获得同一演员的简中、繁中、英文、日文名。需要记录下演员的ID javdb记录了丰富的演员别名,但是默认显示的名字通常不是常用名。可以在演员详情页面,看到演员出现的影片。按照 【看过人数+单体作品】排序,取第一部影片,在JavLibrary中进行搜索,以此通过影片将演员关联起来。

即使如此可能获得的也不是常用名,比如 【田中檸檬, 田中レモン, 楓カレン, 楓花戀, 枫花恋】,现在她用的是田中的名字,但是更广为人知的是枫花恋。 可以以Google Trend输入一个词时,它返回的提示词作为(当前浏览器语言下)别名接受度的标准。以【枫花恋】为例,输入她的几个别名,返回的行业提示都是【枫花恋】 image

在仓库内保存两个文件,一个是直接扫描得到的,一个是扫描后人工校对差异项手动修改的

Yuukiy commented 6 months ago

关于数据更新,我倾向于由开发者进行维护,预计另开一个仓,同时接收PR更新,以减小对源站点的请求压力。另开一个仓的话,相应数据也更容易被其他有需要的项目(如果有)所使用

之前的PR被关闭主要是并没有预置一个足够的数据集,我认为这种状态很难称得上对用户可用。 此外,我比较倾向于最终使用csv格式管理数据,因为在Windows系统上csv容易借助Excel进行方便的编辑,方便用户自己添加整理数据,而不需要用户学习json格式。

SummerDiver commented 6 months ago

按照您的思路,如此实现下来确实工作量相当庞大,就数据爬取方面而言预计也会相当耗时。首先,我主要就功能定位大概有如下观点:


以上基本是我个人对功能定位的理解,接下来是我对具体实现思路的建议(可能涉及到代码实现的地方均是考虑使用 json 和字典的情况):


以上是个人目前的全部想法,核心观点其实就是将功能支持与数据提供分离,先把功能做了,至于数据可以另行考虑甚至另起项目维护。

另外,满足所有用户的长期需求可能是困难甚至不现实的(从您的设计思路来看,应该是尽可能地考虑了各种情况和潜在用户需要来设计),(就本项目而言)在实际进行功能设计时或许还是以能够满足大部分用户的目前可见需要为主,在考虑未来可扩展性的前提下进行小增量迭代设计与开发,“一步到位”可能并不是特别适合这种还在不断发展完善的长期维护开源项目。

Yuukiy commented 6 months ago

先提供基本功能再考虑完善这点您说得很有道理,有理有据,令人信服~不过数据格式这点我还是比较坚持采用csv。诚然github上很多用户是有技术背景的,编辑json并无困难,但有很多用户虽然拥有github账号可能只是用来提issue。csv的编辑门槛要低很多。