From b9c63414a0a77e31d0936df328ebd24a845086e2 Mon Sep 17 00:00:00 2001 From: matt Date: Tue, 11 Apr 2023 13:27:56 -0700 Subject: [PATCH] init --- .gitignore | 2 ++ docs/title_len.png | Bin 0 -> 20580 bytes src/cli.py | 65 ++++++++++++++++++++++++++++++++++++++++ src/data.py | 21 +++++++++++++ src/lib.py | 8 +++++ src/model.py | 16 ++++++++++ src/nearest_neighbor.py | 5 ++++ src/word.py | 43 ++++++++++++++++++++++++++ 8 files changed, 160 insertions(+) create mode 100644 .gitignore create mode 100644 docs/title_len.png create mode 100644 src/cli.py create mode 100644 src/data.py create mode 100644 src/lib.py create mode 100644 src/model.py create mode 100644 src/nearest_neighbor.py create mode 100644 src/word.py diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..c682433 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +*.csv +*.swp diff --git a/docs/title_len.png b/docs/title_len.png new file mode 100644 index 0000000000000000000000000000000000000000..64380906e0cea236cb763055933c02bf41a26d2b GIT binary patch literal 20580 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