APP Designer 制作简易英汉词典的回调函数书写

在学习MATLAB 的App Designer 时看到的一个有意思的小项目,主要步骤参考了slandarer 的MATLAB 手把手带你制作第一个APP designer程序(电子词典)。本文主要记录用于获取翻译结果的回调函数的书写思路。

词典实现原理

我们的词典实际上是利用网络资源实现的,即将我们要查找的单词输入至网络词典获取结果,再将结果显示在我们的App中。比如,在这个项目中,我们通过有道词典查询单词,并将需要的查询结果截取下来。我们尝试搜索“paper”的中文含义,不难发现,网页会转向一个带有“paper”的URL链接:

将此部分替换为我们要查找的单词,便可以快速访问对应的翻译页面。按F12可以查看网页源码,我们可以将鼠标放在源码上,对照网页快速定位翻译内容。一般来说,基本的释义在第一个 <div class=“trans-container”> 之后的 <ul> 与 </ul> 之间,并且不同词性的释义会以 <li> 和 </li> 分隔。

回调函数书写

我们需要在按下“查询”按钮之后获取翻译结果,所以这里的回调函数主要指“查询”按钮对应的 ButtonPushed 回调函数。
首先从编辑框获取要查询的英文单词,并得到对应的URL;

search_word = app.EditField.Value;
url = ['https://dict.youdao.com/w/eng/' search_word '/#keyfrom=dict2.index'];

然后通过 webread 函数读取网页源码;

complete_code = webread(url);

通过 regexpi 函数获取匹配内容的索引(可能得到多个索引,我们需要的是第一个);

id = regexpi(complete_code, '<div class="trans-container">');

裁取我们需要的网页源码;

temp_code = complete_code(id(1):end);
trans_start = regexpi(temp_code, '<ul>');
trans_end = regexpi(temp_code, '</ul>');
temp_code = temp_code(trans_start(1)+4:trans_end(1)-1);

经过以上操作,网页源码被裁剪成这样:

      <li>n. 纸;报纸;(工作、学习或个人的)资料,文件(papers);证明,证件(如护照、身份证等)(papers);政府报告,官方政策文件;<英>考试,答卷;(研究)论文,(学术)讲话;<美>(学校课程的)学期论文;墙纸,壁纸;有价证券;手纸,卫生纸;<俚>(剧院等娱乐场所的)免费入场券</li><li>v. 用墙纸裱糊(墙壁);用墙纸覆盖(洞,污点)(paper sth. over);掩盖(尴尬问题)(paper sth. over);<俚>发免费入场券使(剧院)满座</li><li>adj. 纸做的,纸质的;书面的,印刷的;纸上的,有名无实的</li><li>【名】 (Paper)(俄)帕佩尔(人名)</li>

我们只需将 <li> 和 </li> 删去即可得到所需单词释义;

[id_start, id_end] = regexpi(temp_code, '<(\/)?li>');
id = [id_start;id_end];
while ~isempty(id)
temp_code(id(1,end):id(2,end))=[];
id(:,end)=[];
end
search_result = temp_code;

id_start 是 <li> 和 </li> 的起始索引, id_end 是它们的结束索引,起始索引至结束索引之间的内容即为要删去的内容,使用上面代码进行从后往前的删除。
最后将释义显示在App中。

app.TextArea.Value = search_result;

当输入内容搜索不到对应释义,或者输入非英文单词时,显示的结果可能会出现问题。为此,可以在代码中加入判断条件完善功能。
一段可用代码如下所示:

 function ButtonPushed(app, event)search_word = app.EditField.Value;if search_word <= 255url = ['https://dict.youdao.com/w/eng/' search_word '/#keyfrom=dict2.index'];complete_code = webread(url);id = regexpi(complete_code, '<div class="trans-container">');if ~isempty(id)temp_code = complete_code(id(1):end);trans_start = regexpi(temp_code, '<ul>');trans_end = regexpi(temp_code, '</ul>');temp_code = temp_code(trans_start(1)+4:trans_end(1)-1);[id_start, id_end] = regexpi(temp_code, '<(\/)?li>');id = [id_start;id_end];while ~isempty(id)temp_code(id(1,end):id(2,end))=[];id(:,end)=[];endsearch_result = temp_code;app.TextArea.Value = search_result;elseapp.TextArea.Value = strcat(10,'No result.');endelse app.TextArea.Value = strcat(10,'This is NOT a word.');endendend

App效果如下所示:

中译英在源码的识别上与英译中有些区别,这里不做讨论。当输入中文时,将会显示“This is NOT a word.”

