aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorab <abdullah_ahmed@brown.edu>2019-08-06 16:01:57 -0400
committerab <abdullah_ahmed@brown.edu>2019-08-06 16:01:57 -0400
commit06b59a4ec2f1871846696da22928fc7d54ae02d6 (patch)
tree8aab4903259bc1ccd892125cf927d774e5b5fe45
parenta8a3af0193cc423fc7b0cff4ca9ff1a9074a7998 (diff)
word2vec is functional
-rw-r--r--package.json8
-rw-r--r--src/client/cognitive_services/CognitiveServices.ts18
-rw-r--r--src/client/views/nodes/ImageBox.tsx8
-rw-r--r--src/server/Recommender.ts30
-rw-r--r--src/server/index.ts19
-rw-r--r--webpack.config.js5
6 files changed, 73 insertions, 15 deletions
diff --git a/package.json b/package.json
index 9012ff1f7..44d5287bd 100644
--- a/package.json
+++ b/package.json
@@ -3,6 +3,12 @@
"version": "1.0.0",
"description": "",
"main": "index.js",
+ "browser": {
+ "child_process": false
+ },
+ "node": {
+ "child_process": "empty"
+ },
"scripts": {
"start": "cross-env NODE_OPTIONS=--max_old_space_size=4096 ts-node-dev -- src/server/index.ts",
"debug": "cross-env NODE_OPTIONS=--max_old_space_size=8192 ts-node-dev --inspect -- src/server/index.ts",
@@ -218,4 +224,4 @@
"xoauth2": "^1.2.0",
"youtube": "^0.1.0"
}
-}
+} \ No newline at end of file
diff --git a/src/client/cognitive_services/CognitiveServices.ts b/src/client/cognitive_services/CognitiveServices.ts
index 6afd2571a..863236b60 100644
--- a/src/client/cognitive_services/CognitiveServices.ts
+++ b/src/client/cognitive_services/CognitiveServices.ts
@@ -6,6 +6,8 @@ import { RouteStore } from "../../server/RouteStore";
import { Utils } from "../../Utils";
import { InkData } from "../../new_fields/InkField";
import { UndoManager } from "../util/UndoManager";
+import requestPromise = require("request-promise");
+import { List } from "../../new_fields/List";
type APIManager<D> = { converter: BodyConverter<D>, requester: RequestExecutor, analyzer: AnalysisApplier };
type RequestExecutor = (apiKey: string, body: string, service: Service) => Promise<string>;
@@ -255,9 +257,23 @@ export namespace CognitiveServices {
//target[keys[0]] = Docs.Get.DocumentHierarchyFromJson(results, "Key Word Analysis");
target[keys[0]] = keyterms;
console.log("analyzed!");
+ vectorize(keyterms);
return null;
- }
+ },
+
+
};
+ function vectorize(keyterms: any) {
+ console.log("vectorizing...");
+ keyterms = ["father", "king"];
+ let args = { method: 'POST', uri: Utils.prepend("/recommender"), body: { keyphrases: keyterms }, json: true };
+ requestPromise.post(args).then((value) => {
+ value.forEach((wordvec: any) => {
+ console.log(wordvec.word);
+ });
+ });
+ }
+
}
} \ No newline at end of file
diff --git a/src/client/views/nodes/ImageBox.tsx b/src/client/views/nodes/ImageBox.tsx
index 7388b532c..161226c0d 100644
--- a/src/client/views/nodes/ImageBox.tsx
+++ b/src/client/views/nodes/ImageBox.tsx
@@ -1,5 +1,5 @@
import { library } from '@fortawesome/fontawesome-svg-core';
-import { faImage, faFileAudio, faPaintBrush, faAsterisk } from '@fortawesome/free-solid-svg-icons';
+import { faImage, faFileAudio, faPaintBrush, faAsterisk, faBrain } from '@fortawesome/free-solid-svg-icons';
import { action, observable, computed, runInAction } from 'mobx';
import { observer } from "mobx-react";
import Lightbox from 'react-image-lightbox';
@@ -31,12 +31,14 @@ import { faEye } from '@fortawesome/free-regular-svg-icons';
import { ComputedField } from '../../../new_fields/ScriptField';
import { CompileScript } from '../../util/Scripting';
import { thisExpression } from 'babel-types';
+import { Recommender } from '../../../server/Recommender';
+import requestPromise = require('request-promise');
var requestImageSize = require('../../util/request-image-size');
var path = require('path');
const { Howl } = require('howler');
-library.add(faImage, faEye, faPaintBrush);
+library.add(faImage, faEye, faPaintBrush, faBrain);
library.add(faFileAudio, faAsterisk);
@@ -253,6 +255,8 @@ export class ImageBox extends DocComponent<FieldViewProps, ImageDocument>(ImageD
return keyterms;
};
CognitiveServices.Text.Manager.analyzer(this.extensionDoc, ["key words"], data, converter);
+ // request recommender
+ //fetch(Utils.prepend("/recommender"), { body: body, method: "POST", headers: { "content-type": "application/json" } }).then((value) => console.log(value));
}
generateMetadata = (threshold: Confidence = Confidence.Excellent) => {
diff --git a/src/server/Recommender.ts b/src/server/Recommender.ts
index 6d9ca6486..3c71f3aa1 100644
--- a/src/server/Recommender.ts
+++ b/src/server/Recommender.ts
@@ -3,25 +3,27 @@ var w2v = require('word2vec');
export class Recommender {
private _model: any;
+ static Instance: Recommender;
constructor() {
console.log("creating recommender...");
+ Recommender.Instance = this;
}
- public loadModel(): Promise<any> {
+ private loadModel(): Promise<any> {
let self = this;
return new Promise(res => {
w2v.loadModel("./node_modules/word2vec/vectors.txt", function (err: any, model: any) {
- console.log(err);
- console.log(model);
self._model = model;
- console.log(model.similarity('father', 'mother'));
res(model);
});
});
}
- public testModel() {
+ public async testModel() {
+ if (!this._model) {
+ await this.loadModel();
+ }
if (this._model) {
let similarity = this._model.similarity('father', 'mother');
console.log(similarity);
@@ -30,4 +32,22 @@ export class Recommender {
console.log("model not found :(");
}
}
+
+ public async testInstance(text: string) {
+ if (!this._model) {
+ await this.loadModel();
+ }
+ console.log(text);
+ }
+
+ public async vectorize(text: string[]) {
+ if (!this._model) {
+ await this.loadModel();
+ }
+ if (this._model) {
+ let word_vecs = this._model.getVectors(text);
+ console.log(word_vecs[0]);
+ return word_vecs;
+ }
+ }
}
diff --git a/src/server/index.ts b/src/server/index.ts
index dda5a870a..67087fc1f 100644
--- a/src/server/index.ts
+++ b/src/server/index.ts
@@ -52,11 +52,6 @@ const probe = require("probe-image-size");
var SolrNode = require('solr-node');
var shell = require('shelljs');
-let recommender = new Recommender();
-recommender.loadModel().then(() => {
- recommender.testModel();
-});
-
const download = (url: string, dest: fs.PathLike) => request.get(url).pipe(fs.createWriteStream(dest));
let youtubeApiKey: string;
YoutubeApi.readApiKey((apiKey: string) => youtubeApiKey = apiKey);
@@ -651,6 +646,20 @@ app.use(RouteStore.corsProxy, (req, res) => {
}).pipe(res);
});
+////
+
+let recommender = new Recommender();
+recommender.testModel();
+
+app.post("/recommender", async (req, res) => {
+ let keyphrases = req.body.keyphrases;
+ let wordvecs = await recommender.vectorize(keyphrases);
+ res.send(wordvecs);
+});
+
+
+/////
+
app.get(RouteStore.delete, (req, res) => {
if (release) {
res.send("no");
diff --git a/webpack.config.js b/webpack.config.js
index 5e0a6a883..6a14dfcda 100644
--- a/webpack.config.js
+++ b/webpack.config.js
@@ -93,5 +93,8 @@ module.exports = {
warnings: true,
errors: true
}
- }
+ },
+ externals: [
+ 'child_process'
+ ]
}; \ No newline at end of file