这本《技术手册》是为利用本转换工具从事开发工作的高级用户编写的模块说明。普通用户请阅读《用户手册》(DOC_USERSGUIDE.html)。有关软件版本更新的情况,请看《最近更新》(DOC_WHATSNEW.html)。
“汉语拼音-国际音标转换工具”是一套能将汉语拼音转换成国际音标的Python脚本程序软件。官方发布的两个程序文件名是“py2ipa.py”和“gPY2IPA.py”,分别是转换工具的核心模块兼命令行界面程序和图形用户界面程序。注意:本手册只对前者在开发中的问题做出解释。
程序的作者是徐清白,可通过如下网络手段取得联系:
作者将程序按照《GNU通用公共许可证(第三版)》发布为自由软件。高级用户可以将其用于个人、教育或商业用途开发,但必须开放源代码。许可证的具体的条款请看GNU官方网站:
还有一个非官方的简体中文翻译版本: 本软件的压缩包内附带了这两个文件的本地副本:特别声明:一切转换结果仅供学习参考。作者不会为错误的结果承担任何法律责任。
本模块考虑到“明言胜于暗示”的原则,使用了所谓“条件表达式”语法,即:
(true_value if condition else false_vale)而没有使用隐晦的逻辑运算符连续短路式,即:
(condition and true_value or false_value)也没有使用其他类似的隐晦的表达式。因此,运行本模块的Python解释器的版本不得低于2.5版。而在本模块首次发布的2007年8月6日,作者用来测试的版本是2.5.1版。UNIX/Linux用户要特别注意,预装的Python版本可能不能运行本模块。
本模块在发布时只经过了Windows平台上的测试。不过,在整个开发过程中,作者已经尽量避免了任何平台依赖性设计。
开发者仍然有必要安装一种适用于输出国际音标的Unicode字体。作者推荐符合Unicode 4.0标准的Charis SIL字体——可以在SIL的官方网站下载到:
但是这字体不是等宽字体,书写代码时用起来颇不方便。建议开发者使用DejaVu开源字体项目中的DejaVu Sans Mono字体。这是一种等宽无衬线Unicode西文字体,可以在dejavu.sourceforge.net找到最新版下载。作者发布的程序安装包,用户下载后需要解开RAR压缩包。这样就得到了一个程序文件py2ipa.py以及若干附属的文档文件。
核心模块文件py2ipa.py会对模块是否正在作为独立Python程序运行做出判断。如果独立运行,模块会使用命令行界面与用户交互,完成用户指令的任务。如果作为模块导入,则仅仅定义了若干可供访问的模块级名称。当然,实际上还导入了os, re这三个标准库模块。
在整个模块中,开发者一般只需要调用Pinyin2IPA()函数完成基本任务。可以向这个函数传递两个参数:
作为模块的主干函数,Pinyin2IPA()的基本运行流程是:
其中,convertPinyin2IPA()函数的具体运行流程是:
通过Pinyin2IPA()函数指定创建设置表的方法是参数收集元组。例如,以下用法可以接受:
>>> from py2ipa import Pinyin2IPA >>> Pinyin2IPA("piao1yao2","HIDE_ALL_TONE_VALUE") >>> Pinyin2IPA("piao1yao2",("HIDE_ALL_TONE_VALUE")) >>> Pinyin2IPA("piao1yao2",frozenset("HIDE_ALL_TONE_VALUE")) >>> Pinyin2IPA("piao1yao2","HIDE_ALL_TONE_VALUE","SYLLABLE_JUNCTURE_BY_PLUS") >>> Pinyin2IPA("piao1yao2",("HIDE_ALL_TONE_VALUE","SYLLABLE_JUNCTURE_BY_PLUS"))以下用法不可接受:
>>> Pinyin2IPA("piao1yao2",["HIDE_ALL_TONE_VALUE"]) >>> Pinyin2IPA("piao1yao2",set("HIDE_ALL_TONE_VALUE")) >>> Pinyin2IPA("piao1yao2",["HIDE_ALL_TONE_VALUE","SYLLABLE_JUNCTURE_BY_PLUS"])要求提供的是不可变参数,元组、固定集合都可以,单个字符串也会自动包装进元组。但字符串的列表或可变集合都不行,返回TypeError错误:“列表/集合对象不可哈希”。这参数在createCmdPairTuple()函数中会转换成可变集合,去除重复元素和矛盾设置。
要启用某些特殊的转换规则,除了传递参数之外,还可以修改命令列表的默认设置表。这样可以修改出专门适合某种用途的模块,但也改变了本模块文件的内容,灵活性欠佳。另外还可以使用预设的一揽子设置表传递参数,或按需设计新的一揽子设置表。新的一揽子设置表可能也需要新的转换命令创建设置,请慎重修改。
有些转换命令创建设置之间存在系列覆盖关系,理论上有两种处理方法:
下面对其他由Pinyin2IPA()函数调用的函数的某些重要问题做出简要解说:
还有一点需要说明的问题:本模块使用了大量Unicode对象常量,即前附U字的字符串常量。createCmdPairTuple()函数还使用了大量前附R的原字符串常量表示正则表达式。其中很多实例并不需要U或R的声明,不过,整齐美观起见,还是一律采用了。