yu7777/mdx_dictionaries_support_FastWordQuery

牛津高阶双解(第9版)_V3.0版无法提取例句音频文件

Closed this issue · 23 comments

大神,我用的牛津高阶双解(第9版)_V3.0版,可以提取例句到中英文例句文本,但是提取不是音频文件。
是不是一定要3.0.1这个版本?
多谢!

晚些我把我改的仓库上传一下,你看着试试

你把我写的这个文件下载下来粘贴到你那个插件的对应的文件夹里,看看能不能用。

顺便,我用的是“牛津高阶英汉双解词典(第10版)V3”,估计和你的词典的作者是一个(hanly05),我是从他tg上下载的。

https://github.com/escape0707/1807206748/blob/OALD10/service/dict/OALD10.py

这个仓库的作者写的脚本是硬编码了词典文件路径。我没有,我是按照朗文脚本改的。插件本身有个本地词典存储目录,会扫面一遍里面有的词典。我就用的那个目录里的扫出来的文件。

另外我写的脚本改了注册的词库名字,你可以看一下你使用的时候选没选对:

@register(["MDX-OALD10", "MDX-OALD10"])

lookup.html只是我想要调试的时候才导出的,可以用来看根据单词读取出来的html的完整内容的而已。如果你查词的时候没有选择raw_html域的话是不会导出这个文件的。

我这个脚本只是按照我的使用习惯简单改了改,我需要查询牛津的发音,特别是美音,以及每项解释。所以我目前只检查了这两个部分好不好用。我发现这个插件本身有很多老旧的代码,暂时我也没时间深挖重写。所以先自己用着而已。

例句是因为我觉得用词典上的例句背单词印象很不深刻,我都是在哪儿遇到这个生词就把句子抄下来背那个句子,所以没有弄。不过也不是很难。

写这些提取脚本麻烦就麻烦在词典作者打包mdx的时候可能没有给内容很好得上上对应的标签。所以有的内容检索起来很费劲。mdx本身也不是个开放的词典格式,所以我以后可能也不想在mdx上多费功夫。也许cn社区应该把资源投到stardict之类的格式上也说不定。

你要是想要动手继续完善这个插件本身的话也可以自己读一读源码,我可以稍稍给点自己的理解方便你入手。

首先,牛9不是我写的Orz,是这个仓库的拥有者yu7777写的,如果我没记错的话我的fork没有改这个文件。我只简单写了个牛10的。

其次,Anki插件的Debug详见Anki插件开发文档

同一篇文档里你也可以找到你第二个问题的解释,Anki只自带了一些基本的模组,欠缺的模组需要自己拷贝到你的插件的文件夹里。你可以参考这篇Reddit。关于你具体要把你想加入的模组放到什么目录,参考Python官方教程的这一节这一节

另外,如果有条件,把改过的文件放到github上让后人也可以直接看到比较好。

按照你这个情况来说就是_burglary__gbs_1.mp3是文件名字,然后你就在前面加个/就可以传给save_file方法的第一个参数了。
我建议你不要回复邮件。格式看着很乱。你到GitHub来用Markdown排排版再发比较好。

我又测试了一下。

_def back_fld_audio(self, audio):
showInfo(audio)
name = get_hex_name('mdx-'+self.unique.lower(), audio, 'mp3')
showInfo(name)
name = self.save_file(audio, name)

Debug得到的运行值:
audio = /_burglary__gbs_1.mp3
name = mdx-oalecd9_mdx-fd113408-7af1a366-2e07b6c2-fa6469b5-4733b2b2.mp3

但是执行 name = self.save_file(audio, name) 后,并没有成功。

我也很好奇,我觉得你可以用这个插件囊括的readmdict脚本查一下你的mdd里的文件到底是释放到什么路径。我这个反正是根目录。

from readmdict import MDX, MDD
from pathlib import Path

dict_dir = Path(r"C:\Users\tothe\my-programs\Dicts\OALD10")
mdd = MDD(dict_dir / "牛津高阶英汉双解词典(第10版)V3.mdd")
item = mdd.items()

next(item)

# (b'\\20p__us_1.mp3', ...)

image

不好意思,我比较初级,对lib的引用这些完全不懂,只知道pip install。我加了一个test.py文件。但是运行有问题。

image

啊,你这个情况下不用加.直接导入就可以。直接导入的话就是自动检索当前文件夹下有没有叫这个名字的py文件(module)或者叫这个名字的文件夹(文件夹里有个__init__.py就成了package)。

加了点就成这个了:https://docs.python.org/3/tutorial/modules.html#intra-package-references

现在的问题是:“LZO compression support is not available”
image

我直接用这个脚本解压了mdd:
python3 readmdict.py -x /Users/lbd/Documents/MDICT/牛津高阶双解第9版_V3.0版/牛津高阶双解第9版_V3.0版.mdd

例句音频文件就在data根目录下。和第10版是一样的。
image

但是执行 name = self.save_file(audio, name) 后,并没有成功。

出错日志、呼叫堆叠呢?

换句话说,使足力气描述一下“并没有成功”。

解决了!按照你的提示,一步步跟踪到mdict_query.py。再往下是查询数据库指令了。突然醒悟过来,到这一步已经是标准的库了,其它的查询都会用到,不太可能有问题。问题应该是出在牛9的MDD上了。
换了牛10的MDD给牛9用。一下就成功了。

ありがとう!

 @staticmethod
    def lookup_indexes(db, keyword, ignorecase=None):

(如果没有问题了可以关掉issue,祝学习顺利~

解决方案总结:
以“牛津高阶英汉双解词典(第10版)V3.mdd”改名替换“牛津高阶双解第9版_V3.0版.mdd”