aardio 调用 python pickle load 数据

aardio 调用 python pickle load 词典数据

dump_pickle.py

import os
import sys
import time
import pickle
from readmdict import MDX, MDD

os.chdir("/mdict")

mdxfile = "your.mdx"
if not os.path.exists(mdxfile):
    print("{mdxfile} not found!")
    sys.exit(1)

start_time = time.time()
mdx = MDX(mdxfile)
headwords = [*mdx]
print('headwords:', len(headwords))

with open("your_wordls.pik", 'wb') as f:
    pickle.dump(headwords,f)
end_time = time.time()
print('cost %f second' % (end_time - start_time))

运行 dump_pickle.py  生成文件 your_wordls.pik 放在 res/

load_pickle.py 放在 res/

import json
import pickle

def load_pickle():
    with open("res/your_wordls.pik", 'rb') as f:
        headwords = pickle.load(f)
    alist = []
    for hw in headwords:
        hws = hw.decode()
        alist.append(hws)
    return json.dumps(alist)

main.aardio 见下面

import win.ui;
/*DSG{{*/
mainForm = win.form(text="aardio2";right=889;bottom=467)
mainForm.add(
button={cls="button";text="go";left=335;top=22;right=399;bottom=41;z=2};
button2={cls="button";text="prefix";left=426;top=21;right=497;bottom=40;z=4};
button3={cls="button";text="sound";left=533;top=19;right=592;bottom=39;z=5};
button4={cls="button";text="TTS读音";left=621;top=17;right=681;bottom=39;z=7};
custom={cls="custom";text="WebView2";left=165;top=55;right=889;bottom=469;z=3};
edit={cls="edit";left=17;top=19;right=317;bottom=43;edge=1;z=1};
listbox={cls="listbox";left=7;top=56;right=161;bottom=463;edge=1;items={};vscroll=1;z=6}
)
/*}}*/

import web.view;
var wb = web.view(mainForm.custom);

import web.json;
import console;

import io;
import sys;
import fsys.media;
import py3;
//导入 Python 模块
//var pickle = py3.import("pickle");
var pycode = string.load("\res\load_pickle.py");
py3.exec(pycode);
var pyobj = py3.main.load_pickle();
var alist = web.json.parse(tostring(pyobj));
//console.log(type(alist));

