From b62f6c2fa4c5580922b34d2f6324bc6d59927e14 Mon Sep 17 00:00:00 2001 From: yyc12345 Date: Sun, 2 Jul 2023 17:35:03 +0800 Subject: [PATCH] add python --- .gitignore | 1 + NlpProc/NlpTrBaseCompiler.py | 2 ++ NlpProc/NlpTrBaseCreator.py | 26 ++++++++++++++++++++ NlpProc/NlpTrPatchCompiler.py | 0 NlpProc/NlpTrPatchCreator.py | 4 +++ NlpProc/NlpUtils.py | 46 +++++++++++++++++++++++++++++++++++ NlpSrc/README.md | 6 +++++ 7 files changed, 85 insertions(+) create mode 100644 NlpProc/NlpTrBaseCompiler.py create mode 100644 NlpProc/NlpTrBaseCreator.py create mode 100644 NlpProc/NlpTrPatchCompiler.py create mode 100644 NlpProc/NlpTrPatchCreator.py create mode 100644 NlpProc/NlpUtils.py create mode 100644 NlpSrc/README.md diff --git a/.gitignore b/.gitignore index 978968f..14bc2dd 100644 --- a/.gitignore +++ b/.gitignore @@ -3,6 +3,7 @@ out/ temp/ NlpSrc/* !NlpSrc/*.nlp +!NlpSrc/README.md NlpParser/* !NlpParser/Nlp.g4 !NlpParser/NlpRunner.java diff --git a/NlpProc/NlpTrBaseCompiler.py b/NlpProc/NlpTrBaseCompiler.py new file mode 100644 index 0000000..86c0f4a --- /dev/null +++ b/NlpProc/NlpTrBaseCompiler.py @@ -0,0 +1,2 @@ +import NlpUtils +import sys, collections diff --git a/NlpProc/NlpTrBaseCreator.py b/NlpProc/NlpTrBaseCreator.py new file mode 100644 index 0000000..44c0cc6 --- /dev/null +++ b/NlpProc/NlpTrBaseCreator.py @@ -0,0 +1,26 @@ +import NlpUtils +import sys, collections + +def CreateBaseJsonWrapper(baseJson: dict) -> dict[str, str]: + result: dict[str, str] = {} + stack: collections.deque = collections.deque() + CreateBaseJson(baseJson, stack, result) + return result +def CreateBaseJson(baseJson: dict, stack: collections.deque, result: dict[str, str]): + assert isinstance(baseJson, dict) + assert 'entries' in baseJson + + counter = 0 + for entry in baseJson['entries']: + if isinstance(entry, str): + result['.'.join(tuple(stack) + (str(counter), ))] = entry + counter += 1 + else: + stack.append(entry['section']) + CreateBaseJson(entry, stack, result) + stack.pop() + +if __name__ == "__main__": + baseJson = NlpUtils.LoadJsonFromFile(sys.argv[1]) + trJson = CreateBaseJsonWrapper(baseJson) + NlpUtils.WriteJsonToFile(sys.argv[2], trJson) diff --git a/NlpProc/NlpTrPatchCompiler.py b/NlpProc/NlpTrPatchCompiler.py new file mode 100644 index 0000000..e69de29 diff --git a/NlpProc/NlpTrPatchCreator.py b/NlpProc/NlpTrPatchCreator.py new file mode 100644 index 0000000..70f3dc2 --- /dev/null +++ b/NlpProc/NlpTrPatchCreator.py @@ -0,0 +1,4 @@ +import NlpUtils +import sys, collections + + diff --git a/NlpProc/NlpUtils.py b/NlpProc/NlpUtils.py new file mode 100644 index 0000000..5849316 --- /dev/null +++ b/NlpProc/NlpUtils.py @@ -0,0 +1,46 @@ +import jsondiff +import collections +import io +import json + +def WriteJsonToFile(filepath: str, jsonData: dict): + with open(filepath, 'w', encoding='utf-8') as f: + json.dump(jsonData, f, indent=4, sort_keys=False) + +def LoadJsonFromFile(filepath: str) -> dict: + with open(filepath, 'r', encoding='utf-8') as f: + return json.load(f) + +def SaveDiffToFileWrapper(jsonDiffData: dict, filepath: str) -> dict[str, str]: + result: dict[tuple[int], str] = {} + stack: collections.deque = collections.deque() + with open(filepath, 'w', encoding='utf-8') as fdiff: + SaveDiffToFile(jsonDiffData, fdiff, stack, result) + return result + +def SaveDiffToFile(jsonDiffData: dict, fs: io.TextIOWrapper, stack: collections.deque, result: dict[tuple[int], str]): + assert isinstance(jsonDiffData, dict) + assert len(jsonDiffData) == 1 + assert "entries" in jsonDiffData + assert isinstance(jsonDiffData["entries"], dict) + + for key, item in jsonDiffData["entries"].items(): + if isinstance(key, int): + stack.append(key) + SaveDiffToFile(item, fs, stack, result) + stack.pop() + elif key == jsondiff.symbols.insert: + for (modIdx, modEntry) in item: + stridx = ".".join(tuple(stack) + (modIdx, )) + result[stridx] = modEntry + fs.write(f'i {stridx}\n') + elif key == jsondiff.symbols.delete: + for delIdx in item: + stridx = ".".join(tuple(stack) + (delIdx, )) + fs.write(f'd {stridx}\n') + else: + raise Exception("invalid key type") + +def ReadDiffFromFile(translations: tuple[str], filepath: str, result: dict): + pass + diff --git a/NlpSrc/README.md b/NlpSrc/README.md new file mode 100644 index 0000000..0887f92 --- /dev/null +++ b/NlpSrc/README.md @@ -0,0 +1,6 @@ +# Nlp Src + +Useful comparing differences command: + +`diff -u VT25.json VT50.json` +`diff -u VT25.txt VT50.txt`