编写一个能够学习如何重命名的程序?

发布于 2022-09-12 22:07:46 字数 1855 浏览 19 评论 0

问题描述

先说下背景,问题是这样的。我经常用下载软件去一些网站上下载新番回来看,但是每次下载新番都会遇到一些烦心事,比如:
image
image
这样的文件名我非常不喜欢,所以我写了一个脚本来批量修改这些文件名,脚本大致如下:

const fs = require('fs')
const path = require('path')
const file_path = [
    [
        "D:\\download\\[DMG][OVERLORD_II][01-13 END+SP01-13 END][1080P][HEVC_Ma10P][MKV]",
        /\[DMG\]\[OVERLORD_II\]\[(\w*\d+)(?:\sEND)*\]\[1080P_Ma10P\]\[HEVC_AAC\]\(\w+\)(.+)/,
        "不死者之王2-",
    ],[
        "D:\\download\\[SumiSora][NEW_GAME!!][01-12][MKV][1080p]",
        /\[SumiSora\]\[NEW_GAME!!\]\[(\d+)\]\[x265_aac\]\(\w+\)(.+)/,
        "NEW GAME!!-",
    ]
]
file_path.forEach((content) => {
    fs.readdir(content[0], (err, file_arr) => {
        file_arr.forEach((filename) => {
            let arr = filename.match(content[1])
            if (arr != null) {
                let idx = arr[1]
                let suffix = arr[2]
                let old_path = path.join(content[0], filename)
                let new_path = path.join(content[0], content[2] + idx + suffix)
                fs.rename(old_path, new_path, (err) => {
                    if (err) {
                        throw err
                    }
                    console.log('Rename complete!', content[2] + idx + suffix)
                })
            }
        })
    })
})

说白了就是遍历所有文件,正则匹配对应规则,提取出集数,然后重命名。

但是这并不是非常好的办法,因为每当我又多下载了一部番的时候就需要去修改这个脚本添加新的正则规则,很烦躁。然后我就在想有没有更好的办法做这个。

我想过遍历剔除相同的字符串只保留不同的部分,这样就可以得到集数了,但有些特殊情况,比如有剧场版,名字虽然类似但集数不太一样,还比如SP的集数跟普通集数在一个文件夹里,也需要考虑处理,总之这个办法写代码也感觉不够通用。

然后我又想到了是否能够用机器学习的方法来写个程序训练它去识别这样的文件名,然后它之后就能自动帮我重命名。初步的想法是写一个贝叶斯分类器,然后我先标识一遍哪些是有用的词,让它能学习到从类似的文件名中筛选出集数这样的关键信息,只要到这一步就够了,后面我拼我想要的文件名和后缀之类的都挺容易。但我看了下网上的类似机器学习的库或者是分词库没了头绪。。。没写过机器学习的类似功能,有没有朋友能给个思路之类的,谢谢。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文