aardio 调用 python pickle load 数据

文章介绍了如何使用Python的pickle库将MDX词典数据转换为pickle文件,并在Aardio应用程序中加载和处理这些数据,同时展示了与Web界面的交互,包括TTS语音功能和URL导航。

aardio 调用 python pickle load 词典数据;

pip install readmdict 

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="mp3play";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.dlg;
import fsys.media;
import py3;
//导入 Python 模块
//var pickle = py3.import("pickle");
//var pycode = string.load("\res\load_pickle.py");
py3.exec("/res/load_pickle.py");
var pyobj = py3.main.load_pickle();
var alist = web.json.parse(tostring(pyobj));
//console.log(type(alist));

var basepath = "D:\mdict\data";

import com.sapi.voice; //导入语音组件
var voice = com.sapi.voice(); //创建语音对象
//导出本地函数给网页 JavaScript
wb.external = {
  speak = function(txt){
	if (string.len(txt) >0) {
		voice.speakAsync(txt,1);//异步非阻塞朗读
		voice.waitOne(); //等待朗读结束
	}		
  }
}

var js = $"~/res/script.js";
//console.print(js);

var baseurl = "http://localhost:8888/";
//响应按钮事件
mainForm.button.oncommand = function(id,event){
	mainForm.button.disabled = true;
	var txt = mainForm.edit.text ;
	var str = string.trim(txt);
	if (string.startWith(str, "http://") or string.startWith(str, "https://")){
		wb.go(str);
	} elseif(string.startWith(str, "D:") or string.endWith(str,".htm")){
		if (io.exist(str)){
			wb.go(str);
		} else {
			mainForm.msgbox(str+" not found.");
		}
	} else {
		url = baseurl + "trans?txt=" + str;
		wb.go(url);
		wb.doScript(js);
	}
	mainForm.button.disabled = false;
}

// 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);
			}
		}
		if (mainForm.listbox.count ==0){
			mainForm.listbox.add("null");			
		}
		mainForm.listbox.selIndex = 1;
	}
	mainForm.button2.disabled = false;
}

// 播放本地 .mp3
mainForm.button3.oncommand = function(id,event){
	mainForm.button3.disabled = true;
	if (io.exist(path)){
		mainForm.edit.text = path;
		if (string.endWith(path, ".mp3")){
        	mp3 = fsys.media(path);
        	if (mp3) mp3.play();
		}
	}
	mainForm.button3.disabled = false;		
}

// TTS 读单词
mainForm.button4.oncommand = function(id,event){
	mainForm.button4.disabled = true;
	var str = mainForm.edit.text;
	if (string.startWith(str, "C:") or string.startWith(str, "D:")){
		if (mp3) mp3.stop();
	} else {	
		voice.speakAsync(str,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 txt = mainForm.edit.text ;
	var str = string.trim(txt);
	if (string.startWith(str, "http://") or string.startWith(str,"https://")){
		wb.go(str);
	} elseif (string.startWith(str,"D:\") or string.endWith(str,".htm")){
		if (io.exist(str)){
			wb.go(str);
		} else {
			mainForm.msgbox(str+" not found.");
		}
	} else {
		url = baseurl + "trans?txt=" + str;
		wb.go(url);
		//win.delay(1000);
		wb.doScript(js);
	}
  }
  //无返回值则继续调用默认回调函数
}

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

web 服务程序参见:python:mdict + bottle = web 查询英汉词典

目录 res/script.js


    // aardio TTS
    function tts() {
        var txt = document.getElementById('txt').value;
        if (txt.length >1) {
          (async ()=>{
              await aardio.speak(txt);
          })();
        }
    }

    // 屏幕双击取词, aardio TTS
    function tts2() {
        // 获取iframe里的选择内容
        var select = window.frames['iframe'].getSelection();
        var txt = select.toString();
        if (txt.length >1) { // alert(txt);
          var input = document.getElementById('txt');
          input.value = txt.trim();
          (async ()=>{
              await aardio.speak(txt);
          })();      
        } else {
          tts();
        }
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值