aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorab <abdullah_ahmed@brown.edu>2019-10-25 16:21:45 -0400
committerab <abdullah_ahmed@brown.edu>2019-10-25 16:21:45 -0400
commit1676ddcf9f4da6f9926e2e48eea4302ae9f2efe5 (patch)
tree5e0a1ebb750b31ac73f1fdc830f025a91b13f946
parent301784883375860a7c693db97fe8f279e5380caf (diff)
images show up, react errors
-rw-r--r--src/client/ClientRecommender.tsx78
-rw-r--r--src/client/cognitive_services/CognitiveServices.ts5
-rw-r--r--src/client/views/RecommendationsBox.tsx2
3 files changed, 47 insertions, 38 deletions
diff --git a/src/client/ClientRecommender.tsx b/src/client/ClientRecommender.tsx
index 97efedd89..ae2413d1d 100644
--- a/src/client/ClientRecommender.tsx
+++ b/src/client/ClientRecommender.tsx
@@ -1,4 +1,4 @@
-import { Doc } from "../new_fields/Doc";
+import { Doc, FieldResult } from "../new_fields/Doc";
import { StrCast, Cast } from "../new_fields/Types";
import { List } from "../new_fields/List";
import { CognitiveServices } from "./cognitive_services/CognitiveServices";
@@ -147,47 +147,55 @@ export class ClientRecommender extends React.Component<RecommenderProps> {
*/
public async extractText(dataDoc: Doc, extDoc: Doc, internal: boolean = true, isMainDoc: boolean = false, image: boolean = false) {
- let fielddata = Cast(dataDoc.data, RichTextField);
- if (image && extDoc.generatedTags) {
- console.log(Cast(extDoc.generatedTags, listSpec("string")));
+ let data: string = "";
+ let taglist: FieldResult<List<string>> = undefined;
+ if (image && extDoc.generatedTags) { // TODO: Automatically generate tags. Need to ask Sam about this.
+ taglist = Cast(extDoc.generatedTags, listSpec("string"));
+ taglist!.forEach(tag => {
+ data += tag + ", ";
+ });
+ }
+ else {
+ let fielddata = Cast(dataDoc.data, RichTextField);
+ fielddata ? data = fielddata[ToPlainText]() : data = "";
}
- let data: string;
- fielddata ? data = fielddata[ToPlainText]() : data = "";
- let converter = async (results: any, data: string) => {
+
+ let converter = async (results: any, data: string, isImage: boolean = false) => {
let keyterms = new List<string>(); // raw keywords
// let keyterms_counted = new List<string>(); // keywords, where each keyword is repeated. input to w2v
let kp_string: string = ""; // keywords*frequency concatenated into a string. input into TF
let highKP: string[] = [""]; // most frequent keyphrase
let high = 0;
- results.documents.forEach((doc: any) => {
- let keyPhrases = doc.keyPhrases;
- keyPhrases.map((kp: string) => {
- keyterms.push(kp);
- const frequency = this.countFrequencies(kp, data); // frequency of keyphrase in paragraph
- kp_string += kp + ", "; // ensures that if frequency is 0 for some reason kp is still added
- for (let i = 0; i < frequency - 1; i++) {
- kp_string += kp + ", "; // weights repeated keywords higher
- }
- // replaces highKP with new one
- if (frequency > high) {
- high = frequency;
- highKP = [kp];
- }
- // appends to current highKP phrase
- else if (frequency === high) {
- highKP.push(kp);
- }
- // let words = kp.split(" "); // separates phrase into words
- // words = this.removeStopWords(words); // removes stop words if they appear in phrases
- // words.forEach((word) => {
- // for (let i = 0; i < frequency; i++) {
- // keyterms_counted.push(word);
- // }
- // });
+
+ if (isImage) {
+ kp_string = data;
+ if (taglist) {
+ keyterms = taglist;
+ highKP = [taglist[0]];
+ }
+ }
+ else { // text processing
+ results.documents.forEach((doc: any) => {
+ let keyPhrases = doc.keyPhrases;
+ keyPhrases.map((kp: string) => {
+ keyterms.push(kp);
+ const frequency = this.countFrequencies(kp, data); // frequency of keyphrase in paragraph
+ kp_string += kp + ", "; // ensures that if frequency is 0 for some reason kp is still added
+ for (let i = 0; i < frequency - 1; i++) {
+ kp_string += kp + ", "; // weights repeated keywords higher
+ }
+ // replaces highKP with new one
+ if (frequency > high) {
+ high = frequency;
+ highKP = [kp];
+ }
+ // appends to current highKP phrase
+ else if (frequency === high) {
+ highKP.push(kp);
+ }
+ });
});
- });
- // const kts_counted = new List<string>();
- // keyterms_counted.forEach(kt => kts_counted.push(kt.toLowerCase()));
+ }
if (kp_string.length > 2) kp_string = kp_string.substring(0, kp_string.length - 2);
console.log("kp string: ", kp_string);
let values = "";
diff --git a/src/client/cognitive_services/CognitiveServices.ts b/src/client/cognitive_services/CognitiveServices.ts
index b0e9138a4..d496b442e 100644
--- a/src/client/cognitive_services/CognitiveServices.ts
+++ b/src/client/cognitive_services/CognitiveServices.ts
@@ -9,6 +9,7 @@ import { UndoManager } from "../util/UndoManager";
import requestPromise = require("request-promise");
import { List } from "../../new_fields/List";
import { ClientRecommender } from "../ClientRecommender";
+import { ImageBox } from "../views/nodes/ImageBox";
type APIManager<D> = { converter: BodyConverter<D>, requester: RequestExecutor };
type RequestExecutor = (apiKey: string, body: string, service: Service) => Promise<string>;
@@ -288,12 +289,12 @@ export namespace CognitiveServices {
);
}
- export const analyzer = async (dataDoc: Doc, target: Doc, keys: string[], data: string, converter: TextConverter, isMainDoc: boolean = false, internal: boolean = true) => {
+ export const analyzer = async (dataDoc: Doc, target: Doc, keys: string[], data: string, converter: TextConverter, isMainDoc: boolean = false, isInternal: boolean = true) => {
let results = await ExecuteQuery(Service.Text, Manager, data);
console.log(results);
let { keyterms, external_recommendations, kp_string } = await converter(results, data);
target[keys[0]] = keyterms;
- if (internal) {
+ if (isInternal) {
//await vectorize([data], dataDoc, isMainDoc);
await vectorize(kp_string, dataDoc, isMainDoc);
} else {
diff --git a/src/client/views/RecommendationsBox.tsx b/src/client/views/RecommendationsBox.tsx
index 3938a8690..c50550bef 100644
--- a/src/client/views/RecommendationsBox.tsx
+++ b/src/client/views/RecommendationsBox.tsx
@@ -143,7 +143,7 @@ export class RecommendationsBox extends React.Component<FieldViewProps> {
// return y;
// }
- render() {
+ render() { //TODO: Invariant violation: max depth exceeded error. Occurs when images are rendered.
// if (!this._display) {
// return null;
// }