dictlab / mdict-cpp

*.mdx/*.mdd file interpreter cpp implementation
51 stars 13 forks source link

是否有mdd格式的解析 #9

Open ANSWER21 opened 1 year ago

ANSWER21 commented 1 year ago

似乎没有找到解析mdd的相关代码

terasum commented 1 year ago

可以解析 mdx/mdd的,因为逻辑是一样的

terasum commented 1 year ago

你可以看一下mdict_extern_test.cc 的代码,编译出来之后,可以使用:

./mydict /Users/yourpath/medict/dicts/oald9/oald9.mdd  \\uk_pron.png

读取mdd内容

ANSWER21 commented 1 year ago

非常感谢 我去尝试下

ANSWER21 commented 1 year ago

你可以看一下mdict_extern_test.cc 的代码,编译出来之后,可以使用:

./mydict /Users/yourpath/medict/dicts/oald9/oald9.mdd  \\uk_pron.png

读取mdd内容

您好,我对c不是很熟悉,我希望使用这个库将mdd得内容读取或者说解压出来,不知道应该如何调用相关方法可以做到

terasum commented 1 year ago

@ANSWER21 你可以使用 javascript 的库 https://github.com/terasum/js-mdict 或者您可以选择使用 golang 的库 https://github.com/terasum/medict/tree/develop/internal/gomdict

这些语言的库的使用难度会低一些

ANSWER21 commented 1 year ago

@ANSWER21 你可以使用 javascript 的库 https://github.com/terasum/js-mdict 或者您可以选择使用 golang 的库 https://github.com/terasum/medict/tree/develop/internal/gomdict

这些语言的库的使用难度会低一些

我是希望引入到安卓中,所以看了c的,我参考下其他的先了解一下逻辑吧,再次感谢回复⭐️

terasum commented 1 year ago

@ANSWER21 如果是希望在安卓中引入的话,可以有两种选择,一个是将本库的代码编译成 so ,通过jni的方式调用,或者是用gomdict的库,也可以将go语言的实现编译成so动态链接库,用jni方式调用,两者类似的。

ANSWER21 commented 1 year ago

@ANSWER21 如果是希望在安卓中引入的话,可以有两种选择,一个是将本库的代码编译成 so ,通过jni的方式调用,或者是用gomdict的库,也可以将go语言的实现编译成so动态链接库,用jni方式调用,两者类似的。

@terasum 我已经参考别人的引用利用jni实现了利用此库在mdx中获取内容,如果我在mdd中搜索内容是否还是调用mdict_extern_test中的main方法,我尝试了但是报错了,除了传递mdd文件我必须准确的知道其中包含的文件名才可以查询到对应文件吗?

terasum commented 1 year ago

你可以通过

simple_key_item** key_list_result = mdict_keylist(dict, &key_list_len);
    std::cout << "key list length: " << key_list_len << std::endl;

    auto key0 = key_list_result[0];
    auto keylen = key_list_result[key_list_len-1];

    std::cout << "key list[0] word: "
              << key0->key_word << ":"
              << key0->record_start
              << std::endl;

    std::cout << "key list[len-1] word: "
              << keylen->key_word << ":"
              << keylen->record_start
              << std::endl;

获取所有词的列表

然后通过这个函数获取词条内容:

 mdict_parse_definition(dict,keylen->key_word, keylen->record_start, result_len_1);

    std::cout << "key list[len-1] def: "
              << (*result_len_1)
              << std::endl;

记得释放内存

terasum commented 1 year ago

@ANSWER21 你可以先获取全部词条的列表,然后遍历该列表,找到你想要的文件,然后再取得所有mdd的内容

ANSWER21 commented 1 year ago

你可以通过

simple_key_item** key_list_result = mdict_keylist(dict, &key_list_len);
    std::cout << "key list length: " << key_list_len << std::endl;

    auto key0 = key_list_result[0];
    auto keylen = key_list_result[key_list_len-1];

    std::cout << "key list[0] word: "
              << key0->key_word << ":"
              << key0->record_start
              << std::endl;

    std::cout << "key list[len-1] word: "
              << keylen->key_word << ":"
              << keylen->record_start
              << std::endl;

获取所有词的列表

然后通过这个函数获取词条内容:

 mdict_parse_definition(dict,keylen->key_word, keylen->record_start, result_len_1);

    std::cout << "key list[len-1] def: "
              << (*result_len_1)
              << std::endl;

记得释放内存

非常感谢你的帮助 我可能还需要再学习学习 非常感谢