Skip to content

Convert KANJIDIC2's format from XML to JSON

License

Notifications You must be signed in to change notification settings

xoltia/kanjidic2-xml2json

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

17 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

kanjidic2-xml2json

Convert KANJIDIC2's format from XML to JSON

Installing dependencies

pip install -r requirements.txt

Basically, there are only two dependencies: beautifulsoup4 and lxml, so if you'd rather install them using your package manager, then go for it.

Usage

python convert.py <input_filename> [output_filename] [property_name_policy]

If output_filename is not given, the program will set it to kanjidic2.json.

property_name_policy can be either camel or pascal. If unset or set to an unknown string then the property names will be in snake_case to remain consistent with the XML names.

JSON Structure

The resulting output will parse to match the following type.

The property names here and in the example assume you are using the 'camel' name policy

Array<{
    literal: string,
    onyomi?: string[],
    kunyomi?: string[],
    nanori?: string[],
    jlpt?: number,
    gradeLevel?: number
}>

Example output

The actual output is not formatted.

[
  {
    "literal": "",
    "onyomi": [
      ""
    ],
    "kunyomi": [
      "つ.ぐ"
    ],
    "nanori": [
      "",
      "つぎ",
      "つぐ"
    ],
    "meanings": [
      "Asia",
      "rank next",
      "come after",
      "-ous"
    ],
    "jlpt": 1,
    "gradeLevel": 8
  }
]

This corresponds to (formatted) KANJIDIC2's:

<?xml version="1.0" encoding="UTF-8"?>
<kanjidic2>
  <character>
    <literal>亜</literal>
    <codepoint>
      <cp_value cp_type="ucs">4e9c</cp_value>
      <cp_value cp_type="jis208">16-01</cp_value>
    </codepoint>
    <radical>
      <rad_value rad_type="classical">7</rad_value>
      <rad_value rad_type="nelson_c">1</rad_value>
    </radical>
    <misc>
      <grade>8</grade>
      <stroke_count>7</stroke_count>
      <variant var_type="jis208">48-19</variant>
      <freq>1509</freq>
      <jlpt>1</jlpt>
    </misc>
    <dic_number>
      <dic_ref dr_type="nelson_c">43</dic_ref>
      <dic_ref dr_type="nelson_n">81</dic_ref>
      <dic_ref dr_type="halpern_njecd">3540</dic_ref>
      <dic_ref dr_type="halpern_kkd">4354</dic_ref>
      <dic_ref dr_type="halpern_kkld">2204</dic_ref>
      <dic_ref dr_type="halpern_kkld_2ed">2966</dic_ref>
      <dic_ref dr_type="heisig">1809</dic_ref>
      <dic_ref dr_type="heisig6">1950</dic_ref>
      <dic_ref dr_type="gakken">1331</dic_ref>
      <dic_ref dr_type="oneill_names">525</dic_ref>
      <dic_ref dr_type="oneill_kk">1788</dic_ref>
      <dic_ref dr_type="moro" m_vol="1" m_page="0525">272</dic_ref>
      <dic_ref dr_type="henshall">997</dic_ref>
      <dic_ref dr_type="sh_kk">1616</dic_ref>
      <dic_ref dr_type="sh_kk2">1724</dic_ref>
      <dic_ref dr_type="jf_cards">1032</dic_ref>
      <dic_ref dr_type="tutt_cards">1092</dic_ref>
      <dic_ref dr_type="kanji_in_context">1818</dic_ref>
      <dic_ref dr_type="kodansha_compact">35</dic_ref>
      <dic_ref dr_type="maniette">1827</dic_ref>
    </dic_number>
    <query_code>
      <q_code qc_type="skip">4-7-1</q_code>
      <q_code qc_type="sh_desc">0a7.14</q_code>
      <q_code qc_type="four_corner">1010.6</q_code>
      <q_code qc_type="deroo">3273</q_code>
    </query_code>
    <reading_meaning>
      <rmgroup>
        <reading r_type="pinyin">ya4</reading>
        <reading r_type="korean_r">a</reading>
        <reading r_type="korean_h">아</reading>
        <reading r_type="vietnam">A</reading>
        <reading r_type="vietnam">Á</reading>
        <reading r_type="ja_on">ア</reading>
        <reading r_type="ja_kun">つ.ぐ</reading>
        <meaning>Asia</meaning>
        <meaning>rank next</meaning>
        <meaning>come after</meaning>
        <meaning>-ous</meaning>
        <meaning m_lang="fr">Asie</meaning>
        <meaning m_lang="fr">suivant</meaning>
        <meaning m_lang="fr">sub-</meaning>
        <meaning m_lang="fr">sous-</meaning>
        <meaning m_lang="es">pref. para indicar</meaning>
        <meaning m_lang="es">venir después de</meaning>
        <meaning m_lang="es">Asia</meaning>
        <meaning m_lang="pt">Ásia</meaning>
        <meaning m_lang="pt">próxima</meaning>
        <meaning m_lang="pt">o que vem depois</meaning>
        <meaning m_lang="pt">-ous</meaning>
      </rmgroup>
      <nanori>や</nanori>
      <nanori>つぎ</nanori>
      <nanori>つぐ</nanori>
    </reading_meaning>
  </character>
</kanjidic2>

Of course, the dictionary is much bigger than that, but this is just a tiny snippet from the whole.

About

Convert KANJIDIC2's format from XML to JSON

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Python 100.0%