使用完整拼音查找汉字(完整拼音,不是网上散布的首字符拼音那种方法)

article/2025/7/3 8:57:05

 

注意:这绝不是网上散播的只能使用拼音首字符进行汉字查找的方案,这是一个真正的输入完整拼音得到相应汉字的解决办法。

 大部分程序员眼中只有变量、函数……他们忽略生活中的一切,他们并不理解真正的优雅的程序解决方案往往来自生活!

 今天群内有兄弟提问怎样使用一个完整的拼音查找到相应的汉字。这显然是网上散播的只能使用拼音首字符进行汉字查找的方案无法解决的,他们在拼命地寻找微软的API,网上现成的函数,但他们忽略了一点,其实所有的一切,都因为他们缺少一个(汉字,拼音)这样的格式的数据库。
 其实取得这样一个数据库很简单。在很久以前我初学电脑,很久很久以前的事了,我那时只会玩各种不同的游戏8-)由于我不会用win98,所以我常常用鼠标点击我可以点击到的一切东西,其中适好包括一个叫“输入法生成器”的程序。更奏巧的是我当时也适好发现这个输入法生成器可以将输入法的数据库转为一个可读的TXT文件。只要取得全拼输入法的数据文件,一切都解决了。

 1、首先需要一个win98 ,你们可能没有了吧,因为你们不玩游戏8(,用VMware虚拟安装啦。输入法生成器是可选安装的,如果在附件中没看到<输入法生成器> ,就使用win98 的安装程序安装它。
 打开输入法生成器,选逆转换 ,打开文件c:\windows\system\winpy.mb(这是全拼输入法的数据文件),在码表原文件中写上c:\windows\desktop\winpy.txt 按逆转换 
  20060630231529_52.jpg
 很高兴,我们得到了拼音字符的数据库文件winpy.txt。
 用编辑软件打开这个文件,看到这样的格式:
 Description]
 Name=全拼
 MaxCodes=12
 MaxElement=1
 UsedCodes=abcdefghijklmnopqrstuvwxyz
 WildChar=?
 NumRules=3
 [Rule]
 ca4=p10+p20+p30+p40
 ce2=p10+p20
 ce3=p10+p20+p30
 [Text]
 啊a
 阿a
 一个汉字对一个拼音,回车换行符分开各项,将这种格式的字符串分为汉字和拼音是很容易的,拼音是字母,在unicode中不会超过255,汉字在unicode中大于255,根据这个判断来分割就行了
 
 2、将文件的头几行说明删除后,我们得到这样格式的拼音与汉字的键对(呵a he),应为需要用拼音找汉字,我再用一个C#代码将这个文件格式变为(a he呵)拼音在前,汉字在后这样的格式以方便查找。
 示例程序效果如下,两个textbox,上面一个输拼音,下面一个会显示这个拼音对应的汉字,这一刻起我才发现中华汉字是那样的博大精深,一个读音居然有这么多的同音字:

