From 7bd4d5561ffb14c911b4d366cf7c06509d210cad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andri=20=C3=93skarsson?= Date: Fri, 27 Dec 2024 21:10:29 +0100 Subject: [PATCH] attempting hosting --- .dockerignore | 15 ++ .github/workflows/fly-deploy.yml | 18 ++ Dockerfile | 31 +++ apps/web/package.json | 4 +- apps/web/scripts/run-server.ts | 4 +- bun.lockb | Bin 450248 -> 438192 bytes fly.toml | 22 ++ index.ts | 43 --- package.json | 12 +- packages/atproto/package.json | 1 - packages/old/atproto-feed/README.md | 3 - packages/old/atutils/.gitignore | 175 ------------- packages/old/atutils/README.md | 15 -- packages/old/atutils/index.ts | 3 - packages/old/atutils/package.json | 11 - packages/old/atutils/tsconfig.json | 27 -- .../old/classifiers/is-about-programming.ts | 16 -- .../old/classifiers/naive-bayes-classifier.ts | 67 ----- packages/old/classifiers/tokenizer.ts | 9 - packages/ts-bayes/.gitignore | 175 ------------- packages/ts-bayes/README.md | 108 -------- packages/ts-bayes/index.ts | 247 ------------------ packages/ts-bayes/package.json | 15 -- packages/ts-bayes/tsconfig.json | 27 -- 24 files changed, 96 insertions(+), 952 deletions(-) create mode 100644 .dockerignore create mode 100644 .github/workflows/fly-deploy.yml create mode 100644 Dockerfile create mode 100644 fly.toml delete mode 100644 index.ts delete mode 100644 packages/old/atproto-feed/README.md delete mode 100644 packages/old/atutils/.gitignore delete mode 100644 packages/old/atutils/README.md delete mode 100644 packages/old/atutils/index.ts delete mode 100644 packages/old/atutils/package.json delete mode 100644 packages/old/atutils/tsconfig.json delete mode 100644 packages/old/classifiers/is-about-programming.ts delete mode 100644 packages/old/classifiers/naive-bayes-classifier.ts delete mode 100644 packages/old/classifiers/tokenizer.ts delete mode 100644 packages/ts-bayes/.gitignore delete mode 100644 packages/ts-bayes/README.md delete mode 100644 packages/ts-bayes/index.ts delete mode 100644 packages/ts-bayes/package.json delete mode 100644 packages/ts-bayes/tsconfig.json diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..9b49524 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,15 @@ +node_modules +Dockerfile* +docker-compose* +.dockerignore +.git +.gitignore +README.md +LICENSE +.vscode +Makefile +helm-charts +.env +.editorconfig +.idea +coverage* \ No newline at end of file diff --git a/.github/workflows/fly-deploy.yml b/.github/workflows/fly-deploy.yml new file mode 100644 index 0000000..b0c246e --- /dev/null +++ b/.github/workflows/fly-deploy.yml @@ -0,0 +1,18 @@ +# See https://fly.io/docs/app-guides/continuous-deployment-with-github-actions/ + +name: Fly Deploy +on: + push: + branches: + - main +jobs: + deploy: + name: Deploy app + runs-on: ubuntu-latest + concurrency: deploy-group # optional: ensure only one action runs at a time + steps: + - uses: actions/checkout@v4 + - uses: superfly/flyctl-actions/setup-flyctl@master + - run: flyctl deploy --remote-only + env: + FLY_API_TOKEN: ${{ secrets.FLY_API_TOKEN }} diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..708365a --- /dev/null +++ b/Dockerfile @@ -0,0 +1,31 @@ +FROM oven/bun:1 AS base +WORKDIR /usr/src/app + +FROM base AS deps +RUN mkdir -p /tmp/dev +COPY bun.lockb package.json /tmp/dev/ +COPY apps/web/package.json /tmp/dev/apps/web/package.json +COPY apps/jetstream/package.json /tmp/dev/apps/jetstream/package.json +COPY apps/classifier/package.json /tmp/dev/apps/classifier/package.json +COPY packages/atproto/package.json /tmp/dev/packages/atproto/package.json +COPY packages/db/package.json /tmp/dev/packages/db/package.json + +RUN cd /tmp/dev && bun install --frozen-lockfile + +# Astro build +FROM base AS project +COPY --from=deps /tmp/dev/node_modules node_modules +COPY . . +RUN bun run build + +# Service +FROM project as service + +USER bun +EXPOSE 3000/tcp + +ENV HOST=0.0.0.0 +ENV PORT=3000 + +ENTRYPOINT [ "bun", "run" ] +CMD [ "web" ] \ No newline at end of file diff --git a/apps/web/package.json b/apps/web/package.json index 7fd1cf5..14b22bf 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -1,11 +1,11 @@ { - "name": "tech-scrolls", + "name": "web", "type": "module", "version": "0.0.1", "scripts": { "dev": "bun --env-file=../../.env --bun astro dev", "build": "astro build", - "server": "bun run-server.mjs", + "server": "bun scripts/run-server.ts", "preview": "astro preview", "astro": "astro" }, diff --git a/apps/web/scripts/run-server.ts b/apps/web/scripts/run-server.ts index e11eea0..e7c1034 100644 --- a/apps/web/scripts/run-server.ts +++ b/apps/web/scripts/run-server.ts @@ -6,4 +6,6 @@ const app = express(); app.use("/", express.static("dist/client/")); app.use(ssrHandler); -app.listen(process.env["port"] ?? 8080); +const port = process.env["port"] ?? 8080; +console.log("[astro] express listening at ", port); +app.listen(port); diff --git a/bun.lockb b/bun.lockb index 436792a95a86b1b891ef0cc27921da01a366e2cd..a57c68e87802828d8177dc20b7b7c1521974491c 100755 GIT binary patch delta 88884 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 O!g`SAwCOI^%o6~PL*~Q) delta 95896 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 E0Rzne)Bpeg diff --git a/fly.toml b/fly.toml new file mode 100644 index 0000000..df22811 --- /dev/null +++ b/fly.toml @@ -0,0 +1,22 @@ +# fly.toml app configuration file generated for techscrolls on 2024-12-27T20:57:40+01:00 +# +# See https://fly.io/docs/reference/configuration/ for information about how to use this file. +# + +app = 'techscrolls' +primary_region = 'arn' + +[build] + +[http_service] + internal_port = 3000 + force_https = true + auto_stop_machines = 'stop' + auto_start_machines = true + min_machines_running = 0 + processes = ['app'] + +[[vm]] + memory = '1gb' + cpu_kind = 'shared' + cpus = 1 diff --git a/index.ts b/index.ts deleted file mode 100644 index 5978c4b..0000000 --- a/index.ts +++ /dev/null @@ -1,43 +0,0 @@ -import { CredentialManager, XRPC } from "@atcute/client"; - -const config = (() => { - const identifier = process.env["DID_HANDLE"]; - const password = process.env["DID_PASSWORD"]; - if (!identifier || !password) throw Error("Missing config"); - return { - identifier, - password, - }; -})(); - -async function main() { - const manager = new CredentialManager({ - service: "https://bsky.social", - }); - const rpc = new XRPC({ handler: manager }); - - await manager.login({ - identifier: config.identifier, - password: config.password, - }); - - console.log("manager session", manager.session); - - // TODO: Implement cursor - const wss = new WebSocket( - "wss://jetstream2.us-east.bsky.network/subscribe?wantedCollections=app.bsky.feed.post" - ); - wss.addEventListener("open", () => { - console.log("wss open"); - }); - wss.addEventListener("message", (ev) => { - const data = ev.data as string; - if (data.match(/love/)) { - console.log("wss msg", JSON.parse(data)); - } - }); -} - -main().catch((err) => { - console.error(err); -}); diff --git a/package.json b/package.json index feae629..a78067a 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,10 @@ "type": "module", "private": true, "scripts": { - "dev": "bun --filter '*' dev" + "dev": "bun --filter '*' dev", + "build": "bun --filter '*' build", + "web": "bun run migrate && bun run --cwd apps/web server", + "migrate": "bun run --cwd packages/atproto db:migrate" }, "devDependencies": { "@types/bun": "latest" @@ -12,12 +15,7 @@ "peerDependencies": { "typescript": "^5.0.0" }, - "dependencies": { - "@atcute/client": "^2.0.6", - "@atproto/api": "^0.13.21", - "@atproto/lexicon": "^0.4.4", - "inquirer": "^12.2.0" - }, + "dependencies": {}, "workspaces": [ "packages/*", "apps/*", diff --git a/packages/atproto/package.json b/packages/atproto/package.json index 55bf4d1..d030084 100644 --- a/packages/atproto/package.json +++ b/packages/atproto/package.json @@ -33,7 +33,6 @@ "natural": "^8.0.1", "postgres": "^3.4.5", "stopwords-iso": "^1.1.0", - "ts-bayes": "workspace:*", "zstddec": "^0.1.0" } } diff --git a/packages/old/atproto-feed/README.md b/packages/old/atproto-feed/README.md deleted file mode 100644 index ec178a3..0000000 --- a/packages/old/atproto-feed/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# atproto feed - -Should host feed endpoint(s) with given dids (supplied) diff --git a/packages/old/atutils/.gitignore b/packages/old/atutils/.gitignore deleted file mode 100644 index 9b1ee42..0000000 --- a/packages/old/atutils/.gitignore +++ /dev/null @@ -1,175 +0,0 @@ -# Based on https://raw.githubusercontent.com/github/gitignore/main/Node.gitignore - -# Logs - -logs -_.log -npm-debug.log_ -yarn-debug.log* -yarn-error.log* -lerna-debug.log* -.pnpm-debug.log* - -# Caches - -.cache - -# Diagnostic reports (https://nodejs.org/api/report.html) - -report.[0-9]_.[0-9]_.[0-9]_.[0-9]_.json - -# Runtime data - -pids -_.pid -_.seed -*.pid.lock - -# Directory for instrumented libs generated by jscoverage/JSCover - -lib-cov - -# Coverage directory used by tools like istanbul - -coverage -*.lcov - -# nyc test coverage - -.nyc_output - -# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) - -.grunt - -# Bower dependency directory (https://bower.io/) - -bower_components - -# node-waf configuration - -.lock-wscript - -# Compiled binary addons (https://nodejs.org/api/addons.html) - -build/Release - -# Dependency directories - -node_modules/ -jspm_packages/ - -# Snowpack dependency directory (https://snowpack.dev/) - -web_modules/ - -# TypeScript cache - -*.tsbuildinfo - -# Optional npm cache directory - -.npm - -# Optional eslint cache - -.eslintcache - -# Optional stylelint cache - -.stylelintcache - -# Microbundle cache - -.rpt2_cache/ -.rts2_cache_cjs/ -.rts2_cache_es/ -.rts2_cache_umd/ - -# Optional REPL history - -.node_repl_history - -# Output of 'npm pack' - -*.tgz - -# Yarn Integrity file - -.yarn-integrity - -# dotenv environment variable files - -.env -.env.development.local -.env.test.local -.env.production.local -.env.local - -# parcel-bundler cache (https://parceljs.org/) - -.parcel-cache - -# Next.js build output - -.next -out - -# Nuxt.js build / generate output - -.nuxt -dist - -# Gatsby files - -# Comment in the public line in if your project uses Gatsby and not Next.js - -# https://nextjs.org/blog/next-9-1#public-directory-support - -# public - -# vuepress build output - -.vuepress/dist - -# vuepress v2.x temp and cache directory - -.temp - -# Docusaurus cache and generated files - -.docusaurus - -# Serverless directories - -.serverless/ - -# FuseBox cache - -.fusebox/ - -# DynamoDB Local files - -.dynamodb/ - -# TernJS port file - -.tern-port - -# Stores VSCode versions used for testing VSCode extensions - -.vscode-test - -# yarn v2 - -.yarn/cache -.yarn/unplugged -.yarn/build-state.yml -.yarn/install-state.gz -.pnp.* - -# IntelliJ based IDEs -.idea - -# Finder (MacOS) folder config -.DS_Store diff --git a/packages/old/atutils/README.md b/packages/old/atutils/README.md deleted file mode 100644 index 5bc90a2..0000000 --- a/packages/old/atutils/README.md +++ /dev/null @@ -1,15 +0,0 @@ -# atutils - -To install dependencies: - -```bash -bun install -``` - -To run: - -```bash -bun run index.ts -``` - -This project was created using `bun init` in bun v1.1.38. [Bun](https://bun.sh) is a fast all-in-one JavaScript runtime. diff --git a/packages/old/atutils/index.ts b/packages/old/atutils/index.ts deleted file mode 100644 index b267d70..0000000 --- a/packages/old/atutils/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -export function helloFromAtUtils() { - console.log("sup from atutils"); -} diff --git a/packages/old/atutils/package.json b/packages/old/atutils/package.json deleted file mode 100644 index 8719fc1..0000000 --- a/packages/old/atutils/package.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "name": "atutils", - "module": "index.ts", - "type": "module", - "devDependencies": { - "@types/bun": "latest" - }, - "peerDependencies": { - "typescript": "^5.0.0" - } -} \ No newline at end of file diff --git a/packages/old/atutils/tsconfig.json b/packages/old/atutils/tsconfig.json deleted file mode 100644 index 238655f..0000000 --- a/packages/old/atutils/tsconfig.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "compilerOptions": { - // Enable latest features - "lib": ["ESNext", "DOM"], - "target": "ESNext", - "module": "ESNext", - "moduleDetection": "force", - "jsx": "react-jsx", - "allowJs": true, - - // Bundler mode - "moduleResolution": "bundler", - "allowImportingTsExtensions": true, - "verbatimModuleSyntax": true, - "noEmit": true, - - // Best practices - "strict": true, - "skipLibCheck": true, - "noFallthroughCasesInSwitch": true, - - // Some stricter flags (disabled by default) - "noUnusedLocals": false, - "noUnusedParameters": false, - "noPropertyAccessFromIndexSignature": false - } -} diff --git a/packages/old/classifiers/is-about-programming.ts b/packages/old/classifiers/is-about-programming.ts deleted file mode 100644 index def68cc..0000000 --- a/packages/old/classifiers/is-about-programming.ts +++ /dev/null @@ -1,16 +0,0 @@ -import NaiveBayesClassifier from "./naive-bayes-classifier"; - -const trainingData = [ - { - text: "This is a text about programming in JavaScript.", - isAboutProgramming: true, - }, - { text: "This is a text about cooking recipes.", isAboutProgramming: false }, - // Add more training data here -]; - -const classifier = new NaiveBayesClassifier(trainingData); - -export const isAboutProgramming = (text: string): boolean => { - return classifier.classify(text); -}; diff --git a/packages/old/classifiers/naive-bayes-classifier.ts b/packages/old/classifiers/naive-bayes-classifier.ts deleted file mode 100644 index 626d6da..0000000 --- a/packages/old/classifiers/naive-bayes-classifier.ts +++ /dev/null @@ -1,67 +0,0 @@ -import { tokenizeText } from "./tokenizer"; - -interface TrainingData { - text: string; - isPositive: boolean; -} - -class NaiveBayesClassifier { - private vocabulary: Set; - private positiveCounts: Map; - private negativeCounts: Map; - private positiveTotal: number; - private negativeTotal: number; - - constructor(trainingData: TrainingData[]) { - this.vocabulary = new Set(); - this.positiveCounts = new Map(); - this.negativeCounts = new Map(); - this.positiveTotal = 0; - this.negativeTotal = 0; - - trainingData.forEach(({ text, isPositive }) => { - const tokens = tokenizeText(text); - tokens.forEach((token) => { - this.vocabulary.add(token); - const count = isPositive - ? (this.positiveCounts.get(token) || 0) + 1 - : (this.negativeCounts.get(token) || 0) + 1; - if (isPositive) { - this.positiveCounts.set(token, count); - } else { - this.negativeCounts.set(token, count); - } - }); - if (isPositive) { - this.positiveTotal += tokens.length; - } else { - this.negativeTotal += tokens.length; - } - }); - } - - classify(text: string): boolean { - const tokens = tokenizeText(text); - let positive = 0; - let negative = 0; - - tokens.forEach((token) => { - const positiveCount = this.positiveCounts.get(token) || 0; - const negativeCount = this.negativeCounts.get(token) || 0; - const totalPositiveCount = this.positiveTotal; - const totalNegativeCount = this.negativeTotal; - - const positiveProbability = - (positiveCount + 1) / (totalPositiveCount + this.vocabulary.size); - const negativeProbability = - (negativeCount + 1) / (totalNegativeCount + this.vocabulary.size); - - positive += Math.log(positiveProbability); - negative += Math.log(negativeProbability); - }); - - return positive >= negative; - } -} - -export default NaiveBayesClassifier; diff --git a/packages/old/classifiers/tokenizer.ts b/packages/old/classifiers/tokenizer.ts deleted file mode 100644 index abd8cdf..0000000 --- a/packages/old/classifiers/tokenizer.ts +++ /dev/null @@ -1,9 +0,0 @@ -export function tokenizeText(text: string) { - // Remove punctuation and convert to lowercase - const cleanedText = text.replace(/[^a-zA-Z\s]/g, "").toLowerCase(); - - // Split the text into an array of words - const tokens = cleanedText.split(/\s+/); - - return tokens; -} diff --git a/packages/ts-bayes/.gitignore b/packages/ts-bayes/.gitignore deleted file mode 100644 index 9b1ee42..0000000 --- a/packages/ts-bayes/.gitignore +++ /dev/null @@ -1,175 +0,0 @@ -# Based on https://raw.githubusercontent.com/github/gitignore/main/Node.gitignore - -# Logs - -logs -_.log -npm-debug.log_ -yarn-debug.log* -yarn-error.log* -lerna-debug.log* -.pnpm-debug.log* - -# Caches - -.cache - -# Diagnostic reports (https://nodejs.org/api/report.html) - -report.[0-9]_.[0-9]_.[0-9]_.[0-9]_.json - -# Runtime data - -pids -_.pid -_.seed -*.pid.lock - -# Directory for instrumented libs generated by jscoverage/JSCover - -lib-cov - -# Coverage directory used by tools like istanbul - -coverage -*.lcov - -# nyc test coverage - -.nyc_output - -# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) - -.grunt - -# Bower dependency directory (https://bower.io/) - -bower_components - -# node-waf configuration - -.lock-wscript - -# Compiled binary addons (https://nodejs.org/api/addons.html) - -build/Release - -# Dependency directories - -node_modules/ -jspm_packages/ - -# Snowpack dependency directory (https://snowpack.dev/) - -web_modules/ - -# TypeScript cache - -*.tsbuildinfo - -# Optional npm cache directory - -.npm - -# Optional eslint cache - -.eslintcache - -# Optional stylelint cache - -.stylelintcache - -# Microbundle cache - -.rpt2_cache/ -.rts2_cache_cjs/ -.rts2_cache_es/ -.rts2_cache_umd/ - -# Optional REPL history - -.node_repl_history - -# Output of 'npm pack' - -*.tgz - -# Yarn Integrity file - -.yarn-integrity - -# dotenv environment variable files - -.env -.env.development.local -.env.test.local -.env.production.local -.env.local - -# parcel-bundler cache (https://parceljs.org/) - -.parcel-cache - -# Next.js build output - -.next -out - -# Nuxt.js build / generate output - -.nuxt -dist - -# Gatsby files - -# Comment in the public line in if your project uses Gatsby and not Next.js - -# https://nextjs.org/blog/next-9-1#public-directory-support - -# public - -# vuepress build output - -.vuepress/dist - -# vuepress v2.x temp and cache directory - -.temp - -# Docusaurus cache and generated files - -.docusaurus - -# Serverless directories - -.serverless/ - -# FuseBox cache - -.fusebox/ - -# DynamoDB Local files - -.dynamodb/ - -# TernJS port file - -.tern-port - -# Stores VSCode versions used for testing VSCode extensions - -.vscode-test - -# yarn v2 - -.yarn/cache -.yarn/unplugged -.yarn/build-state.yml -.yarn/install-state.gz -.pnp.* - -# IntelliJ based IDEs -.idea - -# Finder (MacOS) folder config -.DS_Store diff --git a/packages/ts-bayes/README.md b/packages/ts-bayes/README.md deleted file mode 100644 index 8b06833..0000000 --- a/packages/ts-bayes/README.md +++ /dev/null @@ -1,108 +0,0 @@ -# `ts-bayes`: A Naive-Bayes classifier for node.js, ported to Typescript - -`ts-bayes` takes a document (piece of text), and tells you what category that document belongs to. - -This is a Typescript port of the [original work](https://github.com/ttezel/bayes) by [ttezel](https://github.com/ttezel). - -## What can I use this for? - -You can use this for categorizing any text content into any arbitrary set of **categories**. For example: - -- is an email **spam**, or **not spam** ? -- is a news article about **technology**, **politics**, or **sports** ? -- is a piece of text expressing **positive** emotions, or **negative** emotions? - -## Installing - -``` -npm install ts-bayes -``` - -##Usage - -```javascript -import { Bayes } from "ts-bayes"; - -var classifier = new Bayes(); - -// teach it positive phrases - -classifier.learn("amazing, awesome movie!! Yeah!! Oh boy.", "positive"); -classifier.learn( - "Sweet, this is incredibly, amazing, perfect, great!!", - "positive" -); - -// teach it a negative phrase - -classifier.learn("terrible, shitty thing. Damn. Sucks!!", "negative"); - -// now ask it to categorize a document it has never seen before - -classifier.categorize("awesome, cool, amazing!! Yay."); -// => 'positive' - -// serialize the classifier's state as a JSON string. -var stateJson = classifier.toJson(); - -// load the classifier back from its JSON representation. -var revivedClassifier = Bayes.fromJson(stateJson); -``` - -## API - -### `let classifier = new Bayes([options])` - -Returns an instance of a Naive-Bayes Classifier. - -Pass in an optional `options` object to configure the instance. If you specify a `tokenizer` function in `options`, it will be used as the instance's tokenizer. It receives a (string) `text` argument - this is the string value that is passed in by you when you call `.learn()` or `.categorize()`. It must return an array of tokens. The default tokenizer removes punctuation and splits on spaces. - -Eg. - -```typescript -let classifier = new Bayes({ - tokenizer: function (text) { - return text.split(" "); - }, -}); -``` - -###`classifier.learn(text, category)` - -Teach your classifier what `category` the `text` belongs to. The more you teach your classifier, the more reliable it becomes. It will use what it has learned to identify new documents that it hasn't seen before. - -###`classifier.categorize(text)` - -Returns the `category` it thinks `text` belongs to. Its judgement is based on what you have taught it with **.learn()**. - -###`classifier.toJson()` - -Returns the JSON representation of a classifier. - -###`let classifier = Bayes.fromJson(jsonStr)` - -Returns a classifier instance from the JSON representation. Use this with the JSON representation obtained from `classifier.toJson()` - -## License - -(The MIT License) - -Copyright (c) by Tolga Tezel - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/packages/ts-bayes/index.ts b/packages/ts-bayes/index.ts deleted file mode 100644 index 0d01a95..0000000 --- a/packages/ts-bayes/index.ts +++ /dev/null @@ -1,247 +0,0 @@ -import stopwords from "stopwords-iso"; - -export interface Tokenizer { - (text: string): string[]; -} -export interface Map { - [key: string]: T; -} -export interface SerializedClassifier { - options: ClassifierOptions; -} -export interface ClassifierOptions { - docCount?: Map; - wordCount?: Map; - wordFrequencyCount?: Map>; - categories?: Map; - totalDocuments?: number; - vocabularySize?: number; - options?: ClassifierOptions; - tokenizer?: Tokenizer; - vocabulary?: Map; -} -export class Bayes implements ClassifierOptions { - public docCount: Map = {}; - public wordCount: Map = {}; - public wordFrequencyCount: Map>; - public categories: Map = {}; - public totalDocuments: number; - public vocabularySize: number; - public options: ClassifierOptions; - public tokenizer: Tokenizer; - public vocabulary: Map; - - /** Naive-Bayes Classifier that uses Laplace Smoothing. */ - constructor(options?: ClassifierOptions) { - // set options object - this.options = options || {}; - - this.tokenizer = this.options.tokenizer || Bayes.defaultTokenizer; - - // initialize our vocabulary and its size - this.vocabulary = {}; - this.vocabularySize = 0; - - // number of documents we have learned from - this.totalDocuments = 0; - - // document frequency table for each of our categories - // => for each category, how often were documents mapped to it - this.docCount = {}; - - // for each category, how many words total were mapped to it - this.wordCount = {}; - - // word frequency table for each category - // => for each category, how frequent was a given word mapped to it - this.wordFrequencyCount = {}; - - // hashmap of our category names - this.categories = {}; - } - - /** - * Initialize each of our data structure entries for this new category - * - * @param {String} categoryName - */ - initializeCategory(categoryName: string) { - if (!this.categories[categoryName]) { - this.docCount[categoryName] = 0; - this.wordCount[categoryName] = 0; - this.wordFrequencyCount[categoryName] = {}; - this.categories[categoryName] = true; - } - return this; - } - /** - * train our naive-bayes classifier by telling it what `category` - * the `text` corresponds to. - */ - learn(text: string, category: string) { - var self = this; - - // initialize category data structures if we"ve never seen this category - self.initializeCategory(category); - - // update our count of how many documents mapped to this category - self.docCount[category]++; - - // update the total number of documents we have learned from - self.totalDocuments++; - - // normalize the text into a word array - var tokens = self.tokenizer(text); - - // get a frequency count for each token in the text - var frequencyTable = self.frequencyTable(tokens); - - /* - Update our vocabulary and our word frequency count for this category - */ - - Object.keys(frequencyTable).forEach(function (token) { - // add this word to our vocabulary if not already existing - if (!self.vocabulary[token]) { - self.vocabulary[token] = true; - self.vocabularySize++; - } - - var frequencyInText = frequencyTable[token]; - - // update the frequency information for - // this word in this category - if (!self.wordFrequencyCount[category][token]) { - self.wordFrequencyCount[category][token] = frequencyInText; - } else { - self.wordFrequencyCount[category][token] += frequencyInText; - } - // update the count of all words we have seen mapped to this category - self.wordCount[category] += frequencyInText; - }); - - return self; - } - - /** Determine what category `text` belongs to. */ - categorize(text: string) { - var chosenCategory: string | undefined; - var self = this, - maxProbability = -Infinity; - - var tokens = self.tokenizer(text); - var frequencyTable = self.frequencyTable(tokens); - - // iterate thru our categories to find the one with max probability - // for this text - Object.keys(self.categories).forEach(function (category) { - // start by calculating the overall probability of this - // category - // => out of all documents we"ve ever looked at, how many were - // mapped to this category - var categoryProbability = self.docCount[category] / self.totalDocuments; - - // take the log to avoid underflow - var logProbability = Math.log(categoryProbability); - - // now determine P( w | c ) for each word `w` in the text - Object.keys(frequencyTable).forEach(function (token) { - var frequencyInText = frequencyTable[token]; - var tokenProbability = self.tokenProbability(token, category); - - // determine the log of the P( w | c ) for this word - let c = Math.log(tokenProbability); - logProbability += frequencyInText * c; - }); - - if (logProbability > maxProbability) { - maxProbability = logProbability; - chosenCategory = category; - } - }); - - return chosenCategory; - } - - /** - * Calculate probability that a `token` belongs to a `category` - * - * @param {String} token - * @param {String} category - * @return {Number} probability - */ - tokenProbability(token: string, category: string) { - // how many times this word has occurred in documents mapped to this category - var wordFrequencyCount = this.wordFrequencyCount[category][token] || 0; - - // what is the count of all words that have ever been mapped to this category - var wordCount = this.wordCount[category]; - - // use laplace Add-1 Smoothing equation - return (wordFrequencyCount + 1) / (wordCount + this.vocabularySize); - } - /** - * Build a frequency hashmap where - * - the keys are the entries in `tokens` - * - the values are the frequency of each entry in `tokens` - */ - frequencyTable(tokens: string[]) { - var frequencyTable = Object.create(null); - - tokens.forEach(function (token) { - if (!frequencyTable[token]) { - frequencyTable[token] = 1; - } else { - frequencyTable[token]++; - } - }); - - return frequencyTable; - } - - /** Dump the classifier"s state as a JSON string. */ - toJson() { - return JSON.stringify(this); - } - - /** Initializes a Bayes instance from a JSON state representation. - * Use this with classifier.toJson(). */ - static fromJson(jsonStr: string) { - var parsed: SerializedClassifier; - try { - parsed = JSON.parse(jsonStr); - } catch (e) { - throw new Error("bayes.fromJson expects a valid JSON string."); - } - // init a new classifier - var classifier = new Bayes(parsed.options); - return classifier; - } - - /** tokenize input string into an array of word tokens. - * This is the default tokenization function used if user does not provide - * one in `options`. */ - static defaultTokenizer(text: string) { - // remove punctuation from text - remove anything that - // isn't a word char or a space - - var sanitized = text.toLowerCase().replaceAll(sanitizeText, ""); - const split = sanitized.split(/\s+/); - const arr = split.filter((sc) => { - const s = sc.replaceAll(sanitizeToken, ""); - if (s === "") return false; - if (s.length <= 2) return false; - if (s.match(/^\d+$/)) return false; // numbers - if (stopwords.en.includes(s)) return false; - if (s.match(/^@\w+/)) return false; // mentions - if (s.match(/\w+\.\w+\/\w+/)) return false; // url like words - // remove trailing dots - - return true; - }); - return arr; - } -} - -const sanitizeText = new RegExp(/[^a-z0-9\s\.\/]/gi); -const sanitizeToken = new RegExp(/[\.]$/gi); diff --git a/packages/ts-bayes/package.json b/packages/ts-bayes/package.json deleted file mode 100644 index c8d60c4..0000000 --- a/packages/ts-bayes/package.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "ts-bayes", - "module": "index.ts", - "type": "module", - "devDependencies": { - "@types/bun": "latest" - }, - "peerDependencies": { - "typescript": "^5.0.0" - }, - "dependencies": { - "natural": "^8.0.1", - "stopwords-iso": "^1.1.0" - } -} \ No newline at end of file diff --git a/packages/ts-bayes/tsconfig.json b/packages/ts-bayes/tsconfig.json deleted file mode 100644 index 238655f..0000000 --- a/packages/ts-bayes/tsconfig.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "compilerOptions": { - // Enable latest features - "lib": ["ESNext", "DOM"], - "target": "ESNext", - "module": "ESNext", - "moduleDetection": "force", - "jsx": "react-jsx", - "allowJs": true, - - // Bundler mode - "moduleResolution": "bundler", - "allowImportingTsExtensions": true, - "verbatimModuleSyntax": true, - "noEmit": true, - - // Best practices - "strict": true, - "skipLibCheck": true, - "noFallthroughCasesInSwitch": true, - - // Some stricter flags (disabled by default) - "noUnusedLocals": false, - "noUnusedParameters": false, - "noPropertyAccessFromIndexSignature": false - } -} -- 2.51.2