设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

1234下一页
返回列表 发新帖
查看: 9593|回复: 35
打印 上一主题 下一主题

[其它] 完美的汉字转拼音函数

[复制链接]
跳转到指定楼层
1#
发表于 2007-8-3 16:00:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
这是使用API函数获取汉字拼音的代码,不过按程序设定,系统中必须安装有“微软拼音输入法”,但程序执行时好象并不涉及“微软拼音输入法”,有谁系统中没装“微软拼音输入法”的测试一下将“微软拼音输入法”改为其他拼音输入法试试不知是否能通过,程序可以获得汉字和词组的拼音(词组中的多音字可以区别),且能获得拼音的声调,同时对于繁体字好象也能得到正确的结果。



[ 本帖最后由 liwen 于 2007-8-3 16:14 编辑 ]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

评分

参与人数 1经验 +2 收起 理由
tanhong + 2 原创内容

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
2#
发表于 2007-8-3 16:45:34 | 只看该作者
谢谢分享,另外能不能做成这样的?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
3#
发表于 2007-8-3 16:48:05 | 只看该作者
2楼的是不是有这个呀

[ 本帖最后由 jicheng 于 2007-8-3 16:49 编辑 ]
4#
 楼主| 发表于 2007-8-3 16:57:16 | 只看该作者
2楼的好东西,怎么以前就见不到呢?

据我据计,2楼的要求应该通过改写一定的代码来判断或许可以实现。
顺便问一下,带声调的注音符号字符表中有吗?
5#
发表于 2007-8-4 07:10:43 | 只看该作者
原帖由 liwen 于 2007-8-3 16:57 发表
2楼的好东西,怎么以前就见不到呢?

据我据计,2楼的要求应该通过改写一定的代码来判断或许可以实现。
顺便问一下,带声调的注音符号字符表中有吗?

ā, á, ǎ, à, ē, é, ě, è, ī, í, ǐ, ì, ō, ó, ǒ, ò, ū, ú, ǔ, ù, ǖ, ǘ, ǚ, ǜ, ü,
6#
 楼主| 发表于 2007-8-4 13:04:41 | 只看该作者
加上以下代码好似可以达到2楼的第一个要求,  代码只做了简单测试,可能也会有不符合汉语拼音规则的地方,代码做的也比较烂,还是希望sgrshh29 能奉献一个2楼那个源码。

Public Function ZH(str As String)
Dim aa() As String
Dim a As String
Dim o As String
Dim e As String
Dim i As String
Dim u As String
Dim v As String
Dim k, kk As Integer
Dim T, j As Integer

a = "āáǎà"
o = "ōóǒò"
e = "ēéěè"
i = "īíǐì"
u = "ūúǔù"
v = "ǖǘǚǜ"
aa() = Split(PinyinConvers(str), " ")
For T = 0 To UBound(aa())
zhstr = aa(T)
k = 0
kk = 0
For j = 1 To Len(zhstr)
If InStr("aoeiuv", Mid(zhstr, j, 1)) > 0 Then
k = k + 1
If k > 1 Then
If Mid(zhstr, kk, 1) = "u" Then
ntstr = Left(zhstr, j - 1) & IIf(Mid(zhstr, j, 1) = "a", Mid(a, Right(zhstr, 1), 1), IIf(Mid(zhstr, j, 1) = "o", Mid(o, Right(zhstr, 1), 1), IIf(Mid(zhstr, j, 1) = "e", Mid(e, Right(zhstr, 1), 1), IIf(Mid(zhstr, j, 1) = "e", Mid(e, Right(zhstr, 1), 1), IIf(Mid(zhstr, j, 1) = "i", Mid(i, Right(zhstr, 1), 1), IIf(Mid(zhstr, j, 1) = "u", Mid(u, Right(zhstr, 1), 1), Mid(v, Right(zhstr, 1), 1))))))) & Mid(zhstr, j + 1, Len(zhstr) - j - 1)
End If
Else
ntstr = Left(zhstr, j - 1) & IIf(Mid(zhstr, j, 1) = "a", Mid(a, Right(zhstr, 1), 1), IIf(Mid(zhstr, j, 1) = "o", Mid(o, Right(zhstr, 1), 1), IIf(Mid(zhstr, j, 1) = "e", Mid(e, Right(zhstr, 1), 1), IIf(Mid(zhstr, j, 1) = "e", Mid(e, Right(zhstr, 1), 1), IIf(Mid(zhstr, j, 1) = "i", Mid(i, Right(zhstr, 1), 1), IIf(Mid(zhstr, j, 1) = "u", Mid(u, Right(zhstr, 1), 1), Mid(v, Right(zhstr, 1), 1))))))) & Mid(zhstr, j + 1, Len(zhstr) - j - 1)
kk = j
End If
End If
Next j
If zhstr <> "" Then nstr = nstr & " " & ntstr

Next
ZH = nstr

End Function
7#
 楼主| 发表于 2007-8-4 13:45:42 | 只看该作者
稍微减少一点代码:
Public Function ZHB(str As String)
Dim aa() As String
Dim a As String
Dim k, kk As Integer
Dim T, j As Integer

a = "āáǎàōóǒòēéěèīíǐìūúǔùǖǘǚǜ"
aa() = Split(PinyinConvers(str), " ")
For T = 0 To UBound(aa())
zhstr = aa(T)
k = 0
kk = 0
For j = 1 To Len(zhstr)
If InStr("aoeiuv", Mid(zhstr, j, 1)) > 0 Then
k = k + 1
If k > 1 Then
If Mid(zhstr, kk, 1) = "u" Then
ntstr = Left(zhstr, j - 1) & Mid(a, (InStr("aoeiuv", Mid(zhstr, j, 1)) - 1) * 4 + Right(zhstr, 1), 1) & Mid(zhstr, j + 1, Len(zhstr) - j - 1)
End If
Else
ntstr = Left(zhstr, j - 1) & Mid(a, (InStr("aoeiuv", Mid(zhstr, j, 1)) - 1) * 4 + Right(zhstr, 1), 1) & Mid(zhstr, j + 1, Len(zhstr) - j - 1)
kk = j
End If
End If
Next j
If zhstr <> "" Then nstr = nstr & " " & ntstr

Next
ZHB = nstr

End Function
8#
发表于 2007-8-4 17:03:40 | 只看该作者
原帖由 liwen 于 2007-8-4 13:45 发表
稍微减少一点代码:
Public Function ZHB(str As String)
Dim aa() As String
Dim a As String
Dim k, kk As Integer
Dim T, j As Integer

a = "āáǎàōóǒòēéěèīíǐìūúǔùǖǘǚǜ"
a ...


好贴,顶一把.非常抱歉,因为源代码(其实这个源代码也有一部分是借鉴了其它的代码)已经找不到了,只有一个用源代码转换过来的dll文件.打开数据库后,如果有引用错误,只要在vba的工具引用中重新引用一下这个dll(有时要多引用几次才引用成功).还请liwen见谅.下面就是这个比较完善的汉字转拼音的示例,只记得代码不是很多,大概是你的代码的一半不到一点.

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
9#
发表于 2007-8-5 11:32:27 | 只看该作者
嘿嘿,学习下。。。。。。。。。
10#
发表于 2007-8-19 09:26:13 | 只看该作者
真不错。
另外问一下:源代码转为dll 怎么转呢?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-5-10 09:10 , Processed in 0.113874 second(s), 35 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表