20060630231540_162.jpg
 
 完整的C#代码 /Files/DreamlikeAttic/Pinyintest.rar如下,由于是示例,我并没有使用二分查分之类的方法优化,我只是简单将数据文件以字符串的方式读到内存,并使用indexof来确定拼音的位置后取得对应的文字。并且对数据文件也进行了处理,去掉了所有的词组,在debug中可以看到PYCompact.txt这个不再包含词组拼音的数据文件。其实得到了这个数据库,你要怎么玩拼音都可以,不会数据搜索技术就自己再学习一下大学的教科书吧!

   public partial class Form1 : Form
  {
    string m_strPinyinLib;//保存数据文件中所有的拼音及汉字
public Form1()
    {
      InitializeComponent();
    }
private void Form1_Load(object sender, EventArgs e)
    {
      StreamReader tobjTextReader;
      StreamWriter tobjTextWriter;
      BinaryWriter tobjBinaryWriter;
FileStream tobjOutPutFile;
string tstrItemValue;
      string tstrTemp;
tobjTextReader = new StreamReader(@"winpy.txt", true);
tobjOutPutFile = File.Open("PYCompact.txt", FileMode.Create);
      tobjBinaryWriter = new BinaryWriter(tobjOutPutFile);
      tobjTextWriter = new StreamWriter(tobjOutPutFile, Encoding.Unicode);
tstrItemValue = tobjTextReader.ReadLine();
      while (tstrItemValue != null)
      {
        //只保留单字不再要库中的词组
        if (tstrItemValue.ToCharArray()[1] < 255)
        {
          //将拼音放在前面
          tstrTemp = tstrItemValue.Substring(1) + tstrItemValue.Substring(0, 1);
tobjTextWriter.WriteLine(tstrTemp);
        }//end if
        //tobjBinaryWriter.Write(
tstrItemValue = tobjTextReader.ReadLine();
      }//end while
tobjTextWriter.Close();
      tobjBinaryWriter.Close();
      tobjOutPutFile.Close();
tobjTextReader.Close();
//将拼音库的内容读到一个字符串中待用
      tobjTextReader = new StreamReader(@"PYCompact.txt", true);
      m_strPinyinLib = tobjTextReader.ReadToEnd();
      tobjTextReader.Close();
}
private void textBox1_TextChanged(object sender, EventArgs e)
    {
      string tstrChineseList = "";
      if (textBox1.Text != "")
        tstrChineseList = findChinese(textBox1.Text);
textBox2.Text = tstrChineseList;
    }//end sub
string findChinese(string ni_strPinyin)
    {
      int tintFirstFind;
      string tstrReturn = "";
      string tstrTemp = "";
      int tintloop;
tintFirstFind = m_strPinyinLib.IndexOf(ni_strPinyin);
      while (tintFirstFind >= 0)
      {

        for (tintloop = tintFirstFind; tintloop < m_strPinyinLib.Length - 1; tintloop++)
        {
          if ((tintFirstFind - 1) > 0)
          {
            if (m_strPinyinLib.Substring(tintFirstFind - 1, 1).ToCharArray()[0] < 255
                && m_strPinyinLib.Substring(tintFirstFind - 1, 1).ToCharArray()[0] != ' ')
            {
              break; //由于找到的这个拼音前面还有英文字符且不为空格,说明这个拼音可是是u查找到gu这种情况,不予理会
            }//end if
          }//end if
if ((tintFirstFind + ni_strPinyin.Length) <( m_strPinyinLib.Length - 1))
          {
            if (m_strPinyinLib.Substring(tintFirstFind + ni_strPinyin.Length, 1).ToCharArray()[0] < 255
              && m_strPinyinLib.Substring(tintFirstFind + ni_strPinyin.Length, 1).ToCharArray()[0] != ' ')
            {
              break; //由于找到的这个拼音后面还有英文字符且不为空格,说明这个拼音可是是gu查找到guang这种情况,不予理会
            }//end if
          }//endif
tstrTemp = m_strPinyinLib.Substring(tintloop, 1);
          if (tstrTemp.ToCharArray()[0] > 255)
          { //找到对应的汉字,退出
            break;
          }//end if
        }//next
tstrReturn += tstrTemp;
tintFirstFind = m_strPinyinLib.IndexOf(ni_strPinyin, tintloop + 1);

      }//end while
return (tstrReturn);
}//end function
}//end class
本blog文档,未经作者许可,谢绝转载!

转载于:https://www.cnblogs.com/DreamlikeAttic/archive/2006/06/30/440048.html


http://chatgpt.dhexx.cn/article/3hiJEwIK.shtml

相关文章

基于LeNet5实现交通标志分类任务

前言 大家好,我是阿光。 本专栏整理了《PyTorch深度学习项目实战100例》,内包含了各种不同的深度学习项目,包含项目原理以及源码,每一个项目实例都附带有完整的代码+数据集。 正在更新中~ ✨ 🚨 我的项目环境: 平台:Windows10语言环境:python3.7编译器:PyCharmPy…

