| 汉字拼音的一个解决方法(初具使用价值) |
| 这个版本已有使用价值。如果要求不高,基本满足需要。一并贴出来,也对比一下。 这个版本的汉字库已纳入程序资源里头,大小为324K。 主要代码如下:
Namespace
Businness.PinYin
Public Class SpellInformation Private gTone As String Private gSpellInput As String Private gSpellExpress As String ' '' <summary> ' '' 声调 ' '' </summary> Public Property Tone() As String Get Return gTone End Get Set ( ByVal value As String ) gTone = value.Trim End Set End Property ' '' <summary> ' '' 拼音输入码 ' '' </summary> Public Property SpellInput() As String Get Return gSpellInput End Get Set ( ByVal value As String ) gSpellInput = value.Trim End Set End Property ' '' <summary> ' '' 拼音 ' '' </summary> Public Property SpellExpress() As String Get Return gSpellExpress End Get Set ( ByVal value As String ) gSpellExpress = value.Trim End Set End Property Sub New () End Sub ' '' <param name="tone">声调</param> ' '' <param name="spellinput">拼音输入码</param> ' '' <param name="spellexpress">拼音</param> Sub New ( ByVal tone As String , ByVal spellinput As String , ByVal spellexpress As String ) Me .Tone = tone Me .SpellInput = spellinput Me .SpellExpress = spellexpress End Sub ' '' <param name="spellexpress">拼音</param> Public Overrides Function Equals( ByVal spellexpress As Object ) As Boolean Return Me .SpellExpress.Equals(spellexpress) End Function Public Overrides Function ToString() As String Return String .Format( " 拼音码 声调 拼音 " , Me .SpellInput, Me .Tone, Me .SpellExpress) End Function End Class End Namespace
Namespace
Businness.PinYin
Public Class Word Private gValue As String ' '' <param name="word">单个汉字</param> Sub New ( ByVal word As String ) Me .gValue = word End Sub ' '' <summary> ' '' 汉字 ' '' </summary> Public ReadOnly Property Value() As String Get Return gValue End Get End Property Public ReadOnly Property Code() As String Get Return Common.Code(gValue) End Get End Property Private gSpellList As New Dictionary( Of String , SpellInformation) ' '' <summary> ' '' 拼音集 ' '' </summary> Public ReadOnly Property Spells() As SpellInformation() Get Dim tmp(gSpellList.Count - 1 ) As SpellInformation gSpellList.Values.CopyTo(tmp, 0 ) Return tmp End Get End Property ' '' <summary> ' '' 是否多音字 ' '' </summary> Public ReadOnly Property IsMutiSpell() As Boolean Get Return gSpellList.Count > 1 End Get End Property Public Sub AddSpell( ByVal spell As SpellInformation) If String .IsNullOrEmpty(spell.SpellExpress) Then Exit Sub If Me .gSpellList.ContainsKey(spell.SpellExpress) Then Exit Sub Me .gSpellList.Add(spell.SpellExpress, spell) End Sub Public Sub AddSpell( ByVal tone As String , ByVal spellinput As String , ByVal spellexpress As String ) Dim tmp As New SpellInformation(tone, spellinput, spellexpress) AddSpell(tmp) End Sub Public ReadOnly Property DefaultSpell() As SpellInformation Get If Me .gSpellList.Count = 0 Then Return Nothing Return Me .Spells( 0 ) End Get End Property Public ReadOnly Property DefaultSpellExpress() As String Get If DefaultSpell Is Nothing Then Return Nothing Return Me .DefaultSpell.SpellExpress End Get End Property Public ReadOnly Property DefaultSpellInput() As String Get If DefaultSpell Is Nothing Then Return Nothing Return Me .DefaultSpell.SpellInput End Get End Property Public ReadOnly Property DefaultTone() As String Get If DefaultSpell Is Nothing Then Return Nothing Return Me .DefaultSpell.Tone End Get End Property Public ReadOnly Property AllSpellExpress() As String Get If Me .gSpellList.Count = 0 Then Return Nothing If Not Me .IsMutiSpell Then Return Me .DefaultSpellExpress Dim tmp(gSpellList.Count - 1 ) As String For i As Integer = 0 To gSpellList.Count - 1 tmp(i) = Me .Spells(i).SpellExpress Next Return String .Join( " " , tmp) End Get End Property Public ReadOnly Property AllSpellInput() As String Get If Me .gSpellList.Count = 0 Then Return Nothing If Not Me .IsMutiSpell Then Return Me .DefaultSpellInput Dim tmp(gSpellList.Count - 1 ) As String For i As Integer = 0 To gSpellList.Count - 1 tmp(i) = Me .Spells(i).SpellInput Next Return String .Join( " " , tmp) End Get End Property Public ReadOnly Property AllTone() As String Get If Me .gSpellList.Count = 0 Then Return Nothing If Not Me .IsMutiSpell Then Return Me .DefaultTone Dim tmp(gSpellList.Count - 1 ) As String For i As Integer = 0 To gSpellList.Count - 1 tmp(i) = Me .Spells(i).Tone Next Return String .Join( " " , tmp) End Get End Property Public Overrides Function ToString() As String Dim mBuilder As New System.Text.StringBuilder For Each spell As SpellInformation In Me .Spells mBuilder.AppendLine( String .Concat( Me .Value, " " , spell.ToString)) Next Return mBuilder.ToString End Function End Class End Namespace
Imports
System.IO
Imports System.Text.RegularExpressions Namespace Businness.PinYin Public Class PYService Private gDataSet As dsPinYin ' '' <summary> ' '' 汉字表 ' '' </summary> Public ReadOnly Property PinYinTable() As dsPinYin.PinYinDataTable Get Return gDataSet.PinYin End Get End Property ' '' <summary> ' '' 单个汉字信息 ' '' </summary> ' '' <param name="word">单个汉字</param> Public Function GetWord( ByVal word As String ) As Word Dim mRow As dsPinYin.PinYinRow = Me .gDataSet.PinYin.FindBy代码(GetCode(word)) Return RowConverter(mRow) End Function Private Function RowConverter( ByVal row As dsPinYin.PinYinRow) As Word If row Is Nothing Then Return Nothing Dim mWord As New Word(row.汉字) Dim mSpellExpressArray() As String = row.拼音.Split( " " c) Dim mToneArray() As String = row.声调.Split( " " c) Dim mSpellInputArray() As String = row.拼音码.Split( " " c) For i As Integer = 0 To mSpellExpressArray.Length - 1 mWord.AddSpell(mToneArray(i), mSpellInputArray(i), mSpellExpressArray(i)) Next Return mWord End Function Private Sub RowUpdate( ByVal word As Word) Dim mWord As Word = GetWord(word.Value) If mWord Is Nothing Then Dim tmpRow As dsPinYin.PinYinRow = Me .gDataSet.PinYin.AddPinYinRow(word.Value, word.Code, "" , "" , "" , True ) mWord = RowConverter(tmpRow) End If For Each spell As SpellInformation In word.Spells mWord.AddSpell(spell) Next Dim mRow As dsPinYin.PinYinRow = Me .gDataSet.PinYin.FindBy代码(mWord.Code) With mRow .拼音码 = mWord.AllSpellInput .拼音 = mWord.AllSpellExpress .声调 = mWord.AllTone .单音 = Not mWord.IsMutiSpell End With End Sub Public Sub Load() UpdateFromTxt() End Sub ' 文件存放的格式是:汉字,拼音,音调,拼音码 Private Sub UpdateFromTxt() Me .gDataSet = New dsPinYin LzmTW.uSystem.uCollections.CommonServices.MoveNext( Of String )(My.Resources.pinyin.Split( CChar (vbCrLf)), AddressOf Action) Me .gDataSet.AcceptChanges() End Sub ' 文件存放的格式是:汉字,拼音,音调,拼音码 Private Sub Action( ByVal line As String ) Dim mArray As String () mArray = line.Split( " , " c) If mArray.Length <> 4 Then Exit Sub Dim mWord As String = mArray( 0 ).Trim Dim mSpellExpress As String = mArray( 1 ).Trim Dim mTone As String = mArray( 2 ).Trim Dim mSpellInput As String = mArray( 3 ).Trim Dim mWordInformation As New Word(mWord) mWordInformation.AddSpell(mTone, mSpellInput, mSpellExpress) RowUpdate(mWordInformation) End Sub ' '' <summary> ' '' 将字符串转为拼音 ' '' </summary> ' '' <param name="line">字符串</param> ' '' <param name="isgetfirst">如是多音字,取第一个拼音</param> ' '' <param name="forInput">是则查拼音码,否则查拼音</param> Public Function ToPinyin( ByVal line As String , ByVal isgetfirst As Boolean , ByVal forInput As Boolean ) As String Dim mBuilder As New Text.StringBuilder For Each s As Char In line.ToCharArray If Common.IsSingleWord(s) Then mBuilder.Append(GetPinyin(s, isgetfirst, forInput)) Else mBuilder.Append(s) End If Next Return mBuilder.ToString End Function Private Function GetPinyin( ByVal word As String , ByVal isgetfirst As Boolean , ByVal forInput As Boolean ) As String Dim mResult As String Dim mWord As Word = GetWord(word) If isgetfirst Or Not mWord.IsMutiSpell Then If forInput Then mResult = mWord.DefaultSpellInput Else mResult = mWord.DefaultSpellExpress End If Else If forInput Then Dim tmpList( - 1 ) As String For Each spell As SpellInformation In mWord.Spells If Array.IndexOf(tmpList, spell.SpellInput) = - 1 Then LzmTW.uSystem.uCollections.CommonServices.Append(tmpList, spell.SpellInput) End If Next If tmpList.Length = 1 Then mResult = mWord.DefaultSpellInput Else mResult = String .Format( " () " , String .Join( " " , tmpList)) End If Else mResult = String .Format( " () " , mWord.AllSpellExpress) End If End If Return mResult 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 '%%' " , 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 LzmTW.uSystem.uCollections.CommonServices.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 Public Function GetCode( ByVal word As String ) As String Return Common.Code(word) End Function End Class End Namespace 调用的代码
Public
Class
Form1
Dim gPinyinService As New LzmTW.Businness.PinYin.PYService Private Sub ButtonLoad_Click( ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonLoad.Click gPinyinService.Load() Me .DataGridView1.DataSource = gPinyinService.PinYinTable End Sub Private Sub ButtonTran_Click( ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonTran.Click Me .RichTextBox2.Text = gPinyinService.ToPinyin( Me .RichTextBox1.Text, Me .CheckBox1.Checked, Me .CheckBox2.Checked) End Sub Private Sub ButtonWord_Click( ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonWord.Click Me .RichTextBox3.Text = gPinyinService.Words( Me .TextBoxPinyin.Text) End Sub Private Sub Button1_Click( ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Me .RichTextBox3.Text = gPinyinService.GetWord( Me .TextBox1.Text).ToString End Sub End Class 效果图:
|
汉字拼音的一个解决方法(初具使用价值)
汉字拼音转换解决方案
最新推荐文章于 2022-02-25 21:57:21 发布
本文介绍了一个初步具备实用价值的汉字转拼音系统,该系统通过整合拼音库到程序资源中实现汉字拼音转换,并提供了完整的源代码及示例。使用者可以通过简单的配置获取汉字的拼音及其声调。
部署运行你感兴趣的模型镜像
您可能感兴趣的与本文相关的镜像
Yolo-v8.3
Yolo
YOLO(You Only Look Once)是一种流行的物体检测和图像分割模型,由华盛顿大学的Joseph Redmon 和Ali Farhadi 开发。 YOLO 于2015 年推出,因其高速和高精度而广受欢迎








2万+

被折叠的 条评论
为什么被折叠?



