aboutsummaryrefslogtreecommitdiff
path: root/src/client/ClientRecommender.tsx
diff options
context:
space:
mode:
Diffstat (limited to 'src/client/ClientRecommender.tsx')
-rw-r--r--src/client/ClientRecommender.tsx39
1 files changed, 21 insertions, 18 deletions
diff --git a/src/client/ClientRecommender.tsx b/src/client/ClientRecommender.tsx
index 0e344dae9..217c89297 100644
--- a/src/client/ClientRecommender.tsx
+++ b/src/client/ClientRecommender.tsx
@@ -16,6 +16,12 @@ export interface RecommenderProps {
title: string;
}
+/**
+ * actualDoc: datadoc
+ * vectorDoc: mean vector of text
+ * score: similarity score to main doc
+ */
+
export interface RecommenderDocument {
actualDoc: Doc;
vectorDoc: number[];
@@ -28,6 +34,8 @@ export class ClientRecommender extends React.Component<RecommenderProps> {
static Instance: ClientRecommender;
private mainDoc?: RecommenderDocument;
private docVectors: Set<RecommenderDocument> = new Set();
+ private highKP: string[] = [];
+
@observable private corr_matrix = [[0, 0], [0, 0]];
constructor(props: RecommenderProps) {
@@ -45,10 +53,6 @@ export class ClientRecommender extends React.Component<RecommenderProps> {
ClientRecommender.Instance.corr_matrix = [[0, 0], [0, 0]];
}
- public deleteDocs() {
- console.log("deleting previews...");
- }
-
/***
* Computes the cosine similarity between two vectors in Euclidean space.
*/
@@ -82,6 +86,10 @@ export class ClientRecommender extends React.Component<RecommenderProps> {
}
}
+ /**
+ * Returns list of {doc, similarity (to main doc)} in increasing score
+ */
+
public computeSimilarities() {
ClientRecommender.Instance.docVectors.forEach((doc: RecommenderDocument) => {
if (ClientRecommender.Instance.mainDoc) {
@@ -127,14 +135,14 @@ export class ClientRecommender extends React.Component<RecommenderProps> {
* Uses Cognitive Services to extract keywords from a document
*/
- public async extractText(dataDoc: Doc, extDoc: Doc, mainDoc: boolean = false) {
+ public async extractText(dataDoc: Doc, extDoc: Doc, internal: boolean = true, mainDoc: boolean = false) {
let fielddata = Cast(dataDoc.data, RichTextField);
let data: string;
fielddata ? data = fielddata[ToPlainText]() : data = "";
let converter = (results: any, data: string) => {
- let keyterms = new List<string>();
- let keyterms_counted = new List<string>();
- let highKP: string[] = [""];
+ let keyterms = new List<string>(); // raw keywords
+ let keyterms_counted = new List<string>(); // keywords, where each keyword is repeated as
+ let highKP: string[] = [""]; // most frequent
let high = 0;
results.documents.forEach((doc: any) => {
let keyPhrases = doc.keyPhrases;
@@ -143,13 +151,12 @@ export class ClientRecommender extends React.Component<RecommenderProps> {
if (frequency > high) {
high = frequency;
highKP = [kp];
-
}
else if (frequency === high) {
highKP.push(kp);
}
let words = kp.split(" "); // separates phrase into words
- words = this.removeStopWords(words);
+ words = this.removeStopWords(words); // removes stop words if they appear in phrases
words.forEach((word) => {
keyterms.push(word);
for (let i = 0; i < frequency; i++) {
@@ -158,16 +165,12 @@ export class ClientRecommender extends React.Component<RecommenderProps> {
});
});
});
+ this.highKP = highKP;
console.log(highKP);
this.sendRequest(highKP);
return { keyterms: keyterms, keyterms_counted: keyterms_counted };
};
- await CognitiveServices.Text.Appliers.analyzer(dataDoc, extDoc, ["key words"], data, converter, mainDoc);
- }
-
- private findImportantKPs(keyterms_counted: string[], paragraph: string) {
- let imporantSet = new Set<string>();
-
+ await CognitiveServices.Text.Appliers.analyzer(dataDoc, extDoc, ["key words"], data, converter, mainDoc, internal);
}
private countFrequencies(keyphrase: string, paragraph: string) {
@@ -180,7 +183,7 @@ export class ClientRecommender extends React.Component<RecommenderProps> {
// console.log("Keyphrases:", kp_array);
for (let i = 0; i <= par_length - num_keywords; i++) {
const window = data.slice(i, i + num_keywords);
- if (JSON.stringify(window) === JSON.stringify(kp_array)) {
+ if (JSON.stringify(window).toLowerCase() === JSON.stringify(kp_array).toLowerCase() || kp_array.every(val => window.includes(val))) {
frequency++;
}
}
@@ -194,7 +197,7 @@ export class ClientRecommender extends React.Component<RecommenderProps> {
private async sendRequest(keywords: string[]) {
let query = "";
- keywords.forEach((kp: string) => query += kp);
+ keywords.forEach((kp: string) => query += " " + kp);
await this.arxivrequest(query);
}