字符串中的智能模式匹配

2024-04-16

假设我的文件名格式不同。我希望能够像人类一样从所述文件名中提取某些方面;模式识别。

显然,我可以使用正则表达式来暴力破解自己,但这不是我想要的。假设我有这 4 个字符串:

[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

正如您所看到的,所有这些文件名都有一定的模式,但并不完全相同。所以正则表达式的灵丹妙药并不能解决这个问题。相反,我想研究计算智能技术,例如人工神经网络或其他聪明的想法来解决这个问题。

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

Hayate no Gotoku!!
Akatsuki no Yona
Wolf Girl and Black Prince
Mobile Suit Gundam AGE

或剧集编号:20, 05, 05, 36。你明白我的意思了。

哪些建议的技术有助于实现预期的结果,或者这是大学正在研究但仍然没有解决方案的东西?


你正在寻找的东西叫做语法归纳 http://en.wikipedia.org/wiki/Induction_of_regular_languages它可以工作,但是让程序找出匹配某些字符串但不匹配其他字符串的正则表达式(或某种其他类型的模式)。然而,您必须自己给它字符串,称为训练集,其中包含正例(应匹配的字符串)和负例(不应匹配的字符串)。

一种有趣的技术称为boosting http://en.wikipedia.org/wiki/Boosting_(machine_learning)在那里你可以学到很多简单的模式,这些模式是精确的(不匹配负面例子),但只匹配一些正面例子;然而,当组合在一起时,将匹配大量的正例。

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

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]_”。您也可以通过使用包含感兴趣内容的前缀来执行相同的操作来匹配结束位置。

要了解正则表达式学习,请参阅此post https://stackoverflow.com/questions/616292/is-it-possible-for-a-computer-to-learn-a-regular-expression-by-user-provided-e。请记住,自动学习永远不会完美,但您使用的示例越多,它就会越准确。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

字符串中的智能模式匹配 的相关文章

随机推荐