无意中刷到一条微博热搜,突然觉得也许 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帮流量们找到最佳对口型方案...相关推荐

  1. python图片转文字_【收藏】图片转成文字的方法总结,python批量图片转文字信息参考源码...

    在日常办公或者学习中,往往存在这样一个工作场景,比如,"老王,我这里有一张图片,你把里面的文字信息给我整理出来",都2021年了,你真的还在手敲图片文字信息么?那么还不赶紧收藏这篇 ...

  2. java与python多态的区别_如果未调用父构造函数(与Java不同),多态性在Python中如何工作? - java...

    因此,父类构造函数是在Java中调用的,而在Python中则不是.如果这意味着未创建父对象,那么如何在Python中成功调用def function-这是怎么回事? Python代码 class Pa ...

  3. python风控建模项目_像潘叔叔那样用半年时间学Python,有哪些书值得看?

    去年11月,SOHO中国董事长潘石屹先生发微博宣布,要开始学习Python,"这也是今天给自己人生的礼物".于是圈子里便有了"百亿身家中年男子告别房地产转行学Python ...

  4. python面板数据分析代码_对于大面板数据,回归就绪格式的Excel到Python?

    试图从Excel中获取一些大面板数据到python中,所以我可以做一些GMM /横截面面板数据回归分析(想想sci-kit软件包).我把我的数据从excel移到了Python,但是回归分析的格式不正确 ...

  5. 本科python好找工作吗_本科学历,非计算机专业,想学Python找工作靠谱吗?

    说靠谱的人有,说不靠谱的也大有人在,你究竟信谁? 别人的说法对你而言只是一个建议,最终做出决定的还是你自己. 你的目的是通过学习Python来找一份工作,从这个想法来看,本身就是很靠谱的,你打算通过学 ...

  6. python 职场需求_九年从业经验的职场人是否需要学习Python语言

    首先,对于已经有9年从业经验的职场人来说,当前持续学习编程语言还是有必要的,一方面未来的职场上升空间非常大,另一方面掌握编程语言也是顺应当前互联网.人工智能时代的发展要求,随着工业互联网的发展,未来职 ...

  7. python实现视频播放器_对目前的视频播放器不满意?教你用Python做一个视频播放器...

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. 以下文章来源于Charles的皮卡丘 ,作者白露未晞me Python爬虫.数据分析.网站开 ...

  8. python123自定义幂函数_《python语言程序设计》_第三章(数字函数、字符串和对象)...

    3.2_常见的Python函数 (1) abs()函数 求绝对值 (2) max(x1,x2,x3,....)求最大值 (3) min(x1,x2,x3,....)求最小值 (4) pow 返回a的b ...

  9. python开发教程视频教程_金牌大神讲师Alex带你学Python 153节课带你轻松学透Python开发视频教程_IT教程网...

    (1)\第一章:目录中文件数:29个 ├─01课程介绍(一).mp4 ├─02课程介绍(二)-Python与其他语言的区别.mp4 ├─03课程介绍(三)-Python生态圈.mp4 ├─04课程介绍 ...

最新文章

  1. 奇淫巧技-Flutter调用C#
  2. (软件工程复习核心重点)第八章面向对象方法学-第四节:面向对象建模之动态模型和功能模型
  3. 数据结构与算法系列——排序(3)_折半插入排序
  4. JsTree实现简单的CRUD
  5. 中小企业上ERP项目不可回避的9个基本问题
  6. Oracle并行事务回滚相关参数及视图
  7. 使用C++11封装线程池ThreadPool
  8. 系统安装-黑苹果之路
  9. Docker系列(六)镜像与仓库
  10. 2021-06-16 forkjion stream流式计算方法
  11. SVN 代码与文件管理小记
  12. 非常不错的地区三级联动,js简单易懂。封装起来了
  13. Python语言程序设计基础_实验3 流程控制I_答案_通识教育必修课程_上海师范大学
  14. [vue学习笔记]数组+事件+v-model的使用
  15. 拷贝和引用有什么区别php,php引用和拷贝的区别知识点总结
  16. CCProxy + Proxifier 通过另一台电脑访问网络
  17. win10开机一直转圈圈进不去系统怎么办
  18. LeetCode第一题两数之和
  19. rabbitmq关于delivery_tag
  20. python利用海伦公式求三角形的面积

热门文章

  1. 创业应用ShopLocket:随时随地卖任何东西
  2. es进行聚合操作时提示Fielddata is disabled on text fields by default
  3. 中机软云亮相2021青岛国际软件融合创新博览会现场
  4. 用类模板实现容器存储普通数据类型(类似于STL里面的vector)
  5. php中h语言是什么意思,stdio.h是什么意思?
  6. 秦嘉哲:11.9黄金原油晚间行情趋势分析及欧美盘最新操作建议
  7. 静态链接:空间与地址分配
  8. 【Django】Django项目会加载两次(代码初始化执行两次)
  9. 《机器学习》赵卫东学习笔记 第6章 神经网络(课后习题及答案)
  10. 编译K2P的LEDE固件