原来python应该这么念_不背台词念数字?那还不如学猫叫 —— 用Python帮流量们找到最佳对口型方案...
无意中刷到一条微博热搜,突然觉得也许 Python 也能为娱乐圈尽一份力:
没错,就是几年前曾经火爆网络的“数字小姐”话题 —— 演员不背台词,片场直接念“12345”,然后甩给后期配音。娱乐砖家的后院:“数字小姐”到底是谁并不重要zhuanlan.zhihu.com
果然,能够成为流量明星的,都是生产力大师!不过看到这里我也产生了一个困惑:为什么在片场时要念的口诀是“一二三四五”,而不是 “床前明月光”?须知不同文字念出来的口型往往不同,如果“一二三四五”与真正台词的口型相差太远,那么后期工作人员无论怎样精心剪辑与配音,最终都会被观众一眼识破。
于是,一个关乎影视业生死存亡的重要课题终于浮出水面:怎样找到一个即通俗好记、又口型切合的“台词口诀”?
怎么找?当然还是Python。不过考虑到直接做“口型识别”不仅要动用人脸识别等各种复杂技术、而且还需要准备好大量的视频素材,所以在影视大佬给我们提供资助之前,我们只能退而求其次:用“发音”代替“口型”。也就是假设:发音相近的汉字,它们的口型也会相近。
那么怎样判断两个汉字的发音是否相近呢?只要在网上检索“中文、发音、相似度”,就可以找到很多计算不同汉字之间发音相似度的算法论文。最终我们选定了由IBM的Min Li等研究员开发的“DimSim”算法,原因也很简单:它已经被做成了Python第三方库,可以直接使用我们最爱的pip 命令安装:
安装成功后,打开Python编辑器就可以马上感受它的威力:
比如上面这个IDLE交互窗口里,我们首先导入 dimsim 模块,然后调用它的 get_distance 方法,就可以检测任意两个汉字(词组或整句也可以)之间的“发音距离”。如果两个字发音相同(比如上面的“流”和“留”),那么get_distance就会返回数字0;而如果发音相近(比如上面的“流”和“六”),返回数字就会很小;而对于发音差别较大的文字(比如上面的“流”和“一”),返回数字则会很大。(需要注意的是,dimsim只能处理纯正的汉字,不能判断标点符号、字母、阿拉伯数字等字符)
有了这个神器,我们就可以让Python程序反复“重读”任何一个俗语“口诀”,看看它与真实影视剧本的“总发音距离”是多少。然后找出总体距离最近的一个,就是我们进军流量行列的不二法宝!
下面就是一个基本的测试代码,我们使用口诀 “一二三四五” 来模仿真实台词“玄虎城将乌石制成炸药” 。这段代码使用一个for循环将这两个字符串中的文字,按顺序逐个配对,然后输出它们的发音距离,详细思路请见注释。
需要提醒初学者注意的是,由于口诀长度往往短于真实台词长度,所以当循环到真实台词中编号为5的字符(也就是第6个字“石”)时,必须回到口诀开始、用它的0号个字符 “一” 来匹配;然后对于编号为6的字符“制”则用口诀的1号字符“二”来匹配……,如此类推。学习过《全民一起玩Python 提高篇》的同学可能就会想起来:这个问题是典型的“生成周期性序列”,可以用模运算轻松实现,也就是上面代码中word [ i % len(word) ]一句的来历。
我们可以再用这个程序试试另外一个口诀,比如“唵嘛呢叭咪吽”,同样可以得到另一组距离:
那么问题来了,怎样才能把这两组几十个数字放在一起比较,分辨出“一二三四五”和“唵嘛呢叭咪吽”孰优孰劣呢?最简单的思路,就是使用计算每一组的统计指标,比如均值、方差、中位数。
所以我们把之前的程序再修改一下:将得到的所有距离数字存入一个列表,然后调用《提高篇》中介绍的numpy模块,直接输出它们的统计特征再进行比较!(代码略)
修改口诀内容再次运行这个程序,得到比较结果如下。显然,对于“玄虎城将乌石制成炸药”这句台词来说,口诀“一二三四五”确实比“唵嘛呢叭咪吽”更接近些,难怪这么多数字小姐都选用这个口诀。
不过仅用这十个字的一句台词做样本,实在是没有说服力。所以接下来杨老师在豆瓣上找到一个真实剧本,并用正则式删除其中所有非汉字字符后,作为我们这一次的测试用例(共计6981字)。
同时再次修改程序,让它只运行一次,就能够试验所有候选口诀:
终于,揭晓真相的时刻到来了!“12345”到底是不是最好的口诀呢?请见计算机告诉我们的答案:(杨老师已经用红笔标出了最终排名)
很不幸,在我们随便选取的这8个口诀中,多篇相关新闻中提到的 “1234554321” 只能位列第7,表现仅略强于“我是一只小鸭子”。相比之下,明星们还不如牢记六字真言“唵嘛呢叭咪吽”,不仅口型匹配度明显提高,而且念出来中气十足、大气磅礴,足以震慑对家、展现自己的的顶流身份。
不过想必同学们都已经发现最有趣的地方 —— 发音相似度排名第一的口诀居然只是一个字:“喵” !
也就是说,想“演好戏”不仅不用背台词,甚至都不需要会数数,只要站在那里不断“喵喵喵”,就可以搞定对手戏!想一想,既然排名第7的“一二三四五”都已经在多个剧组中得到了实践认可,那么排名更高的“喵”自然更值得导演们青睐。
所以,杨老师在这里向流量圈郑重建议:
为了播放效果好,请在片场学猫叫!
免责声明:本文仅为调动Python初学者兴趣,并非科学研究、方法亦不求严谨,例如:用发音相似度替代口型相似度并不完全精确;
发音距离超过一定阈值后,互相比较可能失去意义;
应当对测试台词进一步整理、只保留纯粹的对话内容;
使用不同的剧本台词,将会导致不同的测试结论;
DimSim算法的精确性和距离数字的意义需要进一步考察;
……
原来python应该这么念_不背台词念数字?那还不如学猫叫 —— 用Python帮流量们找到最佳对口型方案...相关推荐
- python图片转文字_【收藏】图片转成文字的方法总结,python批量图片转文字信息参考源码...
在日常办公或者学习中,往往存在这样一个工作场景,比如,"老王,我这里有一张图片,你把里面的文字信息给我整理出来",都2021年了,你真的还在手敲图片文字信息么?那么还不赶紧收藏这篇 ...
- java与python多态的区别_如果未调用父构造函数(与Java不同),多态性在Python中如何工作? - java...
因此,父类构造函数是在Java中调用的,而在Python中则不是.如果这意味着未创建父对象,那么如何在Python中成功调用def function-这是怎么回事? Python代码 class Pa ...
- python风控建模项目_像潘叔叔那样用半年时间学Python,有哪些书值得看?
去年11月,SOHO中国董事长潘石屹先生发微博宣布,要开始学习Python,"这也是今天给自己人生的礼物".于是圈子里便有了"百亿身家中年男子告别房地产转行学Python ...
- python面板数据分析代码_对于大面板数据,回归就绪格式的Excel到Python?
试图从Excel中获取一些大面板数据到python中,所以我可以做一些GMM /横截面面板数据回归分析(想想sci-kit软件包).我把我的数据从excel移到了Python,但是回归分析的格式不正确 ...
- 本科python好找工作吗_本科学历,非计算机专业,想学Python找工作靠谱吗?
说靠谱的人有,说不靠谱的也大有人在,你究竟信谁? 别人的说法对你而言只是一个建议,最终做出决定的还是你自己. 你的目的是通过学习Python来找一份工作,从这个想法来看,本身就是很靠谱的,你打算通过学 ...
- python 职场需求_九年从业经验的职场人是否需要学习Python语言
首先,对于已经有9年从业经验的职场人来说,当前持续学习编程语言还是有必要的,一方面未来的职场上升空间非常大,另一方面掌握编程语言也是顺应当前互联网.人工智能时代的发展要求,随着工业互联网的发展,未来职 ...
- python实现视频播放器_对目前的视频播放器不满意?教你用Python做一个视频播放器...
前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. 以下文章来源于Charles的皮卡丘 ,作者白露未晞me Python爬虫.数据分析.网站开 ...
- python123自定义幂函数_《python语言程序设计》_第三章(数字函数、字符串和对象)...
3.2_常见的Python函数 (1) abs()函数 求绝对值 (2) max(x1,x2,x3,....)求最大值 (3) min(x1,x2,x3,....)求最小值 (4) pow 返回a的b ...
- python开发教程视频教程_金牌大神讲师Alex带你学Python 153节课带你轻松学透Python开发视频教程_IT教程网...
(1)\第一章:目录中文件数:29个 ├─01课程介绍(一).mp4 ├─02课程介绍(二)-Python与其他语言的区别.mp4 ├─03课程介绍(三)-Python生态圈.mp4 ├─04课程介绍 ...
最新文章
- 奇淫巧技-Flutter调用C#
- (软件工程复习核心重点)第八章面向对象方法学-第四节:面向对象建模之动态模型和功能模型
- 数据结构与算法系列——排序(3)_折半插入排序
- JsTree实现简单的CRUD
- 中小企业上ERP项目不可回避的9个基本问题
- Oracle并行事务回滚相关参数及视图
- 使用C++11封装线程池ThreadPool
- 系统安装-黑苹果之路
- Docker系列(六)镜像与仓库
- 2021-06-16 forkjion stream流式计算方法
- SVN 代码与文件管理小记
- 非常不错的地区三级联动,js简单易懂。封装起来了
- Python语言程序设计基础_实验3 流程控制I_答案_通识教育必修课程_上海师范大学
- [vue学习笔记]数组+事件+v-model的使用
- 拷贝和引用有什么区别php,php引用和拷贝的区别知识点总结
- CCProxy + Proxifier 通过另一台电脑访问网络
- win10开机一直转圈圈进不去系统怎么办
- LeetCode第一题两数之和
- rabbitmq关于delivery_tag
- python利用海伦公式求三角形的面积
热门文章
- 创业应用ShopLocket:随时随地卖任何东西
- es进行聚合操作时提示Fielddata is disabled on text fields by default
- 中机软云亮相2021青岛国际软件融合创新博览会现场
- 用类模板实现容器存储普通数据类型(类似于STL里面的vector)
- php中h语言是什么意思,stdio.h是什么意思?
- 秦嘉哲:11.9黄金原油晚间行情趋势分析及欧美盘最新操作建议
- 静态链接:空间与地址分配
- 【Django】Django项目会加载两次(代码初始化执行两次)
- 《机器学习》赵卫东学习笔记 第6章 神经网络(课后习题及答案)
- 编译K2P的LEDE固件