汉字转拼音:汉字拼音的一个解决方法



平常中经常用到汉字转拼音比如批量生成姓名->拼音作为登录帐号

这个思路方法只是简单利用汉字拼音库至于如何找这个库网上多有介绍在最后提供下载方案中也提供了这个库文本文件

主要代码如下:

Imports.IO
Imports.Text.RegularExpressions

NamespaceBusinness.PinYin
PublicClassPYService
PrivategDataSetAsNewdsPinYin

\'\'\'<summary>
\'\'\'汉字表
\'\'\'</summary>
PublicReadOnlyPropertyPinYinTableAsdsPinYin.PinYinDataTable
Get
ReturngDataSet.PinYin
EndGet
EndProperty

PrivategTxtFileAsString=AppDo.CurrentDo.SetupInformation.ApplicationBase&\"pinyin.txt\"
PrivategxmlFileAsString=AppDo.CurrentDo.SetupInformation.ApplicationBase&\"pinyin.xml\"

PrivategRegexAsNewRegex(\"(?<Word>^[\\u4e00-\\u9fa5]+)(?<PingYin>.*)\")



\'\'\'<summary>
\'\'\'加载汉字库,文件名为pinyin.xml,在当前目录下
\'\'\'</summary>
PublicSubLoad
IfNotIO.File.Exists(gxmlFile)Then
ThrowNewException(String.Format(\"文件{0}不存在\",gxmlFile))
EndIf

DataSetInitialize
gDataSet.ReadXml(gxmlFile)
EndSub

\'\'\'<summary>
\'\'\'从汉字文件中更新,文件名为pinyin.txt,在当前目录下
\'\'\'</summary>
\'\'\'<remarks></remarks>
PublicSubUpdate
IfNotIO.File.Exists(gTxtFile)Then
ThrowNewException(String.Format(\"文件{0}不存在\",gTxtFile))
EndIf

UpdateFromTxt(gTxtFile)
EndSub



\'\'\'<summary>
\'\'\'保存汉字库,文件为pingyin.xml,在当前目录下
\'\'\'</summary>
\'\'\'<remarks></remarks>
PublicSubSave
gDataSet.WriteXml(gxmlFile)
EndSub

PrivateSubDataSetInitialize
\'在更新或读入时,清除
Me.gDataSet.Clear
Me.gDataSet.AcceptChanges
EndSub

PrivateSubUpdateFromTxt(ByValfileAsString)
DataSetInitialize

DimmLineAsString
DimmBuilderAsNew.Text.StringBuilder
DimmReaderAsNewIO.StreamReader(file,.Text.Encoding.Default)
Do
mLine
=mReader.ReadLine
Add(mLine)
LoopUntilString.IsNullOrEmpty(mLine)

mReader.Close
mReader.Dispose



Me.gDataSet.PinYin.AcceptChanges
EndSub

PrivateSubAdd(ByVallineAsString)
IflineIsNothingThenExitSub

WithgRegex.Match(line)

If.SuccessThen

\'只取单字,不取词组
If.Groups(\"Word\").Value.Length=1Then
Add(.Groups(
\"Word\").Value,.Groups(\"PingYin\").Value)
EndIf

EndIf
EndWith
EndSub

PrivateSubAdd(ByValwordAsString,ByValpyAsString)
\'多音,拼音间用单个空枨符隔开



py
=py.Trim.Replace(\"\",\"\")

DimmCodeAsString=ChineseCode(word)
DimmRowAsdsPinYin.PinYinRow=Me.gDataSet.PinYin.FindBy代码(mCode)
IfmRowIsNothingThen
Me.gDataSet.PinYin.AddPinYinRow(word,mCode,py)
Else
DimpyArrayAsString=py.Split(\"\"c)
ForEachsAsStringInpyArray
IfNotmRow.拼音.Contains(s)Then
mRow.拼音
=String.Concat(mRow.拼音,\"\"&s)
EndIf
Next
EndIf



EndSub

\'\'\'<summary>
\'\'\'将串转为拼音
\'\'\'</summary>
\'\'\'<paramname=\"line\">串</param>
\'\'\'<paramname=\"isgetfirst\">如是多音字,取第个拼音</param>
PublicFunctionToPinyin(ByVallineAsString,ByValisgetfirstAsBoolean)AsString
DimmBuilderAsNewText.StringBuilder

ForEachsAsCharInline.ToCharArray
IfIsTrue(s)Then
mBuilder.Append(GetPinyin(s,isgetfirst))
Else
mBuilder.Append(s)
EndIf
Next

ReturnmBuilder.
EndFunction

PrivateFunctionGetPinyin(ByValwordAs

String,ByValisgetfirstAsBoolean)AsString
DimmResultAsString=word

DimmArrayAsString=PinYinArray(ChineseCode(word))\'取拼音组
IfNotmArrayIsNothingThen
IfmArray.Length=1OrisgetfirstThen
mResult
=mArray(0)\'单音
Else

mResult
=String.Format(\"({0})\",String.Join(\",\",mArray))\'多音用括号括住,拼音间用逗号隔开
EndIf
EndIf

ReturnmResult
EndFunction



\'取拼音组
PrivateFunctionPinYinArray(ByValcodeAsString)AsString
DimmRowAsdsPinYin.PinYinRow=Me.gDataSet.PinYin.FindBy代码(code)
IfmRowIsNothingThenReturnNothing

ReturnmRow.拼音.Split(\"\"c)
EndFunction

\'\'\'<summary>
\'\'\'按拼音查字
\'\'\'</summary>
\'\'\'<paramname=\"pinyin\">拼音</param>
PublicFunctionWordArray(ByValpinyinAsString)AsString
DimmRowsAsdsPinYin.PinYinRow=CType(Me.gDataSet.PinYin.Select(String.Format(\"拼音LIKE\'%{0}%\'\",pinyin)),dsPinYin.PinYinRow)
DimmResult(-

1)AsString
ForiAsInteger=0TomRows.Length-1
IfArray.IndexOf(mRows(i).拼音.Split(\"\"c),pinyin)<>-1Then
Me.Append(mResult,mRows(i).汉字)
EndIf
Next
ReturnmResult
EndFunction

\'\'\'<summary>
\'\'\'按拼音查字
\'\'\'</summary>
\'\'\'<paramname=\"pinyin\">拼音</param>
PublicFunctionWords(ByValpinyinAsString)AsString
ReturnString.Concat(WordArray(pinyin))
EndFunction


\'\'\'<summary>
\'\'\'汉字代码


\'\'\'</summary>
\'\'\'<paramname=\"word\">单个汉字</param>
PublicSharedFunctionChineseCode(ByValwordAsString)AsString
IfNotIsTrue(word)ThenReturnNothing

DimsAsByte=.Text.Encoding.Default.GetBytes(word)

ReturnString.Concat(Hex(s(0)),Hex(s(1)))
EndFunction

\'\'\'<summary>
\'\'\'是否是单个汉字
\'\'\'</summary>
\'\'\'<paramname=\"word\"></param>
PublicSharedFunctionIsTrue(ByValwordAsString)AsBoolean
IfwordIsNothing

ThenReturnFalse

Return.Text.RegularExpressions.Regex.IsMatch(word, \"^[\\u4e00-\\u9fa5]$\")
EndFunction

PrivateSubAppend(ByRefcollectionAsString,ByValvalueAsString)
ReDimPreservecollection(collection.Length)
collection(collection.Length
-1)=value
EndSub
EndClass
EndNamespace


效果图:

\"\"

\"\"

\"\"

\"\"

Tags:  汉字转换拼音 汉字查拼音 汉字拼音 汉字转拼音

延伸阅读

最新评论

发表评论