如何使用mdict4j

安装

构建系统使用gradle的时候,可以从mavenCentral安装mdict4j。

dependencies {
    implementation 'tokyo.northside:mdict4j:0.4.0'
}

我们从0.4.0版本变更了groupId。如果您想要使用旧版本,请使用group id’io.github.eb4j’

正在载入字典档案

您应该载入字典并建立MdictDictionary物件,才能呼叫搜寻查询。

Path dictionaryPath = Paths.get("foo.mdx");
MDictDictionary dictionary = MDictDictionary.loadDictionary(dictionaryPath);

MDictDictionary物件有几种方法来指示mdx档案属性。

if (dictionary.isMDX()) {
    System.out.println("loaded file is .mdx");
}
if (StandardCharsets.UTF_8.equals(dictionary.getEncoding())) {
    System.out.println("MDX file encoding is UTF-8");
}
if (dictionary.isHeaderEncrypted()) {
    System.out.println("MDX file is encrypted.");
}
if (dictionary.isIndexEncrypted()) {
    System.out.println("MDX index part is encrypted.");
}
System.out.printf("MDX version: %d, format: %s", dictionary.getMdxVersion(), dictionary.getFormat());
System.out.println(dictionary.getCreationDate());
System.out.println(dictionary.getTitle());
System.out.println(dictionary.getDescription());

You can invoke query from MDictDictionary object. MDictDictionary::readArticles method returns a list of entries. MDictDictionary::readArticles method returns exact match results. MDictDictionary::readArticlesPredictive method returns predictive search match results.

for (Map.Entry<String, String> entry: dictionary.readArticles("hello")) {
    System.out.println("<div><span>%s</span>: %s</div>", entry.getKey(), entry.getValue());
}

You will see something like hello: 你好

for (Map.Entry<String, String> entry: dictionary.readArticlesPredictive("happ")) {
    System.out.println("<div><span>%s</span>: %s</div>", entry.getKey(), entry.getValue());
}

You will see something like happy: 快乐  happiness: 幸福

当您想要载入MDD资料档案时,可以将它交给MDictDictionary##loadDictionaryData方法。

Path dataPath = Paths.get("foo.mdx");
MDictDictionary dictData = MDictDictionary.loadDictionaryData(dataPath);
if (!dictData.isMDX()) {
    System.out.println("loaded file is .mdd");
}
Map.Entry<String, Object> entry = dictData.getEntries("/audio/test.mp3").get(0);
Object value = entry.getValue();
byte[] buf = dictData.getData((Long) value);  // buf contains mp3 data.
Tika tika = new Tika();
String mediaType = tika.detect(buf);
System.out.println("Media type should be audio/mpeg: %s", mediaType);

Please check javadoc for details.

./gradlew javadoc