缘起:师兄发起印经,需要给word电子版的经书全文加注音。
(新增golang版本的程序;
比vba快,大文档用vba的能跑好几天,
用golang的几秒就处理完,还不会因为中文标点出错;
另有修改指定词组读音等程序;
请参看:
word自带的加注音只能一次加30个字,一本经书有两万四千多字。网上找了下,好像没有现成的软件,但是python可以很简单的把汉字转换成带声调的拼音。再结合office的vba宏录制,摸索了一下,弄出了个批量给word加注音的脚本。分享如下:
效果
一、python汉字转拼音
1.首先需要下载、安装python环境。我安装的python3.8版本。这一步很简单,搜索一下,下载安装就可以了。【记得安装过程中,把“加入环境变量”这个选项勾上。】
2.安装python的拼音库
网上有两个版本的python汉字转拼音的demo,一个是基于pypinyin库的,另一个是基于xpinyin库的。
基于xpinyin库的试出来拼音不带声调,后来用的pypinyin库。
安装完python之后,打开命令行(CMD),输入如下安装命令:
pip install pypinyin
然后等待安装完成。这个过程需要联网。
3.将下面代码复制下来,保存到D盘下,名为wordTOPinyin.py,即:(d:/wordToPinyin.py)。
(保存路径可以是其它,但需要同时修改后面VBA代码中脚本的路径)
import sys, getopt
import pypinyin
word = sys.argv[1:]
s = ''
for i in pypinyin.pinyin(word):
s = s + ''.join(i) + " "
print(s)
二、VBA宏,给汉字加注音
MS office默认就安装了VBA开发环境,用Alt+F11打开VBA编辑器。
WPS需要单独安装一个VBA_for_WPS的包,需要网上找一下。也是用Alt+F11打开VBA编辑器。
VBA代码:
Attribute VB_Name = "wordToPinyinByBlockSpecified"
Option Explicit
Public Declare Function timeGetTime Lib "winmm.dll" () As Long
Public g_manualCharSet As Object
Public g_specifiedCharSet As Object
Public g_exceptionCharSet As Object
Function isNeedZhuyin(ByVal tmpChar) As Boolean
' 非汉字,跳出
If LenB(StrConv(tmpChar, vbFromUnicode)) <> 2 Then
isNeedZhuyin = False
Exit Function
End If
' 手动指定字符 和 例外字符 两种模式,有点像黑白名单,没有做成优先级的方式,简单点,二选一就可以了
If True Then
' 特殊符号不需要加注音,跳出
If "" <> g_exceptionCharSet(tmpChar) Then
isNeedZhuyin = False
Exit Function
End If
isNeedZhuyin = True
Exit Function
Else
'是指定的字才加注音
If "" <> g_specifiedCharSet(tmpChar) Then
isNeedZhuyin = True
Exit Function
End If
isNeedZhuyin = False
Exit Function
End If
End Function
Function initExceptionCharSet()
Set g_exceptionCharSet = CreateObject("Scripting.Dictionary")
'不需要加注音的字符,加到这个集合里
g_exceptionCharSet.Add "。", "ok"
g_exceptionCharSet.Add ",", "ok"
g_exceptionCharSet.Add "、", "ok"
g_exceptionCharSet.Add ";", "ok"
g_exceptionCharSet.Add "…", "ok"
g_exceptionCharSet.Add "?", "ok"
g_exceptionCharSet.Add "(", "ok"
g_exceptionCharSet.Add ")", "ok"
g_exceptionCharSet.Add "(", "ok"
g_exceptionCharSet.Add ")", "ok"
g_exceptionCharSet.Add ":", "ok"
g_exceptionCharSet.Add ":", "ok"
g_exceptionCharSet.Add " ", "ok"
g_exceptionCharSet.Add "[", "ok"
g_exceptionCharSet.Add "]", "ok"
g_exceptionCharSet.Add "-", "ok"
g_exceptionCharSet.Add "+", "ok"
g_exceptionCharSet.Add "*", "ok"
g_exceptionCharSet.Add "《", "ok"
g_exceptionCharSet.Add "》", "ok"
g_exceptionCharSet.Add "【", "ok"
g_exceptionCharSet.Add "】&