智能模式匹配在字符串中

假设我有一些格式不同的文件名。我希望能够像人类一样从这些文件名中提取某些信息;这需要模式识别能力。

显然,我可以通过正则表达式强行解决这个问题,但这并不是我想要的。假设我有这四个字符串:

[MAS] Hayate no Gotoku!! 20 [BD 720p] [21D138F8].mkv[Leopard-Raws] Akatsuki no Yona - 05 RAW (MX 1280x720 x264 AAC).mp4[BLAST] Wolf Girl and Black Prince - 05 [720p] [C1252A5E].mkv[sage]_Mobile_Suit_Gundam_AGE_-_36_[720p][10bit][45C9E0D0].mkv

如你所见,所有这些文件名都有一定的模式,但并不完全相同。因此,通用的正则表达式无法解决这个问题。相反,我想探索计算智能技术,如人工神经网络(ANN)或其他智能方法来解决这个问题。

假设我们想要提取文件名。人类会返回这些值:

Hayate no Gotoku!!Akatsuki no YonaWolf Girl and Black PrinceMobile Suit Gundam AGE

或者是集数:20, 05, 05, 36。你明白我的意思了。

有什么建议的技术可以用来达到预期的结果吗,或者这是大学里正在研究但尚未解决的问题吗?


回答:

你所寻找的被称为语法归纳,它通过让程序找出一个正则表达式(或其他类型的模式)来匹配某些字符串而不是其他字符串来工作。然而,你必须自己提供字符串,称为训练集,包括正面例子(应该匹配的字符串)和负面例子(不应该匹配的字符串)。

一种有趣的技术被称为提升,你可以学习许多简单的模式,这些模式是精确的(不匹配负面例子)但只匹配少数正面例子;然而,当它们结合在一起时,会匹配大量的正面例子。

由于你想提取子字符串而不是仅仅匹配字符串,我会采取的方法是取文件名的前缀并尝试匹配它们。这样你就知道子字符串从哪里开始了。这里有一个例子:

Positives:[MAS] [Leopard-Raws] [BLAST] [sage]_Negatives:[MAS] H[Leopard-Raws] Akat[BL[sage]_Mobile_Suit_Gundam_AGE_

如果操作正确,你应该能得到一个可以用于文件名前缀的正则表达式。通过一次增加一个字母的前缀,你可以知道感兴趣的内容从哪里开始。像这样:

[ False[s False[sa False[sag False[sage False[sage] True[sage]_ True[sage]_M False

这里发生的事情是我一次增加一个字符的文件名前缀,直到我学习的正则表达式匹配它。但我也想找到最长的匹配前缀(因为否则我会错过下划线,因为[sage]也是一个可接受的前缀),所以我继续向前移动,直到正则表达式不再匹配。这样我就会知道实际内容之前的前缀是”[sage]_”。你也可以用包含感兴趣内容的前缀来匹配它结束的位置。

要了解正则表达式学习,请查看这个帖子。请记住,自动学习永远不会是完美的,但你使用的例子越多,它就越准确。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注