Lenet5网络结构

Lenet5网络是深度学习中最基本的网络结构,开始于90年代,最早是应用于手写数字识别。受限于当时的环境,所以一开始不怎么出名。但是,在2012年,出现了Alexnet,在图像分类领域打败了所有机器学习方法。深度学习开始变得火热。 import torch import torch.nn as nn import t…

[PyTorch][chapter 41][卷积网络实战-LeNet5]

前言 这里结合前面学过的LeNet5 模型&#xff0c;总结一下卷积网络搭建&#xff0c;训练的整个流程 目录&#xff1a; 1&#xff1a; LeNet-5 2: 卷积网络总体流程 3&#xff1a; 代码 一 LeNet-5 LeNet-5是一个经典的深度卷积神经网络&#xff0c;由Yann LeCun在1998年提…

(一)Lenet5 手写数字识别原理及代码解析

模型简单&#xff0c;本地可跑 论文参考&#xff1a;Gradient-based learning applied to document recognition MNIST手写数据集 50000个训练数据 10000个测试数据 图像大小2828 10类&#xff08;0-9&#xff09; 一、python预安装库 pip install torch pip install torchvi…

【LeNet5】简单车牌识别

文章目录 1. 项目准备1.1. 问题导入1.2. 数据集简介 2. LeNet5模型2.1. 卷积神经网络2.2. 模型介绍 3. 实验步骤3.0. 前期准备3.1. 数据准备3.2. 网络配置3.3. 模型训练3.4. 模型评估3.5. 模型预测 写在最后 1. 项目准备 1.1. 问题导入 本次实践是一个多分类任务&#xff0c;…

LeNet5—论文及源码阅读

LeNet5实现图像分类 &#x1f42c; 目录: 一、概论二、论文选读三、源码精读 所用数据集介绍LeNet5模型网络构建LeNet5模型训练 测试代码 四、参考资料 一、概论 LeNet-5是一种经典的卷积神经网络结构&#xff0c;于1998年投入实际使用中。该网络最早应用于手写体字符识别应…

重学深度学习系列---LeNet5实现手写数字识别(TensorFlow2-mnist数据集)

重学深度学习系列—LeNet5实现手写数字识别(TensorFlow2-mnist数据集) 文章目录 重学深度学习系列---LeNet5实现手写数字识别(TensorFlow2-mnist数据集)我的环境&#xff1a;一、LeNet5简单介绍二、LeNet-5代码实现三、训练四、对图片进行预测五、训练过程截图&#xff1a;参考…

经典网络-LeNet-5

上图展示展示了 LeNet-5 模型的架构。 是Yann LeCun 教授于1998 年在论文Gradient-based learning applied to document recognition中提出的&#xff0c;它是第一个成功应用于数字识别问题的卷积神经网络。 LeNet-5 详细结构 在下面的篇幅中将详细介绍LeNet-5 模型每一层的…

深度学习---卷积神经网络之LeNet5(TensorFlow 代码实现)

一、前言 1.1 使用全连接神经网络对图像进行处理存在的问题 1、需要处理的数据量大&#xff0c;效率低 现在的图像都有着极高的像素&#xff0c;假设一张需要处理的图片像素是 1000 * 1000 * 3(彩色图片&#xff0c;具有 RGB 3 个通道)&#xff0c;使用具有 100 个隐藏单元的…

浅谈LeNet-5

浅谈LeNet-5 基于Tensorflow的实现欢迎查看我下一篇博客Tensorflow实战 LeNet-5神经网络进行手写体数字识别 一、LetNet是什么&#xff1f; LetNet是一种入门级的神经网络模型&#xff0c;是一个简单的卷积神经网络&#xff0c;可以用来做手写体识别。 下面我将以上图为例简…

卷积神经网络CNN与LeNet5详解(可训练参数量、计算量、连接数的计算+项目实战)

