汉字拼音的一个解决方法
Author: 水如烟
暂歇一下写那个区划方案。
平常中,经常用到汉字转拼音,比如批量生成姓名->拼音作为登录帐号。
这个方法只是简单的利用汉字拼音库。至于怎么找这个库,网上多有介绍。在最后提供下载的方案中也提供了这个库文本文件。
主要代码如下:
Imports System.Text.RegularExpressions
Namespace Businness.PinYin
Public Class PYService
Private gDataSet As New dsPinYin
' '' <summary>
' '' 汉字表
' '' </summary>
Public ReadOnly Property PinYinTable() As dsPinYin.PinYinDataTable
Get
Return gDataSet.PinYin
End Get
End Property
Private gTxtFile As String = AppDomain.CurrentDomain.SetupInformation.ApplicationBase & " pinyin.txt "
Private gxmlFile As String = AppDomain.CurrentDomain.SetupInformation.ApplicationBase & " pinyin.xml "
Private gRegex As New Regex("(?<Word>^[/u4e00-/u9fa5]+)(?<PingYin>.*)")
' '' <summary>
' '' 加载汉字库,文件名为pinyin.xml,在程序当前目录下
' '' </summary>
Public Sub Load()
If Not IO.File.Exists(gxmlFile) Then
Throw New Exception( String .Format( " 文件{0}不存在 " , gxmlFile))
End If
DataSetInitialize()
gDataSet.ReadXml(gxmlFile)
End Sub
' '' <summary>
' '' 从汉字文件中更新,文件名为pinyin.txt,在程序当前目录下
' '' </summary>
' '' <remarks></remarks>
Public Sub Update()
If Not IO.File.Exists(gTxtFile) Then
Throw New Exception( String .Format( " 文件{0}不存在 " , gTxtFile))
End If
UpdateFromTxt(gTxtFile)
End Sub
' '' <summary>
' '' 保存汉字库,文件为pingyin.xml,在程序当前目录下
' '' </summary>
' '' <remarks></remarks>
Public Sub Save()
gDataSet.WriteXml(gxmlFile)
End Sub
Private Sub DataSetInitialize()
' 在更新或读入时,清除
Me .gDataSet.Clear()
Me .gDataSet.AcceptChanges()
End Sub
Private Sub UpdateFromTxt( ByVal file As String )
DataSetInitialize()
Dim mLine As String
Dim mBuilder As New System.Text.StringBuilder
Dim mReader As New IO.StreamReader(file, System.Text.Encoding.Default)
Do
mLine = mReader.ReadLine
Add(mLine)
Loop Until String .IsNullOrEmpty(mLine)
mReader.Close()
mReader.Dispose()
Me .gDataSet.PinYin.AcceptChanges()
End Sub
Private Sub Add( ByVal line As String )
If line Is Nothing Then Exit Sub
With gRegex.Match(line)
If .Success Then
' 只取单字,不取词组
If .Groups( " Word " ).Value.Length = 1 Then
Add(.Groups( " Word " ).Value, .Groups( " PingYin " ).Value)
End If
End If
End With
End Sub
Private Sub Add( ByVal word As String , ByVal py As String )
' 多音的,拼音间用单个空枨符隔开
py = py.Trim.Replace( " " , " " )
Dim mCode As String = ChineseCode(word)
Dim mRow As dsPinYin.PinYinRow = Me .gDataSet.PinYin.FindBy代码(mCode)
If mRow Is Nothing Then
Me .gDataSet.PinYin.AddPinYinRow(word, mCode, py)
Else
Dim pyArray() As String = py.Split( " " c)
For Each s As String In pyArray
If Not mRow.拼音.Contains(s) Then
mRow.拼音 = String .Concat(mRow.拼音, " " & s)
End If
Next
End If
End Sub
' '' <summary>
' '' 将字符串转为拼音
' '' </summary>
' '' <param name="line">字符串</param>
' '' <param name="isgetfirst">如是多音字,取第一个拼音</param>
Public Function ToPinyin( ByVal line As String , ByVal isgetfirst As Boolean ) As String
Dim mBuilder As New Text.StringBuilder
For Each s As Char In line.ToCharArray
If IsTrue(s) Then
mBuilder.Append(GetPinyin(s, isgetfirst))
Else
mBuilder.Append(s)
End If
Next
Return mBuilder.ToString
End Function
Private Function GetPinyin( ByVal word As String , ByVal isgetfirst As Boolean ) As String
Dim mResult As String = word
Dim mArray As String () = PinYinArray(ChineseCode(word)) ' 取拼音组
If Not mArray Is Nothing Then
If mArray.Length = 1 Or isgetfirst Then
mResult = mArray( 0 ) ' 单音的
Else
mResult = String .Format( " ({0}) " , String .Join( " , " , mArray)) ' 多音的用括号括住,拼音间用逗号隔开
End If
End If
Return mResult
End Function
' 取拼音组
Private Function PinYinArray( ByVal code As String ) As String ()
Dim mRow As dsPinYin.PinYinRow = Me .gDataSet.PinYin.FindBy代码(code)
If mRow Is Nothing Then Return Nothing
Return mRow.拼音.Split( " " c)
End Function
' '' <summary>
' '' 按拼音查字
' '' </summary>
' '' <param name="pinyin">拼音</param>
Public Function WordArray( ByVal pinyin As String ) As String ()
Dim mRows As dsPinYin.PinYinRow() = CType ( Me .gDataSet.PinYin.Select( String .Format( " 拼音 LIKE '%{0}%' " , pinyin)), dsPinYin.PinYinRow())
Dim mResult( - 1 ) As String
For i As Integer = 0 To mRows.Length - 1
If Array.IndexOf(mRows(i).拼音.Split( " " c), pinyin) <> - 1 Then
Me .Append(mResult, mRows(i).汉字)
End If
Next
Return mResult
End Function
' '' <summary>
' '' 按拼音查字
' '' </summary>
' '' <param name="pinyin">拼音</param>
Public Function Words( ByVal pinyin As String ) As String
Return String .Concat(WordArray(pinyin))
End Function
' '' <summary>
' '' 汉字代码
' '' </summary>
' '' <param name="word">单个汉字</param>
Public Shared Function ChineseCode( ByVal word As String ) As String
If Not IsTrue(word) Then Return Nothing
Dim bytes() As Byte = System.Text.Encoding.Default.GetBytes(word)
Return String .Concat( Hex (bytes( 0 )), Hex (bytes( 1 )))
End Function
' '' <summary>
' '' 是否是单个汉字
' '' </summary>
' '' <param name="word">字符</param>
Public Shared Function IsTrue( ByVal word As String ) As Boolean
If word Is Nothing Then Return False
Return System.Text.RegularExpressions.Regex.IsMatch(word, "^[/u4e00-/u9fa5]$" )
End Function
Private Sub Append( ByRef collection As String (), ByVal value As String )
ReDim Preserve collection(collection.Length)
collection(collection.Length - 1 ) = value
End Sub
End Class
End Namespace
效果图:
下载方案:代码 版本二
汉字拼音的一个解决方法相关推荐
- 汉字拼音的一个解决方法(初具使用价值)
Author: 水如烟 这个版本已有使用价值.如果要求不高,基本满足需要.一并贴出来,也对比一下. 这个版本的汉字库已纳入程序资源里头,大小为324K. 主要代码如下: Namespace Busi ...
- mysql数据库sql汉字数字排序_MYSQL数据库UTF8编码使用汉字拼音第一个字母排序的方法...
MYSQL数据库UTF8编码使用汉字拼音第一个字母排序的方法 今天做网站时遇到了这样一个问题,有一个标签数据库,在管理标签时想按标签列的汉字拼音的第一个字母排序,这样人工查找的时候就很快可以看到: 于 ...
- iOS获取汉字拼音首字母的方法
iOS获取汉字拼音首字母的方法 之前在项目中需要根据昵称的首字母进行排序,蹚了几个坑,今天记录一下.其实iOS系统封装的就有获取汉字首字母的方法,但不推荐,想看最优解的同学直接略过: var name ...
- Requirejs加载超时问题的一个解决方法:设置waitSeconds=0
Requirejs加载超时问题的一个解决方法:设置waitSeconds=0 参考文章: (1)Requirejs加载超时问题的一个解决方法:设置waitSeconds=0 (2)https://ww ...
- mysql启动失败的一个解决方法
mysql启动失败的一个解决方法 参考文章: (1)mysql启动失败的一个解决方法 (2)https://www.cnblogs.com/notfresh/p/mysqlStartError.htm ...
- python怎么识别拼音-python获取一组汉字拼音首字母的方法
本文实例讲述了python获取一组汉字拼音首字母的方法.分享给大家供大家参考.具体实现方法如下: #!/usr/bin/env python # -*- coding: utf-8 -*- def m ...
- python汉字拼音查询_python获取一组汉字拼音首字母的方法
本文实例讲述了python获取一组汉字拼音首字母的方法.分享给大家供大家参考.具体实现方法如下: #!/usr/bin/env python # -*- coding: utf-8 -*- def m ...
- mysql查询汉字拼音首字母的方法_MySQL查询汉字拼音首字母的方法
下面为您介绍了MySQL查询汉字拼音首字母的方法,该方法极具实用价值,如果您之前遇到过类似方面的问题,不妨一看. MySQL查询汉字拼音首字母方法如下: 1.建立拼音首字母资料表 Sql代码: DRO ...
- python汉字转拼音首字母_python获取一组汉字拼音首字母的方法
作者:不吃皮蛋 字体: 类型:转载 这篇文章主要介绍了python获取一组汉字拼音首字母的方法,涉及Python针对汉字操作的相关技巧,需要的朋友可以参考下 本文实例讲述了python获取一组汉字拼音 ...
最新文章
- 华为、百度、小米踏上造车新征程,软件如何吞噬汽车?
- 蓝桥杯最短路(java过)spfa单源最短路算法
- OpenKruise:解放 DaemonSet 运维之路
- Microsoft宣布为Power BI提供AI模型构建器,关键驱动程序分析和Azure机器学习集成...
- 【转】Ubuntu下使用sysv-rc-conf管理服务
- 如何快速下载CentOS7镜像
- mysql锁与程序锁_sql 锁类型与锁机制
- 5g pdu session_设备 | NEC被选为NTT DOCOMO独立5G移动核心的供应商
- php ajax怎么拿id,php ajax无刷新分页,支持id定位
- IOS AVPlayer视频播放器 AVPlayerViewController视频播放控制器
- 这些CAD制图初学入门问题你遇到过吗?CAD制图初学入门全攻略!
- 机器学习(课堂笔记)Day01:机器学习相关概念简介
- 紫罗兰永恒花园女性CG模型作品
- 我写代码的这十年——致逝去的青春
- 本周运气大爆发~希望不会把自己的好运都用光了……
- Python实现输出电话号码对应的字母组合
- 互联网公司招聘--奇虎360--技术类--2013年笔试题
- 《寒蝉鸣泣之时:携带版》游戏截图
- CISP管理部分-3、信息安全管理
- spaceclaim简单建模
热门文章
- js是滚动条滑到固定位置_JavaScript 滚动条定位指定位置
- kali linux查询自己的ip,Kali Linux常用服务配置教程获取IP地址
- 毫米波雷达的硬件架构与射频前端
- java 反射 获取 实例_java通过类反射获取某个类的所有信息--代码实例
- MySQL之索引及其背后的数据结构
- android 5.1 flash,Flash Player for Android 4.0 and 5.1 以上版本(提供下載)
- Eclipse的TPTP使用方法
- 金融数据分析与挖掘具体实现方法
- Android四大组件Service之AIDL详解
- python证书有什么用_用Python在获奖证书写上获奖者的名字