Spaces:
Sleeping
Sleeping
Commit Β·
1ad4e76
1
Parent(s): d0cfa36
bar graphs
Browse filesThis view is limited to 50 files because it contains too many changes. Β See raw diff
- FastAPI/app/__pycache__/api.cpython-310.pyc +0 -0
- FastAPI/app/api.py +196 -9
- FastAPI/app/build/asset-manifest.json +3 -3
- FastAPI/app/build/index.html +1 -1
- FastAPI/app/{build_copy_v2/static/js/main.ed106e83.js β build/static/js/main.4ec2654c.js} +0 -0
- FastAPI/app/{build_copy_v2/static/js/main.ed106e83.js.LICENSE.txt β build/static/js/main.4ec2654c.js.LICENSE.txt} +0 -0
- FastAPI/app/build/static/js/main.4ec2654c.js.map +0 -0
- FastAPI/app/build/words.svg +0 -0
- FastAPI/app/build_copy_v1/index.html +0 -1
- FastAPI/app/build_copy_v1/static/js/main.e17bd3d9.js +0 -0
- FastAPI/app/build_copy_v1/static/js/main.e17bd3d9.js.LICENSE.txt +0 -39
- FastAPI/app/build_copy_v1/static/js/main.e17bd3d9.js.map +0 -0
- FastAPI/app/build_copy_v2/asset-manifest.json +0 -10
- FastAPI/app/build_copy_v2/favicon.ico +0 -0
- FastAPI/app/build_copy_v2/logo192.png +0 -0
- FastAPI/app/build_copy_v2/logo512.png +0 -0
- FastAPI/app/build_copy_v2/manifest.json +0 -25
- FastAPI/app/build_copy_v2/robots.txt +0 -3
- FastAPI/app/build_copy_v2/static/js/main.ed106e83.js.map +0 -0
- FastAPI/app/build_copy_v3/asset-manifest.json +0 -10
- FastAPI/app/build_copy_v3/favicon.ico +0 -0
- FastAPI/app/build_copy_v3/index.html +0 -1
- FastAPI/app/build_copy_v3/logo192.png +0 -0
- FastAPI/app/build_copy_v3/logo512.png +0 -0
- FastAPI/app/build_copy_v3/manifest.json +0 -25
- FastAPI/app/build_copy_v3/robots.txt +0 -3
- FastAPI/app/build_copy_v3/static/js/main.98763516.js +0 -0
- FastAPI/app/build_copy_v3/static/js/main.98763516.js.LICENSE.txt +0 -136
- FastAPI/app/build_copy_v3/static/js/main.98763516.js.map +0 -0
- FastAPI/app/{build_copy_v1 β build_v2}/asset-manifest.json +3 -3
- FastAPI/app/{build_copy_v1 β build_v2}/favicon.ico +0 -0
- FastAPI/app/{build_copy_v2 β build_v2}/index.html +1 -1
- FastAPI/app/{build_copy_v1 β build_v2}/logo192.png +0 -0
- FastAPI/app/{build_copy_v1 β build_v2}/logo512.png +0 -0
- FastAPI/app/{build_copy_v1 β build_v2}/manifest.json +0 -0
- FastAPI/app/{build_copy_v1 β build_v2}/robots.txt +0 -0
- FastAPI/app/{build β build_v2}/static/js/main.76e15e36.js +0 -0
- FastAPI/app/{build β build_v2}/static/js/main.76e15e36.js.LICENSE.txt +0 -0
- FastAPI/app/{build β build_v2}/static/js/main.76e15e36.js.map +0 -0
- FastAPI/app/utils/__pycache__/embedding.cpython-310.pyc +0 -0
- FastAPI/app/utils/embedding.py +13 -3
- FastAPI/test.ipynb +0 -0
- my-app/package-lock.json +38 -0
- my-app/package.json +1 -0
- my-app/public/words.svg +0 -0
- my-app/src/Components/ActiveWords/index.jsx +99 -37
- my-app/src/Components/BarPlot/index.jsx +32 -0
- my-app/src/Components/Body/index.jsx +4 -3
- my-app/src/Components/CommonCategory/index.jsx +174 -0
- my-app/src/Components/Context/WordsContext.js +10 -0
FastAPI/app/__pycache__/api.cpython-310.pyc
CHANGED
|
Binary files a/FastAPI/app/__pycache__/api.cpython-310.pyc and b/FastAPI/app/__pycache__/api.cpython-310.pyc differ
|
|
|
FastAPI/app/api.py
CHANGED
|
@@ -1,13 +1,18 @@
|
|
| 1 |
-
from
|
|
|
|
|
|
|
| 2 |
from fastapi.middleware.cors import CORSMiddleware
|
| 3 |
from fastapi.staticfiles import StaticFiles
|
| 4 |
-
from fastapi.responses import FileResponse
|
|
|
|
|
|
|
| 5 |
|
| 6 |
from app.utils.embedding import get_embedding
|
| 7 |
|
| 8 |
|
| 9 |
app = FastAPI()
|
| 10 |
|
|
|
|
| 11 |
origins = [
|
| 12 |
"http://localhost:3000",
|
| 13 |
"http://localhost:8000",
|
|
@@ -38,17 +43,26 @@ words_db = []
|
|
| 38 |
|
| 39 |
|
| 40 |
@app.get("/api/words", tags=["words"])
|
| 41 |
-
async def
|
|
|
|
| 42 |
return {"data": words_db}
|
| 43 |
|
| 44 |
|
| 45 |
@app.post("/api/add-word", tags=["words"])
|
| 46 |
async def add_word(word: dict) -> dict:
|
| 47 |
-
|
| 48 |
-
|
| 49 |
-
|
| 50 |
-
|
| 51 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 52 |
|
| 53 |
|
| 54 |
@app.delete("/api/delete-word/{word_id}", tags=["words"])
|
|
@@ -56,12 +70,185 @@ async def delete_word(word_id: str) -> dict:
|
|
| 56 |
word_id = int(word_id)
|
| 57 |
for word in words_db:
|
| 58 |
if int(word["id"]) == word_id:
|
| 59 |
-
print("found")
|
| 60 |
words_db.remove(word)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 61 |
return {"data": {"Succesful"}}
|
|
|
|
| 62 |
return {"data": {"Word not found"}}
|
| 63 |
|
| 64 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 65 |
if __name__ == "__main__":
|
| 66 |
import uvicorn
|
| 67 |
|
|
|
|
| 1 |
+
from typing import List
|
| 2 |
+
from fastapi import FastAPI, HTTPException, Query, Request
|
| 3 |
+
from fastapi.exceptions import RequestValidationError
|
| 4 |
from fastapi.middleware.cors import CORSMiddleware
|
| 5 |
from fastapi.staticfiles import StaticFiles
|
| 6 |
+
from fastapi.responses import FileResponse, JSONResponse
|
| 7 |
+
import numpy as np
|
| 8 |
+
from pydantic import BaseModel, Field, conlist
|
| 9 |
|
| 10 |
from app.utils.embedding import get_embedding
|
| 11 |
|
| 12 |
|
| 13 |
app = FastAPI()
|
| 14 |
|
| 15 |
+
|
| 16 |
origins = [
|
| 17 |
"http://localhost:3000",
|
| 18 |
"http://localhost:8000",
|
|
|
|
| 43 |
|
| 44 |
|
| 45 |
@app.get("/api/words", tags=["words"])
|
| 46 |
+
async def get_words() -> dict:
|
| 47 |
+
|
| 48 |
return {"data": words_db}
|
| 49 |
|
| 50 |
|
| 51 |
@app.post("/api/add-word", tags=["words"])
|
| 52 |
async def add_word(word: dict) -> dict:
|
| 53 |
+
try:
|
| 54 |
+
word_embedding = get_embedding(word["item"])
|
| 55 |
+
words_db.append(word)
|
| 56 |
+
word["embedding"] = word_embedding.tolist()
|
| 57 |
+
|
| 58 |
+
return JSONResponse(
|
| 59 |
+
status_code=200,
|
| 60 |
+
content={"message": "Item created successfully", "success": True},
|
| 61 |
+
)
|
| 62 |
+
except HTTPException as e:
|
| 63 |
+
raise e
|
| 64 |
+
except Exception as e:
|
| 65 |
+
raise HTTPException(status_code=500, detail=str(e))
|
| 66 |
|
| 67 |
|
| 68 |
@app.delete("/api/delete-word/{word_id}", tags=["words"])
|
|
|
|
| 70 |
word_id = int(word_id)
|
| 71 |
for word in words_db:
|
| 72 |
if int(word["id"]) == word_id:
|
|
|
|
| 73 |
words_db.remove(word)
|
| 74 |
+
|
| 75 |
+
return {"data": {"Succesful"}}
|
| 76 |
+
|
| 77 |
+
return {"data": {"Word not found"}}
|
| 78 |
+
|
| 79 |
+
|
| 80 |
+
#### Category Words
|
| 81 |
+
|
| 82 |
+
common_category_words = []
|
| 83 |
+
|
| 84 |
+
|
| 85 |
+
@app.get("/api/common-category-words", tags=["category-words"])
|
| 86 |
+
async def get_common_category_words() -> dict:
|
| 87 |
+
|
| 88 |
+
return {"data": common_category_words}
|
| 89 |
+
|
| 90 |
+
|
| 91 |
+
@app.post("/api/add-common-category-words", tags=["category-words"])
|
| 92 |
+
async def add_common_category_words(new_word: dict) -> dict:
|
| 93 |
+
try:
|
| 94 |
+
for word in common_category_words:
|
| 95 |
+
if new_word["item"] == word["item"]:
|
| 96 |
+
raise HTTPException(status_code=400, detail="Word already exists")
|
| 97 |
+
|
| 98 |
+
word_embedding = get_embedding(new_word["item"])
|
| 99 |
+
new_word["embedding"] = word_embedding.tolist()
|
| 100 |
+
common_category_words.append(new_word)
|
| 101 |
+
return JSONResponse(
|
| 102 |
+
status_code=200,
|
| 103 |
+
content={"message": "Item created successfully", "success": True},
|
| 104 |
+
)
|
| 105 |
+
except HTTPException as e:
|
| 106 |
+
raise e
|
| 107 |
+
except Exception as e:
|
| 108 |
+
raise HTTPException(status_code=500, detail=str(e))
|
| 109 |
+
|
| 110 |
+
|
| 111 |
+
@app.get("/api/get-embedding", tags=["category-words"])
|
| 112 |
+
async def get_embedding_api() -> dict:
|
| 113 |
+
if len(common_category_words) > 1:
|
| 114 |
+
vectors = [word["embedding"] for word in common_category_words]
|
| 115 |
+
variances = np.var(vectors, axis=0)
|
| 116 |
+
low_variance_dims = np.argsort(variances)[:3]
|
| 117 |
+
result = {
|
| 118 |
+
"variances": variances.tolist(),
|
| 119 |
+
"top_variance_dims": low_variance_dims.tolist(),
|
| 120 |
+
}
|
| 121 |
+
return JSONResponse(status_code=200, content={"data": result, "success": True})
|
| 122 |
+
return JSONResponse(
|
| 123 |
+
status_code=200,
|
| 124 |
+
content={
|
| 125 |
+
"data": {"variances": [0] * 50, "top_variance_dims": [0, 1, 2]},
|
| 126 |
+
"message": "Not enough words for analysis",
|
| 127 |
+
"success": False,
|
| 128 |
+
},
|
| 129 |
+
)
|
| 130 |
+
|
| 131 |
+
|
| 132 |
+
@app.delete("/api/delete-common-category-words/{word_id}", tags=["category-words"])
|
| 133 |
+
async def delete_common_category_words(word_id: str) -> dict:
|
| 134 |
+
word_id = int(word_id)
|
| 135 |
+
for word in common_category_words:
|
| 136 |
+
if int(word["id"]) == word_id:
|
| 137 |
+
common_category_words.remove(word)
|
| 138 |
+
|
| 139 |
return {"data": {"Succesful"}}
|
| 140 |
+
|
| 141 |
return {"data": {"Word not found"}}
|
| 142 |
|
| 143 |
|
| 144 |
+
### Difference Semantic
|
| 145 |
+
|
| 146 |
+
from starlette.status import HTTP_422_UNPROCESSABLE_ENTITY
|
| 147 |
+
|
| 148 |
+
|
| 149 |
+
class WordPair(BaseModel):
|
| 150 |
+
word1: str = Field(..., min_length=2)
|
| 151 |
+
word2: str = Field(..., min_length=2)
|
| 152 |
+
|
| 153 |
+
|
| 154 |
+
@app.exception_handler(RequestValidationError)
|
| 155 |
+
async def validation_exception_handler(request: Request, exc: RequestValidationError):
|
| 156 |
+
errors = exc.errors()
|
| 157 |
+
detailed_messages = [f"Error in {err['loc'][1]}: {err['msg']}" for err in errors]
|
| 158 |
+
print(detailed_messages)
|
| 159 |
+
return JSONResponse(
|
| 160 |
+
status_code=HTTP_422_UNPROCESSABLE_ENTITY,
|
| 161 |
+
content={"detail": ", ".join(detailed_messages), "body": exc.body},
|
| 162 |
+
)
|
| 163 |
+
|
| 164 |
+
|
| 165 |
+
semantic_difference_db = {}
|
| 166 |
+
|
| 167 |
+
|
| 168 |
+
@app.get("/api/difference-semantic-words", tags=["difference-semantic"])
|
| 169 |
+
async def get_semantic_difference() -> dict:
|
| 170 |
+
|
| 171 |
+
return JSONResponse(
|
| 172 |
+
status_code=200, content={"data": semantic_difference_db, "success": True}
|
| 173 |
+
)
|
| 174 |
+
|
| 175 |
+
|
| 176 |
+
@app.post("/api/add-difference-semantic-words", tags=["difference-semantic"])
|
| 177 |
+
async def add_semantic_difference(new_words: WordPair):
|
| 178 |
+
try:
|
| 179 |
+
first_word = new_words.word1
|
| 180 |
+
second_word = new_words.word2
|
| 181 |
+
|
| 182 |
+
combined_word = f"{first_word}-{second_word}"
|
| 183 |
+
word_one_embedding = get_embedding(first_word)
|
| 184 |
+
word_two_embedding = get_embedding(second_word)
|
| 185 |
+
|
| 186 |
+
embedding = word_one_embedding - word_two_embedding
|
| 187 |
+
|
| 188 |
+
if (
|
| 189 |
+
combined_word in semantic_difference_db
|
| 190 |
+
or combined_word[::-1] in semantic_difference_db
|
| 191 |
+
):
|
| 192 |
+
raise HTTPException(
|
| 193 |
+
status_code=400, detail="Semantic difference already exists"
|
| 194 |
+
)
|
| 195 |
+
semantic_difference_db[combined_word] = {
|
| 196 |
+
"id": len(semantic_difference_db) + 1,
|
| 197 |
+
"word-1": first_word,
|
| 198 |
+
"word-2": second_word,
|
| 199 |
+
"embedding": embedding.tolist(),
|
| 200 |
+
}
|
| 201 |
+
return JSONResponse(
|
| 202 |
+
status_code=200,
|
| 203 |
+
content={"message": "Item created successfully", "success": True},
|
| 204 |
+
)
|
| 205 |
+
except HTTPException as e:
|
| 206 |
+
raise e
|
| 207 |
+
except Exception as e:
|
| 208 |
+
raise HTTPException(status_code=500, detail=str(e))
|
| 209 |
+
|
| 210 |
+
|
| 211 |
+
@app.get("/api/get-embedding-difference", tags=["difference-semantic"])
|
| 212 |
+
async def get_embedding_difference() -> dict:
|
| 213 |
+
try:
|
| 214 |
+
if len(semantic_difference_db) > 1:
|
| 215 |
+
vectors = [word["embedding"] for word in semantic_difference_db.values()]
|
| 216 |
+
variances = np.var(vectors, axis=0)
|
| 217 |
+
low_variance_dims = np.argsort(variances)[:3]
|
| 218 |
+
result = {
|
| 219 |
+
"variance": variances.tolist(),
|
| 220 |
+
"top_variance_dims": low_variance_dims.tolist(),
|
| 221 |
+
}
|
| 222 |
+
return JSONResponse(
|
| 223 |
+
status_code=200, content={"data": result, "success": True}
|
| 224 |
+
)
|
| 225 |
+
return JSONResponse(
|
| 226 |
+
status_code=200,
|
| 227 |
+
content={
|
| 228 |
+
"data": {"variance": [0] * 50, "top_variance_dims": [0, 1, 2]},
|
| 229 |
+
"message": "Not enough words for analysis",
|
| 230 |
+
"success": False,
|
| 231 |
+
},
|
| 232 |
+
)
|
| 233 |
+
except Exception as e:
|
| 234 |
+
raise HTTPException(status_code=500, detail=str(e))
|
| 235 |
+
|
| 236 |
+
|
| 237 |
+
@app.delete(
|
| 238 |
+
"/api/delete-difference-semantic-words/{word_id}", tags=["difference-semantic"]
|
| 239 |
+
)
|
| 240 |
+
async def delete_semantic_difference(word_id: str) -> dict:
|
| 241 |
+
try:
|
| 242 |
+
word_id = int(word_id)
|
| 243 |
+
for word in semantic_difference_db.values():
|
| 244 |
+
if int(word["id"]) == word_id:
|
| 245 |
+
del semantic_difference_db[word["word-1"] + "-" + word["word-2"]]
|
| 246 |
+
return {"data": {"Succesful"}}
|
| 247 |
+
return JSONResponse(status_code=404, content={"data": {"Word not found"}})
|
| 248 |
+
except Exception as e:
|
| 249 |
+
raise HTTPException(status_code=500, detail=str(e))
|
| 250 |
+
|
| 251 |
+
|
| 252 |
if __name__ == "__main__":
|
| 253 |
import uvicorn
|
| 254 |
|
FastAPI/app/build/asset-manifest.json
CHANGED
|
@@ -1,10 +1,10 @@
|
|
| 1 |
{
|
| 2 |
"files": {
|
| 3 |
-
"main.js": "/static/js/main.
|
| 4 |
"index.html": "/index.html",
|
| 5 |
-
"main.
|
| 6 |
},
|
| 7 |
"entrypoints": [
|
| 8 |
-
"static/js/main.
|
| 9 |
]
|
| 10 |
}
|
|
|
|
| 1 |
{
|
| 2 |
"files": {
|
| 3 |
+
"main.js": "/static/js/main.4ec2654c.js",
|
| 4 |
"index.html": "/index.html",
|
| 5 |
+
"main.4ec2654c.js.map": "/static/js/main.4ec2654c.js.map"
|
| 6 |
},
|
| 7 |
"entrypoints": [
|
| 8 |
+
"static/js/main.4ec2654c.js"
|
| 9 |
]
|
| 10 |
}
|
FastAPI/app/build/index.html
CHANGED
|
@@ -1 +1 @@
|
|
| 1 |
-
<!doctype html><html lang="en"><head><meta charset="utf-8"/><link rel="icon" href="/favicon.ico"/><meta name="viewport" content="width=device-width,initial-scale=1"/><meta name="theme-color" content="#000000"/><meta name="description" content="Web site created using create-react-app"/><link rel="apple-touch-icon" href="/logo192.png"/><link rel="manifest" href="/manifest.json"/><title>React App</title><script defer="defer" src="/static/js/main.
|
|
|
|
| 1 |
+
<!doctype html><html lang="en"><head><meta charset="utf-8"/><link rel="icon" href="/favicon.ico"/><meta name="viewport" content="width=device-width,initial-scale=1"/><meta name="theme-color" content="#000000"/><meta name="description" content="Web site created using create-react-app"/><link rel="apple-touch-icon" href="/logo192.png"/><link rel="manifest" href="/manifest.json"/><title>React App</title><script defer="defer" src="/static/js/main.4ec2654c.js"></script></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div></body></html>
|
FastAPI/app/{build_copy_v2/static/js/main.ed106e83.js β build/static/js/main.4ec2654c.js}
RENAMED
|
The diff for this file is too large to render.
See raw diff
|
|
|
FastAPI/app/{build_copy_v2/static/js/main.ed106e83.js.LICENSE.txt β build/static/js/main.4ec2654c.js.LICENSE.txt}
RENAMED
|
File without changes
|
FastAPI/app/build/static/js/main.4ec2654c.js.map
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
FastAPI/app/build/words.svg
ADDED
|
|
FastAPI/app/build_copy_v1/index.html
DELETED
|
@@ -1 +0,0 @@
|
|
| 1 |
-
<!doctype html><html lang="en"><head><meta charset="utf-8"/><link rel="icon" href="/favicon.ico"/><meta name="viewport" content="width=device-width,initial-scale=1"/><meta name="theme-color" content="#000000"/><meta name="description" content="Web site created using create-react-app"/><link rel="apple-touch-icon" href="/logo192.png"/><link rel="manifest" href="/manifest.json"/><title>React App</title><script defer="defer" src="/static/js/main.e17bd3d9.js"></script></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div></body></html>
|
|
|
|
|
|
FastAPI/app/build_copy_v1/static/js/main.e17bd3d9.js
DELETED
|
The diff for this file is too large to render.
See raw diff
|
|
|
FastAPI/app/build_copy_v1/static/js/main.e17bd3d9.js.LICENSE.txt
DELETED
|
@@ -1,39 +0,0 @@
|
|
| 1 |
-
/**
|
| 2 |
-
* @license React
|
| 3 |
-
* react-dom.production.min.js
|
| 4 |
-
*
|
| 5 |
-
* Copyright (c) Facebook, Inc. and its affiliates.
|
| 6 |
-
*
|
| 7 |
-
* This source code is licensed under the MIT license found in the
|
| 8 |
-
* LICENSE file in the root directory of this source tree.
|
| 9 |
-
*/
|
| 10 |
-
|
| 11 |
-
/**
|
| 12 |
-
* @license React
|
| 13 |
-
* react-jsx-runtime.production.min.js
|
| 14 |
-
*
|
| 15 |
-
* Copyright (c) Facebook, Inc. and its affiliates.
|
| 16 |
-
*
|
| 17 |
-
* This source code is licensed under the MIT license found in the
|
| 18 |
-
* LICENSE file in the root directory of this source tree.
|
| 19 |
-
*/
|
| 20 |
-
|
| 21 |
-
/**
|
| 22 |
-
* @license React
|
| 23 |
-
* react.production.min.js
|
| 24 |
-
*
|
| 25 |
-
* Copyright (c) Facebook, Inc. and its affiliates.
|
| 26 |
-
*
|
| 27 |
-
* This source code is licensed under the MIT license found in the
|
| 28 |
-
* LICENSE file in the root directory of this source tree.
|
| 29 |
-
*/
|
| 30 |
-
|
| 31 |
-
/**
|
| 32 |
-
* @license React
|
| 33 |
-
* scheduler.production.min.js
|
| 34 |
-
*
|
| 35 |
-
* Copyright (c) Facebook, Inc. and its affiliates.
|
| 36 |
-
*
|
| 37 |
-
* This source code is licensed under the MIT license found in the
|
| 38 |
-
* LICENSE file in the root directory of this source tree.
|
| 39 |
-
*/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
FastAPI/app/build_copy_v1/static/js/main.e17bd3d9.js.map
DELETED
|
The diff for this file is too large to render.
See raw diff
|
|
|
FastAPI/app/build_copy_v2/asset-manifest.json
DELETED
|
@@ -1,10 +0,0 @@
|
|
| 1 |
-
{
|
| 2 |
-
"files": {
|
| 3 |
-
"main.js": "/static/js/main.ed106e83.js",
|
| 4 |
-
"index.html": "/index.html",
|
| 5 |
-
"main.ed106e83.js.map": "/static/js/main.ed106e83.js.map"
|
| 6 |
-
},
|
| 7 |
-
"entrypoints": [
|
| 8 |
-
"static/js/main.ed106e83.js"
|
| 9 |
-
]
|
| 10 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
FastAPI/app/build_copy_v2/favicon.ico
DELETED
|
Binary file (3.87 kB)
|
|
|
FastAPI/app/build_copy_v2/logo192.png
DELETED
|
Binary file (5.35 kB)
|
|
|
FastAPI/app/build_copy_v2/logo512.png
DELETED
|
Binary file (9.66 kB)
|
|
|
FastAPI/app/build_copy_v2/manifest.json
DELETED
|
@@ -1,25 +0,0 @@
|
|
| 1 |
-
{
|
| 2 |
-
"short_name": "React App",
|
| 3 |
-
"name": "Create React App Sample",
|
| 4 |
-
"icons": [
|
| 5 |
-
{
|
| 6 |
-
"src": "favicon.ico",
|
| 7 |
-
"sizes": "64x64 32x32 24x24 16x16",
|
| 8 |
-
"type": "image/x-icon"
|
| 9 |
-
},
|
| 10 |
-
{
|
| 11 |
-
"src": "logo192.png",
|
| 12 |
-
"type": "image/png",
|
| 13 |
-
"sizes": "192x192"
|
| 14 |
-
},
|
| 15 |
-
{
|
| 16 |
-
"src": "logo512.png",
|
| 17 |
-
"type": "image/png",
|
| 18 |
-
"sizes": "512x512"
|
| 19 |
-
}
|
| 20 |
-
],
|
| 21 |
-
"start_url": ".",
|
| 22 |
-
"display": "standalone",
|
| 23 |
-
"theme_color": "#000000",
|
| 24 |
-
"background_color": "#ffffff"
|
| 25 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
FastAPI/app/build_copy_v2/robots.txt
DELETED
|
@@ -1,3 +0,0 @@
|
|
| 1 |
-
# https://www.robotstxt.org/robotstxt.html
|
| 2 |
-
User-agent: *
|
| 3 |
-
Disallow:
|
|
|
|
|
|
|
|
|
|
|
|
FastAPI/app/build_copy_v2/static/js/main.ed106e83.js.map
DELETED
|
The diff for this file is too large to render.
See raw diff
|
|
|
FastAPI/app/build_copy_v3/asset-manifest.json
DELETED
|
@@ -1,10 +0,0 @@
|
|
| 1 |
-
{
|
| 2 |
-
"files": {
|
| 3 |
-
"main.js": "/static/js/main.98763516.js",
|
| 4 |
-
"index.html": "/index.html",
|
| 5 |
-
"main.98763516.js.map": "/static/js/main.98763516.js.map"
|
| 6 |
-
},
|
| 7 |
-
"entrypoints": [
|
| 8 |
-
"static/js/main.98763516.js"
|
| 9 |
-
]
|
| 10 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
FastAPI/app/build_copy_v3/favicon.ico
DELETED
|
Binary file (3.87 kB)
|
|
|
FastAPI/app/build_copy_v3/index.html
DELETED
|
@@ -1 +0,0 @@
|
|
| 1 |
-
<!doctype html><html lang="en"><head><meta charset="utf-8"/><link rel="icon" href="/favicon.ico"/><meta name="viewport" content="width=device-width,initial-scale=1"/><meta name="theme-color" content="#000000"/><meta name="description" content="Web site created using create-react-app"/><link rel="apple-touch-icon" href="/logo192.png"/><link rel="manifest" href="/manifest.json"/><title>React App</title><script defer="defer" src="/static/js/main.98763516.js"></script></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div></body></html>
|
|
|
|
|
|
FastAPI/app/build_copy_v3/logo192.png
DELETED
|
Binary file (5.35 kB)
|
|
|
FastAPI/app/build_copy_v3/logo512.png
DELETED
|
Binary file (9.66 kB)
|
|
|
FastAPI/app/build_copy_v3/manifest.json
DELETED
|
@@ -1,25 +0,0 @@
|
|
| 1 |
-
{
|
| 2 |
-
"short_name": "React App",
|
| 3 |
-
"name": "Create React App Sample",
|
| 4 |
-
"icons": [
|
| 5 |
-
{
|
| 6 |
-
"src": "favicon.ico",
|
| 7 |
-
"sizes": "64x64 32x32 24x24 16x16",
|
| 8 |
-
"type": "image/x-icon"
|
| 9 |
-
},
|
| 10 |
-
{
|
| 11 |
-
"src": "logo192.png",
|
| 12 |
-
"type": "image/png",
|
| 13 |
-
"sizes": "192x192"
|
| 14 |
-
},
|
| 15 |
-
{
|
| 16 |
-
"src": "logo512.png",
|
| 17 |
-
"type": "image/png",
|
| 18 |
-
"sizes": "512x512"
|
| 19 |
-
}
|
| 20 |
-
],
|
| 21 |
-
"start_url": ".",
|
| 22 |
-
"display": "standalone",
|
| 23 |
-
"theme_color": "#000000",
|
| 24 |
-
"background_color": "#ffffff"
|
| 25 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
FastAPI/app/build_copy_v3/robots.txt
DELETED
|
@@ -1,3 +0,0 @@
|
|
| 1 |
-
# https://www.robotstxt.org/robotstxt.html
|
| 2 |
-
User-agent: *
|
| 3 |
-
Disallow:
|
|
|
|
|
|
|
|
|
|
|
|
FastAPI/app/build_copy_v3/static/js/main.98763516.js
DELETED
|
The diff for this file is too large to render.
See raw diff
|
|
|
FastAPI/app/build_copy_v3/static/js/main.98763516.js.LICENSE.txt
DELETED
|
@@ -1,136 +0,0 @@
|
|
| 1 |
-
/*
|
| 2 |
-
* @copyright 2016 Sean Connelly (@voidqk), http://syntheti.cc
|
| 3 |
-
* @license MIT
|
| 4 |
-
* @preserve Project Home: https://github.com/voidqk/polybooljs
|
| 5 |
-
*/
|
| 6 |
-
|
| 7 |
-
/*
|
| 8 |
-
object-assign
|
| 9 |
-
(c) Sindre Sorhus
|
| 10 |
-
@license MIT
|
| 11 |
-
*/
|
| 12 |
-
|
| 13 |
-
/*
|
| 14 |
-
* @copyright 2016 Sean Connelly (@voidqk), http://syntheti.cc
|
| 15 |
-
* @license MIT
|
| 16 |
-
* @preserve Project Home: https://github.com/voidqk/polybooljs
|
| 17 |
-
*/
|
| 18 |
-
|
| 19 |
-
/*!
|
| 20 |
-
* The buffer module from node.js, for the browser.
|
| 21 |
-
*
|
| 22 |
-
* @author Feross Aboukhadijeh <https://feross.org>
|
| 23 |
-
* @license MIT
|
| 24 |
-
*/
|
| 25 |
-
|
| 26 |
-
/*!
|
| 27 |
-
* Determine if an object is a Buffer
|
| 28 |
-
*
|
| 29 |
-
* @author Feross Aboukhadijeh <https://feross.org>
|
| 30 |
-
* @license MIT
|
| 31 |
-
*/
|
| 32 |
-
|
| 33 |
-
/*!
|
| 34 |
-
* pad-left <https://github.com/jonschlinkert/pad-left>
|
| 35 |
-
*
|
| 36 |
-
* Copyright (c) 2014-2015, Jon Schlinkert.
|
| 37 |
-
* Licensed under the MIT license.
|
| 38 |
-
*/
|
| 39 |
-
|
| 40 |
-
/*!
|
| 41 |
-
* repeat-string <https://github.com/jonschlinkert/repeat-string>
|
| 42 |
-
*
|
| 43 |
-
* Copyright (c) 2014-2015, Jon Schlinkert.
|
| 44 |
-
* Licensed under the MIT License.
|
| 45 |
-
*/
|
| 46 |
-
|
| 47 |
-
/*!
|
| 48 |
-
* The buffer module from node.js, for the browser.
|
| 49 |
-
*
|
| 50 |
-
* @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
|
| 51 |
-
* @license MIT
|
| 52 |
-
*/
|
| 53 |
-
|
| 54 |
-
/*!
|
| 55 |
-
* The buffer module from node.js, for the browser.
|
| 56 |
-
*
|
| 57 |
-
* @author Feross Aboukhadijeh <https://feross.org>
|
| 58 |
-
* @license MIT
|
| 59 |
-
*/
|
| 60 |
-
|
| 61 |
-
/*! Native Promise Only
|
| 62 |
-
v0.8.1 (c) Kyle Simpson
|
| 63 |
-
MIT License: http://getify.mit-license.org
|
| 64 |
-
*/
|
| 65 |
-
|
| 66 |
-
/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh <https://feross.org/opensource> */
|
| 67 |
-
|
| 68 |
-
/*! safe-buffer. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */
|
| 69 |
-
|
| 70 |
-
/**
|
| 71 |
-
* @license React
|
| 72 |
-
* react-dom.production.min.js
|
| 73 |
-
*
|
| 74 |
-
* Copyright (c) Facebook, Inc. and its affiliates.
|
| 75 |
-
*
|
| 76 |
-
* This source code is licensed under the MIT license found in the
|
| 77 |
-
* LICENSE file in the root directory of this source tree.
|
| 78 |
-
*/
|
| 79 |
-
|
| 80 |
-
/**
|
| 81 |
-
* @license React
|
| 82 |
-
* react-is.production.min.js
|
| 83 |
-
*
|
| 84 |
-
* Copyright (c) Facebook, Inc. and its affiliates.
|
| 85 |
-
*
|
| 86 |
-
* This source code is licensed under the MIT license found in the
|
| 87 |
-
* LICENSE file in the root directory of this source tree.
|
| 88 |
-
*/
|
| 89 |
-
|
| 90 |
-
/**
|
| 91 |
-
* @license React
|
| 92 |
-
* react-jsx-runtime.production.min.js
|
| 93 |
-
*
|
| 94 |
-
* Copyright (c) Facebook, Inc. and its affiliates.
|
| 95 |
-
*
|
| 96 |
-
* This source code is licensed under the MIT license found in the
|
| 97 |
-
* LICENSE file in the root directory of this source tree.
|
| 98 |
-
*/
|
| 99 |
-
|
| 100 |
-
/**
|
| 101 |
-
* @license React
|
| 102 |
-
* react.production.min.js
|
| 103 |
-
*
|
| 104 |
-
* Copyright (c) Facebook, Inc. and its affiliates.
|
| 105 |
-
*
|
| 106 |
-
* This source code is licensed under the MIT license found in the
|
| 107 |
-
* LICENSE file in the root directory of this source tree.
|
| 108 |
-
*/
|
| 109 |
-
|
| 110 |
-
/**
|
| 111 |
-
* @license React
|
| 112 |
-
* scheduler.production.min.js
|
| 113 |
-
*
|
| 114 |
-
* Copyright (c) Facebook, Inc. and its affiliates.
|
| 115 |
-
*
|
| 116 |
-
* This source code is licensed under the MIT license found in the
|
| 117 |
-
* LICENSE file in the root directory of this source tree.
|
| 118 |
-
*/
|
| 119 |
-
|
| 120 |
-
/** @license React v16.13.1
|
| 121 |
-
* react-is.production.min.js
|
| 122 |
-
*
|
| 123 |
-
* Copyright (c) Facebook, Inc. and its affiliates.
|
| 124 |
-
*
|
| 125 |
-
* This source code is licensed under the MIT license found in the
|
| 126 |
-
* LICENSE file in the root directory of this source tree.
|
| 127 |
-
*/
|
| 128 |
-
|
| 129 |
-
/** @license React v17.0.2
|
| 130 |
-
* react-is.production.min.js
|
| 131 |
-
*
|
| 132 |
-
* Copyright (c) Facebook, Inc. and its affiliates.
|
| 133 |
-
*
|
| 134 |
-
* This source code is licensed under the MIT license found in the
|
| 135 |
-
* LICENSE file in the root directory of this source tree.
|
| 136 |
-
*/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
FastAPI/app/build_copy_v3/static/js/main.98763516.js.map
DELETED
|
The diff for this file is too large to render.
See raw diff
|
|
|
FastAPI/app/{build_copy_v1 β build_v2}/asset-manifest.json
RENAMED
|
@@ -1,10 +1,10 @@
|
|
| 1 |
{
|
| 2 |
"files": {
|
| 3 |
-
"main.js": "/static/js/main.
|
| 4 |
"index.html": "/index.html",
|
| 5 |
-
"main.
|
| 6 |
},
|
| 7 |
"entrypoints": [
|
| 8 |
-
"static/js/main.
|
| 9 |
]
|
| 10 |
}
|
|
|
|
| 1 |
{
|
| 2 |
"files": {
|
| 3 |
+
"main.js": "/static/js/main.76e15e36.js",
|
| 4 |
"index.html": "/index.html",
|
| 5 |
+
"main.76e15e36.js.map": "/static/js/main.76e15e36.js.map"
|
| 6 |
},
|
| 7 |
"entrypoints": [
|
| 8 |
+
"static/js/main.76e15e36.js"
|
| 9 |
]
|
| 10 |
}
|
FastAPI/app/{build_copy_v1 β build_v2}/favicon.ico
RENAMED
|
File without changes
|
FastAPI/app/{build_copy_v2 β build_v2}/index.html
RENAMED
|
@@ -1 +1 @@
|
|
| 1 |
-
<!doctype html><html lang="en"><head><meta charset="utf-8"/><link rel="icon" href="/favicon.ico"/><meta name="viewport" content="width=device-width,initial-scale=1"/><meta name="theme-color" content="#000000"/><meta name="description" content="Web site created using create-react-app"/><link rel="apple-touch-icon" href="/logo192.png"/><link rel="manifest" href="/manifest.json"/><title>React App</title><script defer="defer" src="/static/js/main.
|
|
|
|
| 1 |
+
<!doctype html><html lang="en"><head><meta charset="utf-8"/><link rel="icon" href="/favicon.ico"/><meta name="viewport" content="width=device-width,initial-scale=1"/><meta name="theme-color" content="#000000"/><meta name="description" content="Web site created using create-react-app"/><link rel="apple-touch-icon" href="/logo192.png"/><link rel="manifest" href="/manifest.json"/><title>React App</title><script defer="defer" src="/static/js/main.76e15e36.js"></script></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div></body></html>
|
FastAPI/app/{build_copy_v1 β build_v2}/logo192.png
RENAMED
|
File without changes
|
FastAPI/app/{build_copy_v1 β build_v2}/logo512.png
RENAMED
|
File without changes
|
FastAPI/app/{build_copy_v1 β build_v2}/manifest.json
RENAMED
|
File without changes
|
FastAPI/app/{build_copy_v1 β build_v2}/robots.txt
RENAMED
|
File without changes
|
FastAPI/app/{build β build_v2}/static/js/main.76e15e36.js
RENAMED
|
File without changes
|
FastAPI/app/{build β build_v2}/static/js/main.76e15e36.js.LICENSE.txt
RENAMED
|
File without changes
|
FastAPI/app/{build β build_v2}/static/js/main.76e15e36.js.map
RENAMED
|
File without changes
|
FastAPI/app/utils/__pycache__/embedding.cpython-310.pyc
CHANGED
|
Binary files a/FastAPI/app/utils/__pycache__/embedding.cpython-310.pyc and b/FastAPI/app/utils/__pycache__/embedding.cpython-310.pyc differ
|
|
|
FastAPI/app/utils/embedding.py
CHANGED
|
@@ -1,13 +1,23 @@
|
|
| 1 |
import os
|
|
|
|
| 2 |
import gensim.downloader as api
|
| 3 |
|
| 4 |
# Ensure the environment variable is set correctly
|
| 5 |
-
gensim_data_dir = os.getenv(
|
| 6 |
|
| 7 |
# Load the GloVe model
|
| 8 |
model = api.load("glove-wiki-gigaword-50")
|
| 9 |
|
| 10 |
|
| 11 |
-
def get_embedding(word):
|
|
|
|
|
|
|
| 12 |
global model
|
| 13 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
import os
|
| 2 |
+
from fastapi import HTTPException
|
| 3 |
import gensim.downloader as api
|
| 4 |
|
| 5 |
# Ensure the environment variable is set correctly
|
| 6 |
+
gensim_data_dir = os.getenv("GENSIM_DATA_DIR", "/home/user/gensim-data")
|
| 7 |
|
| 8 |
# Load the GloVe model
|
| 9 |
model = api.load("glove-wiki-gigaword-50")
|
| 10 |
|
| 11 |
|
| 12 |
+
def get_embedding(word: str) -> list:
|
| 13 |
+
min_val = -5.4593
|
| 14 |
+
max_val = 5.3101
|
| 15 |
global model
|
| 16 |
+
try:
|
| 17 |
+
embediing = model[word.lower()]
|
| 18 |
+
# normalize vector min max to -1 to 1
|
| 19 |
+
embediing = (embediing - min_val) / (max_val - min_val) * 2 - 1
|
| 20 |
+
return embediing
|
| 21 |
+
except KeyError:
|
| 22 |
+
print("Word not in vocabulary")
|
| 23 |
+
raise HTTPException(status_code=404, detail="Word not in vocabulary")
|
FastAPI/test.ipynb
CHANGED
|
The diff for this file is too large to render.
See raw diff
|
|
|
my-app/package-lock.json
CHANGED
|
@@ -15,6 +15,7 @@
|
|
| 15 |
"@testing-library/jest-dom": "^5.17.0",
|
| 16 |
"@testing-library/react": "^13.4.0",
|
| 17 |
"@testing-library/user-event": "^13.5.0",
|
|
|
|
| 18 |
"plotly.js": "^2.33.0",
|
| 19 |
"react": "^18.3.1",
|
| 20 |
"react-dom": "^18.3.1",
|
|
@@ -10665,6 +10666,14 @@
|
|
| 10665 |
"escodegen": "^2.1.0"
|
| 10666 |
}
|
| 10667 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 10668 |
"node_modules/gopd": {
|
| 10669 |
"version": "1.0.1",
|
| 10670 |
"resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz",
|
|
@@ -14748,6 +14757,35 @@
|
|
| 14748 |
"url": "https://github.com/sponsors/sindresorhus"
|
| 14749 |
}
|
| 14750 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 14751 |
"node_modules/npm-run-path": {
|
| 14752 |
"version": "4.0.1",
|
| 14753 |
"resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz",
|
|
|
|
| 15 |
"@testing-library/jest-dom": "^5.17.0",
|
| 16 |
"@testing-library/react": "^13.4.0",
|
| 17 |
"@testing-library/user-event": "^13.5.0",
|
| 18 |
+
"notistack": "^3.0.1",
|
| 19 |
"plotly.js": "^2.33.0",
|
| 20 |
"react": "^18.3.1",
|
| 21 |
"react-dom": "^18.3.1",
|
|
|
|
| 10666 |
"escodegen": "^2.1.0"
|
| 10667 |
}
|
| 10668 |
},
|
| 10669 |
+
"node_modules/goober": {
|
| 10670 |
+
"version": "2.1.14",
|
| 10671 |
+
"resolved": "https://registry.npmjs.org/goober/-/goober-2.1.14.tgz",
|
| 10672 |
+
"integrity": "sha512-4UpC0NdGyAFqLNPnhCT2iHpza2q+RAY3GV85a/mRPdzyPQMsj0KmMMuetdIkzWRbJ+Hgau1EZztq8ImmiMGhsg==",
|
| 10673 |
+
"peerDependencies": {
|
| 10674 |
+
"csstype": "^3.0.10"
|
| 10675 |
+
}
|
| 10676 |
+
},
|
| 10677 |
"node_modules/gopd": {
|
| 10678 |
"version": "1.0.1",
|
| 10679 |
"resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz",
|
|
|
|
| 14757 |
"url": "https://github.com/sponsors/sindresorhus"
|
| 14758 |
}
|
| 14759 |
},
|
| 14760 |
+
"node_modules/notistack": {
|
| 14761 |
+
"version": "3.0.1",
|
| 14762 |
+
"resolved": "https://registry.npmjs.org/notistack/-/notistack-3.0.1.tgz",
|
| 14763 |
+
"integrity": "sha512-ntVZXXgSQH5WYfyU+3HfcXuKaapzAJ8fBLQ/G618rn3yvSzEbnOB8ZSOwhX+dAORy/lw+GC2N061JA0+gYWTVA==",
|
| 14764 |
+
"dependencies": {
|
| 14765 |
+
"clsx": "^1.1.0",
|
| 14766 |
+
"goober": "^2.0.33"
|
| 14767 |
+
},
|
| 14768 |
+
"engines": {
|
| 14769 |
+
"node": ">=12.0.0",
|
| 14770 |
+
"npm": ">=6.0.0"
|
| 14771 |
+
},
|
| 14772 |
+
"funding": {
|
| 14773 |
+
"type": "opencollective",
|
| 14774 |
+
"url": "https://opencollective.com/notistack"
|
| 14775 |
+
},
|
| 14776 |
+
"peerDependencies": {
|
| 14777 |
+
"react": "^16.8.0 || ^17.0.0 || ^18.0.0",
|
| 14778 |
+
"react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0"
|
| 14779 |
+
}
|
| 14780 |
+
},
|
| 14781 |
+
"node_modules/notistack/node_modules/clsx": {
|
| 14782 |
+
"version": "1.2.1",
|
| 14783 |
+
"resolved": "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz",
|
| 14784 |
+
"integrity": "sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==",
|
| 14785 |
+
"engines": {
|
| 14786 |
+
"node": ">=6"
|
| 14787 |
+
}
|
| 14788 |
+
},
|
| 14789 |
"node_modules/npm-run-path": {
|
| 14790 |
"version": "4.0.1",
|
| 14791 |
"resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz",
|
my-app/package.json
CHANGED
|
@@ -10,6 +10,7 @@
|
|
| 10 |
"@testing-library/jest-dom": "^5.17.0",
|
| 11 |
"@testing-library/react": "^13.4.0",
|
| 12 |
"@testing-library/user-event": "^13.5.0",
|
|
|
|
| 13 |
"plotly.js": "^2.33.0",
|
| 14 |
"react": "^18.3.1",
|
| 15 |
"react-dom": "^18.3.1",
|
|
|
|
| 10 |
"@testing-library/jest-dom": "^5.17.0",
|
| 11 |
"@testing-library/react": "^13.4.0",
|
| 12 |
"@testing-library/user-event": "^13.5.0",
|
| 13 |
+
"notistack": "^3.0.1",
|
| 14 |
"plotly.js": "^2.33.0",
|
| 15 |
"react": "^18.3.1",
|
| 16 |
"react-dom": "^18.3.1",
|
my-app/public/words.svg
ADDED
|
|
my-app/src/Components/ActiveWords/index.jsx
CHANGED
|
@@ -1,65 +1,127 @@
|
|
| 1 |
-
import { Grid, Typography } from "@mui/material";
|
|
|
|
| 2 |
import { useEffect, useState } from "react";
|
|
|
|
|
|
|
|
|
|
| 3 |
import { WordsContext } from "../Context/WordsContext";
|
| 4 |
-
import
|
| 5 |
-
import
|
| 6 |
import EmbeddingPlot from "../Plot";
|
|
|
|
| 7 |
|
| 8 |
-
export default function
|
| 9 |
-
const [
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 10 |
|
| 11 |
-
const
|
| 12 |
-
const url = `
|
| 13 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 14 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 15 |
const response = await fetch(url);
|
| 16 |
const wordsResponse = await response.json();
|
| 17 |
-
|
|
|
|
| 18 |
};
|
| 19 |
|
| 20 |
-
const
|
| 21 |
-
|
| 22 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 23 |
await fetch(url, {
|
| 24 |
method: "DELETE",
|
| 25 |
headers: { "Content-Type": "application/json" },
|
| 26 |
});
|
| 27 |
-
await
|
| 28 |
};
|
| 29 |
|
| 30 |
useEffect(() => {
|
| 31 |
-
|
| 32 |
}, []);
|
| 33 |
|
| 34 |
return (
|
| 35 |
<>
|
| 36 |
-
<WordsContext.Provider
|
| 37 |
-
|
| 38 |
-
|
| 39 |
-
|
| 40 |
-
|
| 41 |
-
<
|
| 42 |
-
|
| 43 |
-
|
| 44 |
-
|
|
|
|
|
|
|
|
|
|
| 45 |
</Grid>
|
| 46 |
-
<Grid
|
| 47 |
-
<Grid item>
|
| 48 |
-
<
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 49 |
</Grid>
|
| 50 |
-
|
| 51 |
-
|
| 52 |
-
|
| 53 |
-
|
| 54 |
-
|
| 55 |
-
|
| 56 |
-
|
| 57 |
-
|
| 58 |
-
|
| 59 |
-
|
|
|
|
|
|
|
|
|
|
| 60 |
</Grid>
|
| 61 |
</Grid>
|
| 62 |
-
</
|
| 63 |
</WordsContext.Provider>
|
| 64 |
</>
|
| 65 |
);
|
|
|
|
| 1 |
+
import { Grid, ThemeProvider, Typography } from "@mui/material";
|
| 2 |
+
import { useSnackbar } from "notistack";
|
| 3 |
import { useEffect, useState } from "react";
|
| 4 |
+
import { buildTheme } from "../../infrastructure/theme/theme";
|
| 5 |
+
import baseUrl from "../../services/api/api.config";
|
| 6 |
+
import postData from "../../services/api/base";
|
| 7 |
import { WordsContext } from "../Context/WordsContext";
|
| 8 |
+
import IntroWordRepresentation from "../CreateWord/CreateWord";
|
| 9 |
+
import DimensionsList from "../DimensionList";
|
| 10 |
import EmbeddingPlot from "../Plot";
|
| 11 |
+
import WordCard from "../WordCard";
|
| 12 |
|
| 13 |
+
export default function WordsVectorized() {
|
| 14 |
+
const [wordsVectorized, setWordsVectorized] = useState([]);
|
| 15 |
+
const [selectedDimensions, setSelectedDimensions] = useState([1, 2, 3]);
|
| 16 |
+
const { enqueueSnackbar } = useSnackbar();
|
| 17 |
+
const [wordOne, setWordOne] = useState("");
|
| 18 |
+
const [variance, setVariance] = useState({
|
| 19 |
+
variances: new Array(50).fill(0),
|
| 20 |
+
dimensions: [1, 2, 3],
|
| 21 |
+
});
|
| 22 |
+
|
| 23 |
+
const onChangeWordOne = (event) => {
|
| 24 |
+
const newWordOne = event.target.value;
|
| 25 |
+
setWordOne(newWordOne);
|
| 26 |
+
};
|
| 27 |
|
| 28 |
+
const onPressButton = () => {
|
| 29 |
+
const url = `/add-word`;
|
| 30 |
+
const data = {
|
| 31 |
+
id: wordsVectorized.length + 1,
|
| 32 |
+
item: wordOne,
|
| 33 |
+
};
|
| 34 |
+
postData(url, data)
|
| 35 |
+
.then(fetchWordsVectorized)
|
| 36 |
+
.catch((error) => {
|
| 37 |
+
enqueueSnackbar(error.detail || error.message, {
|
| 38 |
+
variant: "error",
|
| 39 |
+
});
|
| 40 |
+
});
|
| 41 |
|
| 42 |
+
setWordOne("");
|
| 43 |
+
};
|
| 44 |
+
|
| 45 |
+
const fetchWordsVectorized = async () => {
|
| 46 |
+
const url = `${baseUrl}/words`;
|
| 47 |
const response = await fetch(url);
|
| 48 |
const wordsResponse = await response.json();
|
| 49 |
+
setWordsVectorized(wordsResponse.data);
|
| 50 |
+
console.log(wordsResponse.data);
|
| 51 |
};
|
| 52 |
|
| 53 |
+
const handleDimensionClick = (dimension) => {
|
| 54 |
+
setSelectedDimensions((prev) => {
|
| 55 |
+
if (prev.includes(dimension)) {
|
| 56 |
+
return prev.filter((dim) => dim !== dimension);
|
| 57 |
+
} else if (prev.length < 3) {
|
| 58 |
+
return [...prev, dimension];
|
| 59 |
+
} else {
|
| 60 |
+
return [prev[1], prev[2], dimension];
|
| 61 |
+
}
|
| 62 |
+
});
|
| 63 |
+
};
|
| 64 |
+
|
| 65 |
+
const deleteWordsVectorized = async (id) => {
|
| 66 |
+
const url = `${baseUrl}/delete-word/${id}`;
|
| 67 |
await fetch(url, {
|
| 68 |
method: "DELETE",
|
| 69 |
headers: { "Content-Type": "application/json" },
|
| 70 |
});
|
| 71 |
+
await fetchWordsVectorized();
|
| 72 |
};
|
| 73 |
|
| 74 |
useEffect(() => {
|
| 75 |
+
fetchWordsVectorized();
|
| 76 |
}, []);
|
| 77 |
|
| 78 |
return (
|
| 79 |
<>
|
| 80 |
+
<WordsContext.Provider
|
| 81 |
+
value={{ words: wordsVectorized, fetchWords: fetchWordsVectorized }}
|
| 82 |
+
>
|
| 83 |
+
<ThemeProvider theme={buildTheme()}>
|
| 84 |
+
<Grid item textAlign={"center"} mb={5}>
|
| 85 |
+
<Typography
|
| 86 |
+
variant="h0"
|
| 87 |
+
color="#000"
|
| 88 |
+
sx={{ borderBottom: "2px solid #000" }}
|
| 89 |
+
>
|
| 90 |
+
Word Representation
|
| 91 |
+
</Typography>
|
| 92 |
</Grid>
|
| 93 |
+
<Grid container>
|
| 94 |
+
<Grid item container direction={"column"}>
|
| 95 |
+
<IntroWordRepresentation
|
| 96 |
+
wordOne={wordOne}
|
| 97 |
+
onChangeWordOne={onChangeWordOne}
|
| 98 |
+
onPressButton={onPressButton}
|
| 99 |
+
/>
|
| 100 |
+
</Grid>
|
| 101 |
+
<DimensionsList
|
| 102 |
+
embedding={variance.variances}
|
| 103 |
+
selectedDimensions={selectedDimensions}
|
| 104 |
+
onDimensionClick={handleDimensionClick}
|
| 105 |
+
/>
|
| 106 |
+
<Grid item xs={9}>
|
| 107 |
+
<EmbeddingPlot words={wordsVectorized} x={selectedDimensions[0]} y={selectedDimensions[1]} z={selectedDimensions[2]} />
|
| 108 |
</Grid>
|
| 109 |
+
|
| 110 |
+
<Grid item xs={3}>
|
| 111 |
+
<Grid container direction={"column"} mt={2}>
|
| 112 |
+
{wordsVectorized.map((word) => (
|
| 113 |
+
<Grid item key={word.id} mb={1} mr={1}>
|
| 114 |
+
<WordCard
|
| 115 |
+
word={word.item}
|
| 116 |
+
id={word.id}
|
| 117 |
+
deleteWord={deleteWordsVectorized}
|
| 118 |
+
/>
|
| 119 |
+
</Grid>
|
| 120 |
+
))}
|
| 121 |
+
</Grid>
|
| 122 |
</Grid>
|
| 123 |
</Grid>
|
| 124 |
+
</ThemeProvider>
|
| 125 |
</WordsContext.Provider>
|
| 126 |
</>
|
| 127 |
);
|
my-app/src/Components/BarPlot/index.jsx
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import { Grid } from "@mui/material";
|
| 2 |
+
import Plot from "react-plotly.js";
|
| 3 |
+
|
| 4 |
+
export default function BarPlot({ variance }) {
|
| 5 |
+
const dimensions = Array.from({ length: variance.length }, (_, i) => i + 1);
|
| 6 |
+
|
| 7 |
+
return (
|
| 8 |
+
<>
|
| 9 |
+
<Grid item xs={12}>
|
| 10 |
+
<Plot
|
| 11 |
+
data={[
|
| 12 |
+
{
|
| 13 |
+
x: dimensions,
|
| 14 |
+
y: variance,
|
| 15 |
+
type: "bar",
|
| 16 |
+
marker: { color: "blue" },
|
| 17 |
+
},
|
| 18 |
+
]}
|
| 19 |
+
layout={{
|
| 20 |
+
title: "Variance across dimensions",
|
| 21 |
+
xaxis: { title: "Dimension" },
|
| 22 |
+
yaxis: { title: "Variance" },
|
| 23 |
+
showlegend: false, // Remove legend
|
| 24 |
+
autosize: true, // Enable autosizing
|
| 25 |
+
}}
|
| 26 |
+
useResizeHandler={true}
|
| 27 |
+
style={{ width: "100%", height: "100%" }}
|
| 28 |
+
/>
|
| 29 |
+
</Grid>
|
| 30 |
+
</>
|
| 31 |
+
);
|
| 32 |
+
}
|
my-app/src/Components/Body/index.jsx
CHANGED
|
@@ -1,13 +1,14 @@
|
|
| 1 |
import { Grid } from "@mui/material";
|
|
|
|
|
|
|
| 2 |
import ActiveWords from "../ActiveWords";
|
| 3 |
-
import CreateWordEmbedding from "../CreateWord/CreateWord";
|
| 4 |
import { WordsContext } from "../Context/WordsContext";
|
| 5 |
-
import
|
| 6 |
|
| 7 |
export default function Body() {
|
| 8 |
const [words, setWords] = useState([]);
|
| 9 |
const fetchWords = async () => {
|
| 10 |
-
const
|
| 11 |
const words = await response.json();
|
| 12 |
setWords(words.data);
|
| 13 |
};
|
|
|
|
| 1 |
import { Grid } from "@mui/material";
|
| 2 |
+
import { useEffect, useState } from "react";
|
| 3 |
+
import baseUrl from "../../services/api/api.config";
|
| 4 |
import ActiveWords from "../ActiveWords";
|
|
|
|
| 5 |
import { WordsContext } from "../Context/WordsContext";
|
| 6 |
+
import CreateWordEmbedding from "../CreateWord/CreateWord";
|
| 7 |
|
| 8 |
export default function Body() {
|
| 9 |
const [words, setWords] = useState([]);
|
| 10 |
const fetchWords = async () => {
|
| 11 |
+
const url = `${baseUrl}/words`;
|
| 12 |
const words = await response.json();
|
| 13 |
setWords(words.data);
|
| 14 |
};
|
my-app/src/Components/CommonCategory/index.jsx
ADDED
|
@@ -0,0 +1,174 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import { ThemeProvider } from "@emotion/react";
|
| 2 |
+
import { Button, Grid, TextField, Typography } from "@mui/material";
|
| 3 |
+
import { useSnackbar } from "notistack";
|
| 4 |
+
import { useEffect, useState } from "react";
|
| 5 |
+
import { buildTheme } from "../../infrastructure/theme/theme";
|
| 6 |
+
import baseUrl from "../../services/api/api.config";
|
| 7 |
+
import postData from "../../services/api/base";
|
| 8 |
+
import BarPlot from "../BarPlot";
|
| 9 |
+
import { CommonCategoryWordsContext } from "../Context/WordsContext";
|
| 10 |
+
import DimensionsList from "../DimensionList";
|
| 11 |
+
import ScatterPlot from "../ScatterPlot";
|
| 12 |
+
import WordCard from "../WordCard";
|
| 13 |
+
|
| 14 |
+
export default function CommonCategory() {
|
| 15 |
+
const [CommonCategoryWords, setCommonCategoryWords] = useState([]);
|
| 16 |
+
const [wordOne, setWordOne] = useState("");
|
| 17 |
+
const { enqueueSnackbar } = useSnackbar();
|
| 18 |
+
const [variance, setVariance] = useState({
|
| 19 |
+
variances: new Array(50).fill(0),
|
| 20 |
+
dimensions: [1, 2, 3],
|
| 21 |
+
});
|
| 22 |
+
|
| 23 |
+
const [selectedDimensions, setSelectedDimensions] = useState([0, 0]);
|
| 24 |
+
|
| 25 |
+
const handleDimensionClick = (dimension) => {
|
| 26 |
+
setSelectedDimensions((prev) => {
|
| 27 |
+
if (prev.includes(dimension)) {
|
| 28 |
+
return prev.filter((dim) => dim !== dimension);
|
| 29 |
+
} else if (prev.length < 2) {
|
| 30 |
+
return [...prev, dimension];
|
| 31 |
+
} else {
|
| 32 |
+
return [prev[1], dimension];
|
| 33 |
+
}
|
| 34 |
+
});
|
| 35 |
+
};
|
| 36 |
+
|
| 37 |
+
const fetchCommonCategoryWords = async () => {
|
| 38 |
+
const url = `${baseUrl}/common-category-words`;
|
| 39 |
+
const response = await fetch(url);
|
| 40 |
+
const CommonCategoryWordsResponse = await response.json();
|
| 41 |
+
setCommonCategoryWords(CommonCategoryWordsResponse.data);
|
| 42 |
+
};
|
| 43 |
+
|
| 44 |
+
const fetchEmebedding = async () => {
|
| 45 |
+
const url = `${baseUrl}/get-embedding`;
|
| 46 |
+
const response = await fetch(url);
|
| 47 |
+
const embeddingResponse = await response.json();
|
| 48 |
+
setVariance(embeddingResponse.data);
|
| 49 |
+
setSelectedDimensions(embeddingResponse.data.top_variance_dims.slice(0, 2));
|
| 50 |
+
if (!embeddingResponse.success) {
|
| 51 |
+
enqueueSnackbar("Not enough word to create variance");
|
| 52 |
+
}
|
| 53 |
+
};
|
| 54 |
+
|
| 55 |
+
const deleteCommonCategoryWord = async (id) => {
|
| 56 |
+
const url = `${baseUrl}/delete-common-category-words/${id}`;
|
| 57 |
+
await fetch(url, {
|
| 58 |
+
method: "DELETE",
|
| 59 |
+
headers: { "Content-Type": "application/json" },
|
| 60 |
+
});
|
| 61 |
+
await fetchCommonCategoryWords();
|
| 62 |
+
await fetchEmebedding();
|
| 63 |
+
};
|
| 64 |
+
|
| 65 |
+
const onPressButton = async () => {
|
| 66 |
+
const url = `/add-common-category-words`;
|
| 67 |
+
const newWord = {
|
| 68 |
+
id: CommonCategoryWords.length + 1,
|
| 69 |
+
item: wordOne,
|
| 70 |
+
};
|
| 71 |
+
|
| 72 |
+
postData(url, newWord)
|
| 73 |
+
.then(fetchCommonCategoryWords)
|
| 74 |
+
.then(fetchEmebedding)
|
| 75 |
+
.catch((error) => {
|
| 76 |
+
enqueueSnackbar(error.detail || error.message, { variant: "error" });
|
| 77 |
+
});
|
| 78 |
+
};
|
| 79 |
+
|
| 80 |
+
useEffect(() => {
|
| 81 |
+
fetchCommonCategoryWords();
|
| 82 |
+
}, []);
|
| 83 |
+
|
| 84 |
+
const onChangeWordOne = (event) => {
|
| 85 |
+
const newWordOne = event.target.value;
|
| 86 |
+
setWordOne(newWordOne);
|
| 87 |
+
};
|
| 88 |
+
|
| 89 |
+
return (
|
| 90 |
+
<>
|
| 91 |
+
<CommonCategoryWordsContext.Provider
|
| 92 |
+
value={{ CommonCategoryWords, setCommonCategoryWords }}
|
| 93 |
+
>
|
| 94 |
+
<ThemeProvider theme={buildTheme()}>
|
| 95 |
+
<Grid
|
| 96 |
+
container
|
| 97 |
+
direction={"column"}
|
| 98 |
+
justifyContent={"center"}
|
| 99 |
+
alignItems={"center"}
|
| 100 |
+
spacing={2}
|
| 101 |
+
p={4}
|
| 102 |
+
>
|
| 103 |
+
<Grid item mb={2}>
|
| 104 |
+
<Typography variant="h0" color="#000">
|
| 105 |
+
Common Category
|
| 106 |
+
</Typography>
|
| 107 |
+
</Grid>
|
| 108 |
+
<Grid container textAlign={"center"} spacing={2}>
|
| 109 |
+
<Grid item xs={5}>
|
| 110 |
+
<TextField
|
| 111 |
+
id="word-one"
|
| 112 |
+
label="Word"
|
| 113 |
+
variant="outlined"
|
| 114 |
+
onChange={onChangeWordOne}
|
| 115 |
+
fullWidth
|
| 116 |
+
/>
|
| 117 |
+
</Grid>
|
| 118 |
+
|
| 119 |
+
<Grid item xs={4}>
|
| 120 |
+
<Button
|
| 121 |
+
variant="contained"
|
| 122 |
+
color="primary"
|
| 123 |
+
fullWidth
|
| 124 |
+
sx={{ height: "100%" }}
|
| 125 |
+
onClick={onPressButton}
|
| 126 |
+
>
|
| 127 |
+
Create Embedding
|
| 128 |
+
</Button>
|
| 129 |
+
</Grid>
|
| 130 |
+
<Grid item xs={3}>
|
| 131 |
+
<Typography
|
| 132 |
+
variant="h0"
|
| 133 |
+
color="#000"
|
| 134 |
+
sx={{ borderBottom: "2px solid #000" }}
|
| 135 |
+
>
|
| 136 |
+
Active Words's List
|
| 137 |
+
</Typography>
|
| 138 |
+
</Grid>
|
| 139 |
+
</Grid>
|
| 140 |
+
<Grid container mt={2} textAlign={"center"} spacing={2}>
|
| 141 |
+
<Grid item xs={9}>
|
| 142 |
+
<BarPlot variance={variance.variances} ini />
|
| 143 |
+
</Grid>
|
| 144 |
+
|
| 145 |
+
<Grid item xs={3}>
|
| 146 |
+
{CommonCategoryWords.map((word) => (
|
| 147 |
+
<Grid item key={word.id} mb={1} ml={4}>
|
| 148 |
+
<WordCard
|
| 149 |
+
word={word.item}
|
| 150 |
+
id={word.id}
|
| 151 |
+
deleteWord={deleteCommonCategoryWord}
|
| 152 |
+
/>
|
| 153 |
+
</Grid>
|
| 154 |
+
))}
|
| 155 |
+
</Grid>
|
| 156 |
+
</Grid>
|
| 157 |
+
<DimensionsList
|
| 158 |
+
embedding={variance.variances}
|
| 159 |
+
selectedDimensions={selectedDimensions}
|
| 160 |
+
onDimensionClick={handleDimensionClick}
|
| 161 |
+
/>
|
| 162 |
+
<Grid item xs={12} container>
|
| 163 |
+
<ScatterPlot
|
| 164 |
+
words={CommonCategoryWords}
|
| 165 |
+
x={selectedDimensions[0]}
|
| 166 |
+
y={selectedDimensions[1]}
|
| 167 |
+
/>
|
| 168 |
+
</Grid>
|
| 169 |
+
</Grid>
|
| 170 |
+
</ThemeProvider>
|
| 171 |
+
</CommonCategoryWordsContext.Provider>
|
| 172 |
+
</>
|
| 173 |
+
);
|
| 174 |
+
}
|
my-app/src/Components/Context/WordsContext.js
CHANGED
|
@@ -4,3 +4,13 @@ export const WordsContext = createContext({
|
|
| 4 |
words: [],
|
| 5 |
fetchWords: () => {},
|
| 6 |
});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 4 |
words: [],
|
| 5 |
fetchWords: () => {},
|
| 6 |
});
|
| 7 |
+
|
| 8 |
+
export const CommonCategoryWordsContext = createContext({
|
| 9 |
+
CommonCategoryWords: [],
|
| 10 |
+
setCommonCategoryWords: () => {},
|
| 11 |
+
});
|
| 12 |
+
|
| 13 |
+
export const SemanticDifferencesContext = createContext({
|
| 14 |
+
SemanticDifferences: [],
|
| 15 |
+
setSemanticDifferences: () => {},
|
| 16 |
+
});
|