jp_text_parsing/create-notes.py

130 lines
5.3 KiB
Python
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import json
import MeCab
import re
import requests
import os
from pathlib import Path
import shutil
request_url = "http://127.0.0.1:19633"
request_timeout = 10
destination_directory_name = '/run/media/deck/YF8SD/Sync/Notebooks/Obsidian/Japanese/Yu-Gi-Oh/Cards/'
destination_path = Path(destination_directory_name)
# Generate Hiragana and Katakana characters
hiragana = tuple(chr(i) for i in range(12353, 12436)) # \u3041 - \u3094
katakana = tuple(chr(i) for i in range(12450, 12532)) # \u30A2 - \u30F4
punctuation = tuple(chr(i) for i in range(65281, 65382))
# Combine both into one tuple
all_kana = hiragana + katakana + punctuation + (' ', '', '')
KANJI_RE = re.compile(r"[\u4E00-\u9FFF]")
def katakana_to_hiragana(text: str) -> str:
return "".join(
chr(ord(ch) - 0x60) if 0x30A1 <= ord(ch) <= 0x30F6 else ch
for ch in text
)
# def get_node_reading(node) -> str:
# features = node.feature.split(",")
# print()
# if len(features) >= 8 and features[7] != "*":
# return katakana_to_hiragana(features[7])
# return node.surface
def has_kanji(text: str) -> bool:
return bool(KANJI_RE.search(text))
def anki_fields_term(term : str) -> dict:
params = {
"text": term,
"type": "term",
"markers": ["audio", "cloze-body-kana", "conjugation", "expression", "furigana", "furigana-plain", "glossary", "glossary-brief", "glossary-no-dictionary", "glossary-first", "glossary-first-brief", "glossary-first-no-dictionary", "part-of-speech", "phonetic-transcriptions", "pitch-accents", "pitch-accent-graphs", "pitch-accent-graphs-jj", "pitch-accent-positions", "pitch-accent-categories", "reading", "tags", "clipboard-image", "clipboard-text", "cloze-body", "cloze-prefix", "cloze-suffix", "dictionary", "dictionary-alias", "document-title", "frequencies", "frequency-harmonic-rank", "frequency-harmonic-occurrence", "frequency-average-rank", "frequency-average-occurrence", "screenshot", "search-query", "popup-selection-text", "sentence", "sentence-furigana", "sentence-furigana-plain", "url"],
"maxEntries": 1,
"includeMedia": False,
}
response = requests.post(request_url + "/ankiFields", json = params, timeout = request_timeout)
return json.loads(response.text)
def term_entries(term :str) -> dict:
#print("Requesting termEntries:")
params = {
"term": term,
"maxEntries": 1,
"includeMedia": False,
}
response = requests.post(request_url + "/termEntries", json = params, timeout = request_timeout)
return json.loads(response.text)
def get_glossary(word :str) -> list:
glossary = list()
dict_items = term_entries(word)
entry = next(iter(dict_items.get("dictionaryEntries",[])),None)
if entry:
definition = next(iter(entry.get("definitions",[])),None)
if definition:
def_entry = next(iter(definition.get("entries", [])),None)
if def_entry:
glossary.extend( list(extract_text_by_type(def_entry, "glossary")) )
return glossary[:2]
#print(annotate_phrase("私は学校へ行きます"))
## Make sure directories exist
if not destination_path.exists():
destination_path.mkdir(parents=True, exist_ok=True)
if not destination_path.joinpath('_attachments').exists():
destination_path.joinpath('_attachments').mkdir(parents=True, exist_ok=True)
with open("dump-withFuri.json", "r", encoding="utf-16") as f:
dump = json.load(f)
for cd in dump:
print(dump[cd]['name_J'])
if Path('YGO_2020/2020.full.illust_j.jpg.zib/' + cd + '.jpg').exists():
##TODO: Ew
if Path(destination_path.joinpath('_attachments/' + cd + '.jpg')).exists() == False:
shutil.copy2(Path('YGO_2020/2020.full.illust_j.jpg.zib/' + cd + '.jpg'), destination_path.joinpath('_attachments'))
with open(destination_path.as_posix() + '/' + cd + '.md', 'w') as card_note:
card_note.write("---\n")
card_note.write(f"aliases: [{dump[cd]['name_J']},{dump[cd]['name_E']}]\n")
card_note.write("---\n")
## Name at the top
card_note.write(f"![[{cd}.jpg]]")
card_note.write("\n##### Name\n")
card_note.write("<details><summary>")
card_note.write(dump[cd]['name_J'])
card_note.write("</summary>")
card_note.write(dump[cd]['name_E'])
card_note.write("</details>")
## the description
card_note.write("\n##### Details\n")
card_note.write("<details><summary>")
card_note.write(dump[cd]['desc_J'])
card_note.write("</summary>")
card_note.write(dump[cd]['desc_E'])
card_note.write("</details>")
# desc_Furi
card_note.write("\n##### Reading\n")
if(dump[cd].get("furi")):
card_note.write(f"{dump[cd]['furi']}\n")
else:
card_note.write(dump[cd]['name_J'])
card_note.write("\n")
if(dump[cd].get("desc_Furi")):
card_note.write(f"{dump[cd]['desc_Furi']}\n")
else:
card_note.write(dump[cd]['desc_J'])
card_note.write("\n")
card_note.write("\n##### Glossary\n")
for vocab in dump[cd]["glossary_Desc_J"]:
print(f"{vocab} : {dump[cd]["glossary_Desc_J"][vocab]}", file=card_note)
#print('>' + dump[cd]["glossary_Desc_J"][vocab], file=card_note)