因為之前一直用ConvertZ轉影片字幕檔,但是我在家用Mac居多,加上聽完HITCON 2011後在公司也不太想用Windows了(大誤),而且ConvertZ必須自己指定檔案的編碼,對於多檔轉換時很麻煩(找的字幕檔編碼不一定是某種編碼),希望能有更方便的解決方案。原本想要用開放中文轉換,opencc,但是在Windows編譯上遇到困難,後來又看到convert2utf8,本以為它會自動轉換編碼,用了才發現不會,再找了Universal Encoding Detector,自己加上自動編碼偵測,並在轉換檔加上BOM。
至此發現用Python做簡繁轉換其實非常好寫,而且convert2utf8要自訂詞組並不方便,於是就找 python-jianfan 來做為簡繁字轉換,至於詞呢?
Python简繁转换 有提到維基百科所使用的『詞』轉換技術,再配合他的【最大正向匹配算法】,可以有效得到我想要的結果。至於文中提到的『人體內存在很多微生物,計算機內存很大』這樣的句子要怎麼辦呢?我的做法仿ConvertZ,加上一組無用的贅詞放在前面,即可避免錯誤的匹配。
轉換字幕有個特點:每個翻譯的用語或名字可能不一致,所以加上可針對每個影片自訂詞庫,例如說最近的韓劇城市獵人中男主角叫 李潤城 或 李潤成 呢?(男主角是 李民浩 或 李敏镐 ?)總是要統一看起來才方便。
由於我只需要UTF-8檔,整理這支小程式的流程如下:
最後要感謝以上提到各Open Source專案,讓在下可以很方便的在各平台看影片。所有程式碼放在 chinese-autoconvert ,希望有本領的朋友能夠加以改進。
後記: 雖然我只有稍微看一些簡單的Python教學,但是也能夠很快上手寫出簡單的工具,漸漸能夠瞭解為何Google要採用Python。隨著opencc不斷的進步,或許未來改用opencc的函式庫也未嘗不可,等我有空的時候再來做了;不幸的是,由於強國的豐富資源,現在我也能輕鬆閱讀簡體字文件無礙,所以動力也小了。
Update: 剛剛發現有人做了OSX的GUI,有需要的朋友可以試試。
再Update: 因為 Universal Encoding Detector 現在已經支援Python 3,加上Python 2.7只維護到2020年,相信之後的Mac也會預設使用Python 3而不是Python 2 ;現在將g2butf8.py改為Python 3語法,Python 2.7可正常使用。
至此發現用Python做簡繁轉換其實非常好寫,而且convert2utf8要自訂詞組並不方便,於是就找 python-jianfan 來做為簡繁字轉換,至於詞呢?
Python简繁转换 有提到維基百科所使用的『詞』轉換技術,再配合他的【最大正向匹配算法】,可以有效得到我想要的結果。至於文中提到的『人體內存在很多微生物,計算機內存很大』這樣的句子要怎麼辦呢?我的做法仿ConvertZ,加上一組無用的贅詞放在前面,即可避免錯誤的匹配。
轉換字幕有個特點:每個翻譯的用語或名字可能不一致,所以加上可針對每個影片自訂詞庫,例如說最近的韓劇城市獵人中男主角叫 李潤城 或 李潤成 呢?(男主角是 李民浩 或 李敏镐 ?)總是要統一看起來才方便。
由於我只需要UTF-8檔,整理這支小程式的流程如下:
- 利用Universal Encoding Detector偵測編碼轉成UTF-8
- 使用python-jianfan 將字轉成繁體並加上BOM
- 內建詞轉換
- 使用者自訂詞轉換
最後要感謝以上提到各Open Source專案,讓在下可以很方便的在各平台看影片。所有程式碼放在 chinese-autoconvert ,希望有本領的朋友能夠加以改進。
後記: 雖然我只有稍微看一些簡單的Python教學,但是也能夠很快上手寫出簡單的工具,漸漸能夠瞭解為何Google要採用Python。隨著opencc不斷的進步,或許未來改用opencc的函式庫也未嘗不可,等我有空的時候再來做了;不幸的是,由於強國的豐富資源,現在我也能輕鬆閱讀簡體字文件無礙,所以動力也小了。
Update: 剛剛發現有人做了OSX的GUI,有需要的朋友可以試試。
再Update: 因為 Universal Encoding Detector 現在已經支援Python 3,加上Python 2.7只維護到2020年,相信之後的Mac也會預設使用Python 3而不是Python 2 ;現在將g2butf8.py改為Python 3語法,Python 2.7可正常使用。
2024更新: 由於 python-jianfan 經過許多年沒維護,近兩年更新到新版 Python3 遇到許多問題,目前改用 開放中文轉換 opencc-python-reimplemented (Github)。
留言
我下載了您的 source ,然後試圖要在 mac 上執行,但是他說有些 import 的 module 找不到
因為我對 python 不熟,不知道是不是 一些 lib 是 windows 專用的,裝了python 就會有的,所以 mac or linux 上是沒有的。
Traceback (most recent call last):
File "./g2butf8.py", line 9, in
from jianfan import jtof
ImportError: No module named jianfan
然後我連到您註解裡面提到的
http://code.google.com/p/python-jianfan/
裡面提供下載的內容,我不知道要怎麼使用
一個是 .egg
另一個是 一包 py
不知道那一個能夠讓我在 command 執行 python 的時候,他能找到您需要 import 的 jtof
如果您能告訴我的話,我想在 mac 上就能夠使用了
謝謝。
因為我和Python也不太熟,所以花了點時間,不過可以放心,除了要產生windows執行檔的模組之外,另外兩個庫都是跨平台(Universal Encoding Detector和python-jianfan )。
文件請至 http://code.google.com/p/chinese-autoconvert/w/list 看
原來 python module 先 build 在 install
這樣我裝好了,但是還是有狀況
Traceback (most recent call last):
File "g2butf8.py", line 148, in
convertFile(afile);
File "g2butf8.py", line 96, in convertFile
print u"正在轉換", target_file, u" 編碼為: ", f_encoding
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-3: ordinal not in range(128)
然後我查了一下,翻到這個
http://blog.wahahajk.com/2008/08/app-engine.html
不知道對您 debug 有沒有幫助。
我是用 mac osx 10.6
python 是2.6 ,謝謝您。
請下 env指令,若不是,建議修改 ~/.profile
在最後加上
export LANG=zh_TW.UTF-8
export LC_CTYPE=UTF-8
我用 iterm ,然後我平常在用的 server 也都是 utf8 ,所以 terminal 確定沒問題。
我沒注意到 locale 的問題,locale 改完就正常了
謝謝您的熱心,寫了這個好用的 script,也謝謝您幫我解決問題。
http://the-moment.tk/conv-project/
可惜沒有open source,不然我很想幫你加上用語轉換:P
for line in lines:
line = convertVocabulary(line, dic_tw());
應改為
idx=0
for line in lines:
lines[idx] = convertVocabulary(line, dic_tw());
idx += 1
否則 lines 的內容還是一樣
2. Line 134
line = convertVocabulary(line, user_dic);
是多餘的,應可刪除
Line 20:
for j in range(len(string_in) - i, 0, -1):
應改為
for j in range(len(string_in) - 1, 0, -1):
否則在第一次 match 後,字串結尾的位置會減去 i,
後續會造成匹配不到的問題
妰 或 嬑 這種 UTF-8 字元也是可以轉換的,只是來源必須是UTF-8檔案,否則Python會丟出Exception。 您不妨自己試試 ^_^
抱歉,是我誤會了,原本的 function 是用 string_in[i:][:j]
我改成了 string_in[i:j],所以 j loop 也要跟著改