From fc03c8c866491934f33af8e8163bd6b5013cc4bc Mon Sep 17 00:00:00 2001 From: Samuel Sloniker Date: Wed, 6 Jul 2022 13:07:37 -0700 Subject: [PATCH] Update project, add model and converter --- .gitignore | 1 + convert_raw_model.py | 53 + convert_text.py | 11 + gptc_scratch.sb3 | Bin 11163 -> 15990 bytes model/compiled/All words.txt | 5235 ++++++ model/compiled/Word scores in Category 1.txt | 5235 ++++++ model/compiled/Word scores in Category 2.txt | 5235 ++++++ model/raw/category_1_words_twain.txt | 15624 +++++++++++++++++ model/raw/category_2_words_shakespeare.txt | 15561 ++++++++++++++++ 9 files changed, 46955 insertions(+) create mode 100644 .gitignore create mode 100644 convert_raw_model.py create mode 100644 convert_text.py create mode 100644 model/compiled/All words.txt create mode 100644 model/compiled/Word scores in Category 1.txt create mode 100644 model/compiled/Word scores in Category 2.txt create mode 100644 model/raw/category_1_words_twain.txt create mode 100644 model/raw/category_2_words_shakespeare.txt diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..bee8a64 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +__pycache__ diff --git a/convert_raw_model.py b/convert_raw_model.py new file mode 100644 index 0000000..4ef723e --- /dev/null +++ b/convert_raw_model.py @@ -0,0 +1,53 @@ +import gptc.tokenizer +import json + + +def assemble_text(category_1, category_2, raw_model): + category_1_words = [] + category_2_words = [] + + for text_dict in raw_model: + if text_dict["category"] == category_1: + words = category_1_words + elif text_dict["category"] == category_2: + words = category_2_words + else: + continue + + words += gptc.tokenizer.tokenize(text_dict["text"]) + + category_1_words.append("") + category_2_words.append("") + + return "\n".join(category_1_words), "\n".join(category_2_words) + + +if __name__ == "__main__": + import argparse + + parser = argparse.ArgumentParser() + parser.add_argument( + "cat_1_name", help="the name of category 1 in the model" + ) + parser.add_argument( + "cat_2_name", help="the name of category 2 in the model" + ) + parser.add_argument("model_path", help="path to raw model in JSON format") + parser.add_argument( + "cat_1_file", help="path to file to write category 1 words to" + ) + parser.add_argument( + "cat_2_file", help="path to file to write category 2 words to" + ) + args = parser.parse_args() + + with open(args.model_path) as f: + raw_model = json.load(f) + + cat1, cat2 = assemble_text(args.cat_1_name, args.cat_2_name, raw_model) + + with open(args.cat_1_file, "w+") as f: + f.write(cat1) + + with open(args.cat_2_file, "w+") as f: + f.write(cat2) diff --git a/convert_text.py b/convert_text.py new file mode 100644 index 0000000..f4592ef --- /dev/null +++ b/convert_text.py @@ -0,0 +1,11 @@ +import gptc.tokenizer + +words = [] + +while True: + try: + words += gptc.tokenizer.tokenize(input()) + except EOFError: + break + +print("\n".join(words)) diff --git a/gptc_scratch.sb3 b/gptc_scratch.sb3 index bf437b2ae82270f620c799431415ba9d9444c573..8edcb6c68a4731334b1b09eec8cf5ecdad40080b 100644 GIT binary patch delta 13034 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 niKHk43Wfple@9r7h3W9Yhm*QTuz#?y-_s=J1 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