var basepath = "D:\mdict\data";
//导出本地函数给网页 JavaScript
wb.external = {
  mplay = function(url){
	if (string.startWith(url, "sound://")){
		if (string.endWith(txt, ".mp3")){
			var str = string.slice(txt,8,-1,true);
			var path = basepath + string.replace(str,"/","\");
			if(! io.exist(path)){
				mainForm.msgbox(path+" not found.");
				return;
			}
			mediaFile = fsys.media(path);
			if(mediaFile){ mediaFile.play();}
		}
	}		
  }
}

var js = /**
  window.onload = function(){
    document.body.addEventListener('click', function(event){
        var target = event.target || event.srcElement;      // 兼容处理
        if (target.nodeName.toLocaleLowerCase() === "a") {  // 判断是否匹配目标元素
            if (event.preventDefault) {     // 对捕获到的 a 标签进行处理
                event.preventDefault();
                var addr = target.getAttribute('href');
                if (addr.indexOf('sound://')==0){
                    alert(addr);
                } else {
                    alert('href='+addr);
                }
            }
        }       
    });
  }
**/

var baseurl = "http://localhost:8888/";
//响应按钮事件
mainForm.button.oncommand = function(id,event){
	var txt = mainForm.edit.text ;
	var str = string.trim(txt);
	if (string.startWith(str, "http://") or string.startWith(str, "https://")){
		wb.go(str);
	} else {
		url = baseurl + "trans?txt=" + str;
		wb.go(url);
		//wb.doScript(js);
	}
}

// prefix 前缀匹配
mainForm.button2.oncommand = function(id,event){
	mainForm.button2.disabled = true;
	var txt = mainForm.edit.text;
	var str = string.lower(string.trim(txt));
	if (string.startWith(str, "http://") or string.startWith(str, "https://")){
		wb.go(str);
	} else {
		mainForm.listbox.clear();
		//遍历 table array 对象成员
		for( k,v in alist){
			word = string.lower(v);
			if (string.startWith(word, str)){
				//console.log(v);
				mainForm.listbox.add(v);
			}
		}
		mainForm.listbox.selIndex = 1;
	}
	mainForm.button2.disabled = false;
}

// 播放本地 .mp3
mainForm.button3.oncommand = function(id,event){
	mainForm.button3.disabled = true;
	var txt = mainForm.edit.text ;
	if (string.startWith(txt, "sound://")){
		if (string.endWith(txt, ".mp3")){
			var str = string.slice(txt,8,-1,true);
			var path = basepath + string.replace(str,"/","\");
			if(! io.exist(path)){
				mainForm.msgbox(path+" not found.");
				return;
			}
			mediaFile = fsys.media(path);
			if (mediaFile) {
				mediaFile.play();
			}
		}
	}
	mainForm.button3.disabled = false;		
}

import com.sapi.voice; //导入语音组件
var voice = com.sapi.voice(); //创建语音对象
// TTS 读单词
mainForm.button4.oncommand = function(id,event){
	mainForm.button4.disabled = true;
	voice.speakAsync(mainForm.edit.text,1);//异步非阻塞朗读
	voice.waitOne(); //等待朗读结束
	mainForm.button4.disabled = false;	
}

mainForm.listbox.oncommand = function(id,event){
	if( event == 0x1/*_LBN_SELCHANGE*/ ){
		str = mainForm.listbox.selText;
		url = baseurl + "trans?txt=" + str;
		wb.go(url);
	}
}

//响应回车键弹起的消息
mainForm.edit.wndproc = function(hwnd,message,wParam,lParam){
    if(message == 0x101/*_WM_KEYUP*/ && wParam == 0xD/*_VK_ENTER*/){
	  var url = mainForm.edit.text ;
	  if (string.startWith(url, "http://") or string.startWith(url, "https://")){
		wb.go(url);
	  } else {
		url = baseurl + "trans?txt=" + string.trim(url)
		wb.go(url);
		//wb.doScript(js);
	  }
    }
    //无返回值则继续调用默认回调函数
}

mainForm.show();
return win.loopMessage();

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/70384.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

2023年大数据与计算国际会议 (WBDC 2023)| EI、Scoups检索

会议简介 Brief Introduction 2023年大数据与计算国际会议(WBDC 2023) 会议时间:2023年11月17 -19日 召开地点:中国西安 大会官网:www.iwbdc.org 2023年大数据与计算国际会议(WBDC 2023)将围绕“…

docker下载和案例

文章目录 Docker安装一,根据官方文档安装二,根据我以下方式 Docker配置错误导致漏洞一,CRLF注入漏洞介绍在nginx中该漏洞例子解决方法 目录穿越漏洞介绍解决方法 Docker安装 一,根据官方文档安装 官方文档 二,根据我以下方式 docker安装要求: Docker要求Ce…

VTK学习笔记(二十一)

显示立方体已经做过了&#xff0c;现在想简单处理一下立方体&#xff0c;比如每个面上增加一些文字。效果如下。 #include <vtkAnnotatedCubeActor.h> #include <vtkCamera.h> #include <vtkNamedColors.h> #include <vtkNew.h> #include <vtkPrope…

SQL 数据科学:了解和利用联接

推荐&#xff1a;使用 NSDT场景编辑器助你快速搭建可编辑的3D应用场景 什么是 SQL 中的连接&#xff1f; SQL 联接允许您基于公共列合并来自多个数据库表的数据。这样&#xff0c;您就可以将信息合并在一起&#xff0c;并在相关数据集之间创建有意义的连接。 SQL 中的连接类型…

积木报表集成前端加载js文件404

项目场景&#xff1a; 在集成积木报表和shiro时候&#xff1a; 集成积木报表&#xff0c;shrio&#xff0c;shrio是定义在另一个模块下的&#xff0c;供另一个启动类使用&#xff0c;积木报表集成shrio的时候&#xff0c;需要依赖存放shrio的核心包&#xff0c;该核心包除了存…

Eleastisearch5.2.2利用镜像迁移构建实例后ES非健康状态

正常迁移完成后启动服务&#xff0c;查看ES非健康状态 此时观察ES集群状态&#xff1a;curl -XGET -u elastic:xxx localhost:9200/_cluster/health?pretty 注意到"active_shards_percent_as_number" : 88.8888 该项的值不产生变化;集群状态"status" : “…

常见的数据结构(顺序表、顺序表、链表、栈、队列、二叉树)

线性表&#xff08;Linear List&#xff09;  1.什么是线性表 2.线性表的特点 3.线性表的基本运算 顺序表 1.什么是顺序表 2.时间复杂度&#xff1a; 链表 1.什么是链表 2.单向链表 3. 双向链表 4.ArrayList和LinkedList的使用 栈Stack  1.什么是栈  2.栈的基本方法 队列…

【果树农药喷洒机器人】Part2:机器人变量喷药系统硬件选型

&#x1f4e2;&#xff1a;如果你也对机器人、人工智能感兴趣&#xff0c;看来我们志同道合✨ &#x1f4e2;&#xff1a;不妨浏览一下我的博客主页【https://blog.csdn.net/weixin_51244852】 &#x1f4e2;&#xff1a;文章若有幸对你有帮助&#xff0c;可点赞 &#x1f44d;…

【ChatGPT 指令大全】怎么使用ChatGPT辅助程式开发

目录 写程式 解读程式码 重构程式码 解 bug 写测试 写 Regex 总结 在当今快节奏的数字化世界中&#xff0c;程式开发变得越来越重要和普遍。无论是开发应用程序、网站还是其他软件&#xff0c;程式开发的需求都在不断增长。然而&#xff0c;有时候我们可能会遇到各种问题…

C语言数据类型

C语言具有多种数据类型&#xff0c;用于存储不同类型的数据。大体可以分为基本数据类型和派生数据类型两大类。 一、基本数据类型 整型&#xff08;Integer&#xff09;&#xff1a; 用于表示整数值&#xff0c;包括int、short、long和long long等类型&#xff0c;可以有不同…

AI:03-基于深度神经网络的低空无人机目标检测图像识别的研究

文章目录 数据集收集与预处理深度神经网络模型设计模型训练与优化目标检测与图像识别代码实现:实验结果与分析讨论与展望低空无人机的广泛应用为许多领域带来了巨大的潜力和机会。为了实现无人机的自主导航和任务执行,准确的目标检测和图像识别是至关重要的。本文旨在研究并提…

软件外包开发的VUE开发框架

Vue.js&#xff08;通常简称为Vue&#xff09;是一个流行的渐进式JavaScript框架&#xff0c;用于构建用户界面。它的核心库专注于视图层&#xff0c;但也可以结合其他库和工具来构建完整的单页面应用&#xff08;SPA&#xff09;。以下分享Vue.js的开发框架和特点&#xff0c;…

剑指offer-1.1C++

sizeof空类问题 问&#xff1a;定义一个空的类型&#xff0c;里面没有任何成员变量和成员函数。对该类型求sizeof&#xff0c;得到的结果是多少&#xff1f; 答&#xff1a;1 问&#xff1a;为什么不是0&#xff1f; 答&#xff1a;空类型的实例中不包含任何信息&#xff0…

小说推文怎么做详细教程。小说推文项目拆解及分享

科思创业汇 大家好&#xff0c;这里是科思创业汇&#xff0c;一个轻资产创业孵化平台。赚钱的方式有很多种&#xff0c;我希望在科思创业汇能够给你带来最快乐的那一种&#xff01; 如何制作小说推文的详细教程&#xff01; 我做自媒体已经五年了&#xff0c;在自媒体行业也…

STM32CubeMX之freeRTOS消息队列

创建一个消息队列&#xff0c;两个发送任务&#xff0c;一个接受任务 发送任务一&#xff1a;等待时间为0 发送任务二&#xff1a;等待时间为最大 接受为0 简单来说就是&#xff1a; 任务一&#xff1a;一个普写 一个死写 一个普读 任务二&#xff1a;创造队列 一个普写 …

什么是React?React与VU的优缺点有哪些?

什么是React&#xff1f;什么是VUE&#xff1f; 维基百科上的概念解释&#xff0c;Vue.js是一个用于创建用户界面的开源MVVM前端JavaScript框架&#xff0c;也是一个创建单页应用的Web应用框架。Vue.js由尤雨溪&#xff08;Evan You&#xff09;创建&#xff0c;由他和其他活跃…

Scractch3.0_Arduino_ESP32_学习随记_IO中断(六)

IO中断 目的器材程序联系我们 目的 ESP32 IO中断的使用。 中断&#xff1a; 当IO中断事件发生时&#xff0c;MCU将优先执行中断的程序。 打个比方&#xff1a; 你正在读一本书&#xff0c;突然手机收到一条紧急消息。你不想错过这个重要的消息&#xff0c;所以你立即停下手中的…

MySQL高阶知识点

MySQL 文章目录 MySQLchar和varchar的区别视图视图的特点 存储过程存储过程的特点 触发器触发器的特点 MySQL引擎索引为什么要有索引呢&#xff1f;什么是索引索引的优势索引的劣势索引类型索引种类组合索引最左前缀原则索引创建原则B树和B树的区别数据库为什么使用B树而不是B树…

伪类和伪元素有何区别?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 伪类&#xff08;Pseudo-class&#xff09;⭐ 伪元素&#xff08;Pseudo-element&#xff09;⭐ 区别总结⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前…

原始套接字编程(AF_PACKET+SOCK_RAW)模拟一个PING

1. 背景 最近看一个客户的代码片段&#xff0c;发现他在用原始套接字编程&#xff0c;一般学习套接字都是流式套接字和数据报套接字&#xff0c;本来也不是搞网络的&#xff0c;原始套接字了解得很少&#xff0c;借着这次机会&#xff0c;自己来学习一下原始套接字编程。 2. …