文章目录 神经网络CNN卷积神经网络CNN的由来局部感受野共享权重池化CNN的结构光栅化 LeNet5详解LeNet5-C1层LeNet5-S2层LeNet5-C3层LeNet5-S4层LeNet5-C5层LeNet5-F6层LeNet5-OUTPUT层计算公式 LeNet5实战定义网络模型初始化模型参数训练测试准确率预测结果 神经网络 神经网络可…

lenet5实现

Pytorch环境下搭建lenet5网络实现手写数字识别 &#xff08;文章采用cuda9.0cudnn7.4pytorch1.6环境&#xff09; 数据集选用EMNIST dataset中的手写数据集&#xff0c;参考链接如下&#xff1a; 数据集下载地址 代码部分参考S.E作者的pytorch实现手写英文字母识别&#xff0…

从零开始的神经网络构建历程(三,LeNet5复现)

前两篇博文主要介绍了torch如何构建全连接前馈神经网络&#xff0c;本篇博客主要针对经典卷积神经网络LeNet5进行复现。 卷积神经网络的基本结构 相信不少人都看过不少博客&#xff0c;也都对卷积神经网络的大致结构了解一点&#xff0c;这里本人站在神经元的角度来描述卷积神…

卷积神经网络LeNet5结构

LeNet5可以说是最早的卷积神经网络了&#xff0c;它发表于1998年&#xff0c;论文原文Gradient-Based Learning Applied to Doucment Recognition作者是Yann Le Cun等。下面对LeNet5网络架构进行简单的说明&#xff0c;有兴趣的同学可以去参考原文&#xff0c;论文原文地址http…

Lenet5(1998)

先读 https://blog.csdn.net/zhangjunhit/article/details/53536915 https://blog.csdn.net/qianqing13579/article/details/71076261 第三个卷积层&#xff0c;S2 6个1010的特征映射&#xff0c;C3是16个1010的特征映射&#xff0c;怎么做的呢&#xff1f; 关注C3层 Why not …

LeNet5的论文及理解

LeNet5网络的来源&#xff1a;Lcun Y, Bottou L, Bengio Y, et al. Gradient-based learning applied to document recognition[J]. Proceedings of the IEEE, 1998, 86(11):2278-2324. 1. 卷积神经网络&#xff08;Convolutional Neural Network&#xff0c;CNN&#xff09;基…

Pytorch搭建LeNet5网络

本讲目标&#xff1a;   介绍Pytorch搭建LeNet5网络的流程。 Pytorch八股法搭建LeNet5网络 1.LeNet5网络介绍2.Pytorch搭建LeNet5网络2.1搭建LeNet网络2.2测试LeNet网络输出2.3下载数据集2.4加载并配置网络2.5训练并保存网络2.6测试图片 1.LeNet5网络介绍 借鉴点&#xff1a;…

HLS:卷积神经网络LeNet5的实现与测试

目录 一、引言二、LeNet5的学习三、数学知识补充四、HLS代码设计五、仿真综合与优化六、Zynq平台搭建测试七、一些注意点八、文献时间线与后续工作 一、引言 1、开发环境。 Windows10、Vivado2018.2、Vivado HLS与Xilinx SDK。 2、LeNet5概述。 1994年&#xff0c;CNN网络&…

卷积神经网络(一):LeNet5的基本结构

在机器视觉&#xff0c;图像处理领域&#xff0c;卷积神经网络取得了巨大的成功。本文将参考UFLDL和DEEPLEARNING.NET的教程&#xff0c;结合自己的理解&#xff0c;梳理一下卷积神经网络的构成以及其BP算法的求解。虽然利用theano可以方便的实现LeNet5&#xff0c;但是不利于学…

LeNet5网络结构详解

文章目录 1.论文地址&#xff1a;2.LeNet5网络结构&#xff1a;3.首先了解参数量和计算量之间的区别和计算&#xff1a;&#xff08;1&#xff09;参数量&#xff08;Params&#xff09;&#xff1a;&#xff08;2&#xff09;计算量&#xff08;FLOPS&#xff09;:&#xff08…