APP Designer 制作简易英汉词典的回调函数书写相关推荐

  1. 『牛角书』 开发英汉词典03——调用翻译API,并实现APP功能的实现

    系列文章目录 文章目录 系列文章目录 前言 一.选用翻译API接口 二.编写调用API的代码 1.进行权限申请 2.编写调用翻译API的代码 3.异步调用 4.解析API调用结果 5.测试运行APP ...

  2. [Silverlight]使用MVVM模式打造英汉词典

    最近比较关注MVVM(Model-View_ViewModel)模式,该模式十分适合WPF/Silverlight的开发.出于练习的目的打算使用Silverlight做个英汉词典(可能是由于近来疯狂的 ...

  3. 【小型JavaFx项目】英汉词典

    英汉词典 简介 知识点简介 效果图 源代码 Word.java DictionaryFunction.java DictionaryFrame.java 简介 花了1个多小时帮数媒的同学用以前的项目改 ...

  4. 简单快译通英汉词典设计源码

    快译通英汉词典设计源码 项目需求分析 一.单词查询 给定文本文件"dict.txt",该文件用于存储词库.词库为"英-汉"词典,每个单词和其解释的格式固定,如下 ...

  5. [转]为iPhone4S和iOS5增加全局英汉词典教程

    [转自http://www.app178.com/jiaocheng/iPhone/20120202/17671.html] iOS5自带了翻译软件,但是默认的词典只有英英和日语词典,没有国内最需要的 ...

  6. python:mdict + flask = web 查询英汉词典,汉英词典

    pip install pinyin; pip install snownlp; pip install flask pip install readmdict ; 参见:使用Python调用mdx字 ...

  7. c语言程序报告英汉词典,C语言电子英汉词典程序设计报告-自动化1203-李煜明.docx...

    C语言电子英汉词典程序设计报告-自动化1203-李煜明 课 程 设 计 报 告课程名称 C语言课程设计 课题名称 电子英汉词典 专 业 自动化 班 级 1203 学 号 201201020304 姓 ...

  8. 用App Designer 制作2048小游戏

    用App Designer 制作2048小游戏 用App Designer制作的2048,MATLAB版本是2020b.记录下创作思路,以免日后忘记. APP界面设计 APP界面如下,为了好玩,还加入 ...

  9. 电子英汉词典c语言程序设计报告,英汉电子词典设计报告_设计_C语言_C语言程序设计.doc...

    英汉电子词典设计报告_设计_C语言_C语言程序设计 课程设计 课程名称 :C语言程序课程设计 题目名称 :电子英汉词典 学生学院 :电气信息学院 专业班级 :自动化1101 学 号 :20110102 ...

最新文章

  1. 学习抖音上如何一下删除大型文件,源代码给出!
  2. TypeError: Cannot read property 'gc' of undefined 使用百度地图报错
  3. java gui 选项_【Java-GUI】04 菜单
  4. 12天学好C语言——记录我的C语言学习之路(Day 12)
  5. Linux NTP服务配置 for Oracle RAC
  6. java的equals方法_Java Duration类| 带示例的equals()方法
  7. Adams2019安装教程链接分享
  8. ubuntu nvidia 驱动卸载
  9. android x86 usb检查不到,【android9.0】system/core下的usbhost模块无法输出log到logcat
  10. 2017前端开发手册三-前端职位描述
  11. 2022年R2移动式压力容器充装考试模拟100题及在线模拟考试
  12. 一群不想鸡娃的直男程序员,决定对一支笔下手了
  13. java小程序贪吃蛇代码_微信小程序Demo之贪食蛇
  14. 每日一题:299. 猜数字游戏
  15. Learning Atom 学习Atom编辑器 Lynda课程中文字幕
  16. [答疑]会议申请序列图
  17. 温州地区订婚结婚准备事项
  18. 主要Linux 平台高可用集群软件(High Availability Cluster- HA)简介
  19. 怎么下载优酷,土豆、乐视网上视频,4种快速方法
  20. 计算机科班出身的优势?

热门文章

  1. PHP程序设计读书笔记七
  2. Python Parser的用法
  3. Arduino与Proteus仿真实例-TFT显示屏(ILI9341驱动器)SPI驱动仿真
  4. python汇率兑换双向_汇率兑换—python第一课
  5. FFmpeg分离(解封装)视频和音频
  6. 蚂蚁笔记(Leanote) ubuntu安装教程
  7. 解决虚拟机ubuntu20.04不能连外网问题
  8. 有没有国产能匹配MSP430单片机的啊
  9. 编写一个学生和教师数据的输入和显示程序,学生数据有编号、姓名、班号和成绩,教师数据有编号、姓名、职称和部门
  10. 虚幻四蓝图实战(下车减速人物加速蓝图接口通信)