前言
做翻譯的朋友都知道,很多人最後結算稿酬時都按字數來算。嚴格來說,「統計字數」並不是唯一一種核算筆譯服務報酬的方法,因為在筆譯服務中還有很多你付出了勞動的工作與字數無關,比如提取術語、項目管理、圖片處理、格式轉換等等。
不過在今天的這個帖子中,我將主要關注「統計字數」這個環節,嘗試做一個簡單的在線字數統計工具。
正文
一、MS Word怎麼數字數
想像著你現在要翻譯一篇文章,想知道這篇文章有多少字,一般這個時候都需要放到Word裡去統計一下字數。
比如我們看這樣一句話:「北京語言大學(Beijing Language and Culture University, BLCU)成立於1962年。」
這句話中有這麼一些東西:
① 中文:10
北京語言大學成立於年
② 英文字符:39
BeijingLanguageandCultureUniversityBLCU
③ 英文單詞:6
Beijing Language and Culture University BLCU
④ 數字:4
1962
⑤ 中文標點:3
()。
⑥ 英文標點:1
,
⑦ 空格:5
我把這部分文字放到MS Word 2016裡:
仔細一看,似乎有以下字數統計的「規律」:
「字數統計」裡的「字數」 = 20 = ① + ③ + ④ = 中文 + 英文單詞 + 數字
「字數統計」裡的「字符數(不計空格)」 = 57 = ① + ② + ④ + ⑤ + ⑥ = 中文 + 英文字符 + 數字 + 中文標點 + 英文標點
「字數統計」裡的「字符數(計空格)」 = 62 = ① + ② + ④ + ⑤ + ⑥ + ⑦ = 中文 + 英文字符 + 數字 + 中文標點 + 英文標點 + 空格
「字數統計」裡的「非中文單詞」 = 7 = ③ + ⑥ = 英文單詞 + 英文標點
「字數統計」裡的「中文字符+朝鮮語單詞」 = 13 = ① + ⑤ = 中文 + 中文標點
對於我們做翻譯的而言,我們翻譯的都是「字兒」,這個字兒既包括中英文字兒,也包括中英文標點符號,空格就不用算了。
我們國家有這樣一個標準:
「《翻譯服務規範第1部分:筆譯》(Specification for Translation Service—Part 1: Translation):中華人民共和國國家標準GB/T 19363.1—2003。中華人民共和國國家質量監督檢驗檢疫總局2003年11月27日發布,2004年6月1日實施。」
其中這樣寫道:
「
4.2.4.5 計字方法
計字一般以中文為基礎。在原文和譯文均為外文時,由顧客和翻譯服務方協商。
版面計字:按實有正文計算,即以排版的版面每行字數乘以全部實有的行數計算
不足一行或佔行題目的,按一行計算;
計算機計字:按文字處理軟體的計數為依據,通常採用「中文字符數(不計空
格)」。
」
也就是說我們在翻譯「北京語言大學(Beijing Language and Culture University, BLCU)成立於1962年。」這句話時要按照「57」來算字數了。
什麼?這句話從中文翻譯到英文時英文都不用翻還要算錢?按照國家標準來算,是的。
在微博上,一位翻譯公司的老總@Arthurye 發過這樣一個帖子:
我們先放下這個帖子不管,而是繼續去寫我們的字數統計的程序。
二、寫一個簡單的字數統計工具
我接下來要做的就是用一個叫「PHP」的程式語言裡自帶的各種內置功能來統計上面這段話裡的字數。
我首先準備好編程環境(參見「簡言」之前的文章),然後新建一個空白的「index.php」文件,並開始製作這個程序。
1)統計英文單詞個數
在上面的這段代碼中,我用了一個叫「str_word_count()」的函數,這個函數的基本功能是統計一句話裡所有的英文單詞的個數。
運行結果如下:
這與人工統計的結果是一致的。
如果我想查看究竟有哪些英文單詞,則使用下面的代碼:
這段代碼先用「str_word_count($sen,1)」函數獲得所有單詞,然後用「foreach」函數遍歷所有英文單詞,並將單詞全部顯示出來,如下圖:
2)統計所有的空格
在這段代碼中我用了一個叫「substr_count()」的函數,這個函數的功能是統計括號中雙引號裡的內容在前面的字符串中出現的字數。根據我的代碼,我在雙引號中輸入了一個空格,前面的「$sen」代表的是我輸入的那句話。
代碼執行後,效果如下:
這與人工統計的結果是一致的。
3)統計所有的中文字數
統計中文字數的方法稍微麻煩一些,代碼如下:
在這段代碼中,我主要用了兩個重要的函數:「preg_replace()」和「mb_strlen()」。前者用來去掉句子中所有的中英文標點符號、數字和空格,後者用來統計中文字數。「preg_replace()」的用法我在之前的文章中已經講過,這個就不再介紹其用法了。
效果如下:
4)統計所有的數字
在這段代碼中,我用了兩個重要的函數:「strlen()」和「is_numeric()」,前者用於計算句子的長度,方便用for循環來遍歷句子中的每一個字符,後者用於判斷一個字符是不是數字,如果是的話就放到「$numresult」這個變量中,最後再用一次「strlen()」函數,把數字的總數算出來。
代碼運行的結果為:
5)按照Word裡計數的方法,統計「字數」
Word裡統計字數時是將中文的字數、英文單詞的字數和數字的字數放在了一起,所以計算一下:
運行結果為:
6)按照Word裡計數的方法,統計「字符數(不計空格)」和「字符數(計空格)」
代碼如下:
運行效果如下:
三、把這個字數統計工具稍微包裝一下放到伺服器上
這部分內容我就不再詳細寫了,就是多寫了一個可以手動輸入內容的輸入框,效果如下:
前往下面的網址或者點擊「閱讀原文」可以親自體驗一下這個簡易的字數統計工具。
地址:http://translation.education/count/index.php
結語
這個工具目前來說還是一個半成品,因為事實上它與Word統計字數的方式還是有區別的,具體是什麼樣的區別大家親自去試試看,看看能否發現?
另外,大家再去仔細思考以下國家標準中統計字數的方法是否合理?再去看看我前面貼的@Arthurye 葉志遠葉總的帖子,看看裡面就什麼算字數的門道?
歡迎大家打賞這篇文章,繼續激發我創作的熱情:-)