找出字幕中的生词

Tuesday, April 13th, 2010

写了小程序(pickupnewords.py)可以找出文本中的英文生词,比如你在观影前可以找出英文字幕中你不认识的单词,逐一查明,这样就不会边看边查字典了,打扰你欣赏电影了 ^_^ 程序最新源代码在github。下面简单说明一些关于这个程序的东西。 我这程序肯定无法强大到能读取你大脑的信息得知你认不认识某个单词,它要借助本地存储,其实就是一个用pickle模块把你已经认识的单词集合写入到一个文件里,程序因此有了依据。当然了不可能把'is'、'apple'这样的词也判为生词,因此得有个基础单词库,我用的是Oxford 3000 wordlist,这个是牛津字典的单词释义所用的基础单词,我已经把它转换好了,文件名是oldwords.dat。一个没有记忆不会学习的人是可怕的,程序也是如此,这是我下面要讲的。 许多英语达人的词汇量肯定不止3000,所以在初期运行这个程序你会发现有好多单词你都认识,或者日后某些单词反复出现,慢慢你已经熟知了,那么就需要让程序记住这些单词。pickupnewords.py提供了一个非常简单甚至简陋的命令接口,告诉程序哪些单词需要记忆。再列出可能的生词列表后,程序会等待你输入指令了。你能输入的指令有下列几种: 0,9,13, 21 生词列表的每个单词前都有个序号,你输入了哪几个序号程序就会记住对应的单词 !0,9,13, 21 这个仅仅比上面的多了一个感叹号"!",它的意思就是相反,除了感叹号后面列出的序号对应的单词都要记忆 all 记住所有列出的单词 ! 或 !all 或 直接回车 不记忆列出的任何单词,它们都是生词 使用方法: 下载pickupnewords.py和oldwords.dat,运行: python pickupnewords.py /path/to/your/english.srt 注:本程序只支持srt这类的纯文本环保格式。 任何问题建议欢迎留言 ;-) ===== 补充 ===== 单词的分词处理的十分简单,能去掉字幕文件中无意义、非英文单词的部分,但对于诸如"I've"、"shouldn't"识别为一个单词,"copied"、"driving"这样的过去分词和现在分词仍然作为生词,虽然原型是非常基础的单词。Python应该有好的分词库(我了解的不多,如有好的也请推荐),但我不想把事情搞的太复杂了,我们完全可以把这些词让程序记住,或者干脆忽略,反正除此之外能找出真正的生词就行。 Update 4-21: @weakish 在下面的留言说的很对。其实这个程序离真正可用还很远,还需要优化。

调整srt字幕文件的时间轴

Monday, August 18th, 2008

从BT上下了部电影,又从射手下了字幕,播放是发现字幕比声音晚了大概8、9秒。当然,mplayer可以使用参数"-subdelay 9"来达到目的,可我还是希望能直接把字幕文件调整好。网上搜了一下,字幕调解软件还是有不少,都是GUI的。对我而言只要调解时间轴就够了,所以命令行的比较好,于是自己写了个python的脚本。 这个脚本仅是简单的对字幕中的时间轴进行加或减,以达到调解时间轴的目的。不熟悉python的库让我兜了一大圈,本以为datetime不能处理时间的加减,后来才发现原来可以!对OO的不熟又让我被datetime类搞的小晕了一下。 用的时候执行:python adjust_srt_timeline.py your_movie.srt delay_time your_movie.srt 就是电影的字幕文件,delay_time则是你想字幕时间轴延迟的时间。比如,字幕比声音晚了8.5秒,那么delay_time就是 -8.5。 效果图 #!/usr/bin/python # -*- coding: utf-8 -*- # # Some srt subtitile is slower or faster. This little script can adjust it. # # Usage: python adjust_srt_timeline.py your_movie.srt delay_second # e.g. python adjust_srt_timeline.py Shortbus.chs.srt -8.5 # # Then there will be a "Shortbus.chs.srt_new" file. # # Copyright (C) 2008, vvoody # GPLv3 applies ...