summaryrefslogtreecommitdiff
path: root/javascript/keygen.js
diff options
context:
space:
mode:
authorGeo Halkiadakis <gchalkiadakis@sklavenitis.co.gr>2023-04-13 17:34:02 +0300
committerGeo Halkiadakis <gchalkiadakis@sklavenitis.co.gr>2023-04-13 17:34:02 +0300
commit883edd61fe0f375ef3e6d86cbac5ea99cdf7d752 (patch)
tree2e43d11792447f632c8e8413f23a2fd68d089820 /javascript/keygen.js
parentf9075f302929fd81f63ba48adcc3c596bf8376b4 (diff)
downloadlinkeysearch-883edd61fe0f375ef3e6d86cbac5ea99cdf7d752.tar.gz
linkeysearch-883edd61fe0f375ef3e6d86cbac5ea99cdf7d752.tar.bz2
linkeysearch-883edd61fe0f375ef3e6d86cbac5ea99cdf7d752.zip
patches for keygan; patches shall be absorbed into the main proccedure (work in progress)
Diffstat (limited to 'javascript/keygen.js')
-rw-r--r--javascript/keygen.js187
1 files changed, 99 insertions, 88 deletions
diff --git a/javascript/keygen.js b/javascript/keygen.js
index 2349901..5d1b1cf 100644
--- a/javascript/keygen.js
+++ b/javascript/keygen.js
@@ -114,7 +114,7 @@ function keyboardize(str) {
-/** sanitize_EL
+/** sanitize_GR
* -----------------------------------------------------------------------------
* replaces greek accended vowels with non accended ones
* takes care of sigma on the end of words
@@ -154,7 +154,7 @@ function sanitize_GR(str) {
str = str.replaceAll('σ-', 'ς-');
str = str.replaceAll('σ ', 'ς ');
- return str.trim();
+ return str;
}
@@ -199,30 +199,35 @@ var synonyms_Originals = [
'ΚΑΪΔΑΝΤΖΗΣ ΚΑΪΔΑΝΤΖΗ',
'ΥΦΑΝΤΗΣ ΥΦΑΝΤΗ',
'ΣΥΝΑΓΡΙΔΑ ΣΥΝΑΓΡΙΔΕΣ',
- 'Ντομάτα Ντομάτας',
+ 'Ντομάτα Ντομάτας Τομάτα',
'Ελαφρύ Ελαφρά Light',
'Εγχώρια Εγχώριες Ελληνικό Ελληνική Ελληνικά',
- 'τριμμένη τριμμένο',
+ 'τριμμένη τριμμένο τριμμένα',
'Τόνος Τόνου',
'Κριθαρένια κρίθινα',
'Χωρίς-Kαφεϊνη Decaffeine',
'Το-Μάννα Μάννα',
'Κράνμπερι Κράνμπερις',
- 'Κρήτης Κρητικό',
+ 'Κρήτης Κρητικό Κρητική',
'Πέννες Πένες',
+ 'σοκολατένιος σοκολατένια σοκολατένιο',
'Μακαρόνια Ζυμαρικά Σπαγγέτι Σπαγγετίνι Σπαγγετόνι',
'Καρτέλλα Καρτέλα Καρτέλλες'
]
synonyms_Originals.forEach( grp => {
// remove accends so any replaces can be done flawlessly
- grp = sanitize_GR(grp);
+ grp = sanitize_GR(grp).trim();
+
+ // push it to array of synonyms (in lowerCase);
+ synonyms.push( grp.toLowerCase().split(' ') );
- // create array of synonyms;
- // push it to sanitized and keyboardized arrays
- synonyms.push( grp.split(' ') );
- synonym_kbs.push( keyboardize(grp).split(' ') );
+ // push it the keyboardized array of synonyms
+ synonym_kbs.push( keyboardize(grp).toLowerCase().split(' ') );
})
+// console.log(synonyms); process.exit();
+// console.log(synonym_kbs); process.exit();
+
// significant terms ///////////////////////////////////////////////////////////
// -----------------------------------------------------------------------------
@@ -240,69 +245,74 @@ significantExceptios = sanitize_GR('7-UP 3-ΑΛΦΑ 17 3Π 7-DAYS K2R').split('
// --- -- -- - - -
replaces = [];
replaceSource = [
- '3 ΑΛΦΑ ;3-ΑΛΦΑ ',
- 'HEAD & SHOULDERS ;HEAD&SHOULDERS ',
- 'HEAD N SHOULDERS ;HEAD&SHOULDERS ',
- 'W.K Kellogg ; W-K-Kellogg ',
- 'W.K Kellogg ; ',
- '7 DAYS ;7-DAYS ',
- '7 UP ;7-UP ',
- 'ΜΠΑΡΜΠΑ ΣΤΑΘΗ ;ΜΠΑΡΜΠΑ-ΣΤΑΘΗΣ ',
- 'ΜΠΑΡΜΠΑ ΣΤΑΘΗΣ ;ΜΠΑΡΜΠΑ-ΣΤΑΘΗΣ ',
- 'COCA COLA ;COCA-COLA',
- 'COCACOLA ;COCA-COLA',
- 'KELLOGS ;KELLOGG\'S',
- 'NES CAFE ;NESCAFE',
- 'NES-CAFE ;NESCAFE',
- 'LE PETIT MARSEILLAIS ;LE-PETIT-MARSEILLAIS',
- 'PETIT MARSEILLAIS ;PETIT-MARSEILLAIS',
- 'Το Μάννα ;Το-Μάννα',
- 'Χωρίς Γλουτένη ;Χωρίς-Γλουτένη',
- 'Χωρίς Ζάχαρη ;Χωρίς-Ζάχαρη',
- 'Χωρίς Αλάτι ;Χωρίς-Αλάτι',
- 'Χωρίς Λακτόζη ;Χωρίς-Λακτόζη',
- 'Χωρίς Συντηρητικά ;Χωρίς-Συντηρητικά',
- 'Χωρίς Αλκοόλ ;Χωρίς-Αλκοόλ',
- 'Χωρίς Kαφεϊνη ;Χωρίς-Kαφεϊνη',
- 'Χωρίς Γλυκάνισο ;Χωρίς-Γλυκάνισο',
- 'Χωρίς Ανθρακικό ;Χωρίς-Ανθρακικό',
- 'Υψηλής Παστερίωσης ;Υψηλής-Παστερίωσης',
- 'Ολικής Άλεσης ;Ολικής-Άλεσης',
- 'Ολικής Aλέσεως ;Ολικής-Aλέσεως',
- 'Χαρτί Υγείας ;Χαρτί-Υγείας',
- 'ρολό υγείας ;ρολό-υγείας',
- 'χαρτί τουαλέτας ;χαρτί-τουαλέτας',
- 'Χαρτί Κουζίνας ;Χαρτί-Κουζίνας',
- 'ρολό κουζίνας ;ρολό-κουζίνας',
- 'Μπάρες Δημητριακών ;Μπάρες-Δημητριακών',
- 'Aς Μαγειρέψουμε ;Aς-Μαγειρέψουμε',
- 'ΚΡΙΣ ΚΡΙΣ ;ΚΡΙΣ-ΚΡΙΣ',
- 'ΚΡΙΣΚΡΙΣ ;ΚΡΙΣ-ΚΡΙΣ',
- 'ΚΡΙ ΚΡΙ ;ΚΡΙ-ΚΡΙ',
- 'ΚΡΙΚΡΙ ;ΚΡΙ-ΚΡΙ',
- 'ΕΛ ΓΚΡΕΚΟ ;ΕΛ-ΓΚΡΕΚΟ',
- 'ΕΛΓΚΡΕΚΟ ;ΕΛ-ΓΚΡΕΚΟ',
- 'FREE STEP ;FREE-STEP',
- 'EL SABOR ;EL-SABOR',
- 'ELSABOR ;EL-SABOR',
- 'DOUWE EGBERTS ;DOUWE-EGBERTS',
- 'ΕΝ ΕΛΛΑΔΙ ;ΕΝ-ΕΛΛΑΔΙ',
- 'ΕΝΕΛΛΑΔΙ ;ΕΝ-ΕΛΛΑΔΙ',
- 'SPIN SPAN ;SPIN-SPAN',
- 'SPINSPAN ;SPIN-SPAN',
- 'CRETA-FARMS ;CRETA-FARM',
- 'CRETA-FARM ;CRETA-FARM',
- 'CRETAFARM ;CRETA-FARM',
- 'Ολες-τις-Χρήσεις ;Ολες-τις-Χρήσεις',
- 'Χωρίς προσθήκη ζάχαρης ;Χωρίς-ζάχαρη'
+ '3 ΑΛΦΑ;3-ΑΛΦΑ',
+ 'HEAD & SHOULDERS;HEAD&SHOULDERS',
+ 'HEAD N SHOULDERS;HEAD&SHOULDERS',
+ 'W.K Kellogg; W-K-Kellogg',
+ 'W.K Kellogg;',
+ '7 DAYS;7-DAYS',
+ '7 UP;7-UP',
+ 'ΜΠΑΡΜΠΑ ΣΤΑΘΗ;ΜΠΑΡΜΠΑ-ΣΤΑΘΗΣ',
+ 'ΜΠΑΡΜΠΑ ΣΤΑΘΗΣ;ΜΠΑΡΜΠΑ-ΣΤΑΘΗΣ',
+ 'COCA COLA;COCA-COLA',
+ 'COCACOLA;COCA-COLA',
+ // 'KELLOGS;KELLOGG\'S',
+ 'NES CAFE;NESCAFE',
+ 'NES-CAFE;NESCAFE',
+ 'LE PETIT MARSEILLAIS;LE-PETIT-MARSEILLAIS',
+ 'PETIT MARSEILLAIS;PETIT-MARSEILLAIS',
+ 'Το Μάννα;Το-Μάννα',
+ 'Χωρίς Γλουτένη;Χωρίς-Γλουτένη',
+ 'Χωρίς Ζάχαρη;Χωρίς-Ζάχαρη',
+ 'Χωρίς Αλάτι;Χωρίς-Αλάτι',
+ 'Χωρίς Λακτόζη;Χωρίς-Λακτόζη',
+ 'Χωρίς Συντηρητικά;Χωρίς-Συντηρητικά',
+ 'Χωρίς Αλκοόλ;Χωρίς-Αλκοόλ',
+ 'Χωρίς Kαφεϊνη;Χωρίς-Kαφεϊνη',
+ 'Χωρίς Γλυκάνισο;Χωρίς-Γλυκάνισο',
+ 'Χωρίς Ανθρακικό;Χωρίς-Ανθρακικό',
+ 'Υψηλής Παστερίωσης;Υψηλής-Παστερίωσης',
+ 'Ολικής Άλεσης;Ολικής-Άλεσης',
+ 'Ολικής Aλέσεως;Ολικής-Aλέσεως',
+ 'Χαρτί Υγείας;Χαρτί-Υγείας',
+ 'ρολό υγείας;ρολό-υγείας',
+ 'χαρτί τουαλέτας;χαρτί-τουαλέτας',
+ 'Χαρτί Κουζίνας;Χαρτί-Κουζίνας',
+ 'ρολό κουζίνας;ρολό-κουζίνας',
+ 'Μπάρες Δημητριακών;Μπάρες-Δημητριακών',
+ 'Ας Μαγειρέψουμε;Ας-Μαγειρέψουμε',
+ 'ΚΡΙΣ ΚΡΙΣ;ΚΡΙΣ-ΚΡΙΣ',
+ 'ΚΡΙΣΚΡΙΣ;ΚΡΙΣ-ΚΡΙΣ',
+ 'ΚΡΙ ΚΡΙ;ΚΡΙ-ΚΡΙ',
+ 'ΚΡΙΚΡΙ;ΚΡΙ-ΚΡΙ',
+ 'ΕΛ ΓΚΡΕΚΟ;ΕΛ-ΓΚΡΕΚΟ',
+ 'ΕΛΓΚΡΕΚΟ;ΕΛ-ΓΚΡΕΚΟ',
+ 'FREE STEP;FREE-STEP',
+ 'EL SABOR;EL-SABOR',
+ 'ELSABOR;EL-SABOR',
+ 'DOUWE EGBERTS;DOUWE-EGBERTS',
+ 'ΕΝ ΕΛΛΑΔΙ;ΕΝ-ΕΛΛΑΔΙ',
+ 'ΕΝΕΛΛΑΔΙ;ΕΝ-ΕΛΛΑΔΙ',
+ 'SPIN SPAN;SPIN-SPAN',
+ 'SPINSPAN;SPIN-SPAN',
+ 'CRETA-FARMS;CRETA-FARM',
+ 'CRETA-FARM;CRETA-FARM',
+ 'CRETAFARM;CRETA-FARM',
+ 'Ολες-τις-Χρήσεις;Ολες-τις-Χρήσεις',
+ 'Χωρίς προσθήκη ζάχαρης;Χωρίς-ζάχαρη'
];
replaceSource.forEach( it => {
st = sanitize_GR(
- it
+ it.toLowerCase()
).split(';');
- replaces.push({ src: st[0], trg: st[1] });
+ replaces.push({
+ src: ' '+ st[0] +' ', // encolse between spaces
+ trg: ' '+ st[1] +' ' // to separate from before/after words
+ });
});
+// console.log(replaces); process.exit();
+
// words that shall not be searched first //////////////////////////////////////
// -----------------------------------------------------------------------------
@@ -474,17 +484,20 @@ function extract_linked_keywords(obj) {
if (rec.img != 0) {
- var description = preproccess_text(rec.txt);
+ //var description = preproccess_text(rec.txt);
+
+ var description = clean_text(rec.txt);
+
var pid = rec.eys;
var fq = freq_of(pid)+1;
prods_.push({
id: pid,
- w: description
+ w: description.trim()
})
var keys = [];
- var words = description.split(' ');
+ var words = preproccess_text(description).split(' ');
// filter words; keep only significant
words.forEach( w => {
@@ -607,7 +620,7 @@ function connect_keys( a, b, id, f ) {
w : b,
kb : kbB,
f : f,
- p : [ i ]
+ p : [ id ]
});
}
return true;
@@ -624,13 +637,13 @@ function connect_keys( a, b, id, f ) {
/** clean text
* --- -- -- - - -
- * removes non keyword characters [\+, \., \'] and internal multiple-spaces
+ * removes non keyword characters [+ . , !] and internal multiple-spaces
* @param txt (string): product description
*/
function clean_text(txt) {
- return sanitize_GR(txt).replace('+',' ').replace('.',' ')
- .replace(' ',' ')
- .replace(' ',' ');
+ return txt.replace('+',' ').replace('.',' ').replace(',',' ') // change to space
+ .replace('!','').replace('\"', '') // remove character
+ .replace(' ',' ').replace(' ',' '); // remove multiple spaces
}
@@ -662,7 +675,7 @@ function is_significant(str) {
function synonym_keys(w) {
w_kb = keyboardize(w);
for (i=0 ; i < synonym_kbs.length ; i++) {
- if (synonym_kbs.indexOf(w_kb) !== -1)
+ if (synonym_kbs[i].indexOf(w_kb) !== -1)
return synonyms[i];
}
return [ w ];
@@ -682,24 +695,24 @@ function synonym_keys(w) {
// edit common mistakes
// with suggested replaces
function mark_explicit_links(str) {
-
- replaces.forEach( it => { str = str.replace(it.src, it.trg); });
- return str;
+ str = ' '+ str +' ';
+ replaces.forEach( it => { str = str.replaceAll(it.src, it.trg); });
+ return str.replaceAll(' ', ' ').trim();
}
// preproccess description
// ---
-function preproccess_text(str) {
+function preproccess_text(description) {
- str = clean_text(str); // remove non-keyword characters
+ str = clean_text(description); // remove non-keyword characters
- str = mark_explicit_links(sanitize_GR(str)); // mark explicit links
+ str = mark_explicit_links(sanitize_GR( str.toLowerCase() )); // mark explicit links
- replaces.forEach( lw => {
- reg = new RegExp( lw.src, "gi"); // prepare regex for case insensitive (i) replace all (g)
- str = str.toLowerCase().replace(reg, lw.trg);
- })
+ // replaces.forEach( lw => {
+ // reg = new RegExp( lw.src, "gi"); // prepare regex for case insensitive (i) replace all (g)
+ // str = str.toLowerCase().replace(reg, lw.trg);
+ // })
// depricated: str = mark_linked_words(str);
return str;
}
@@ -792,8 +805,6 @@ async function upload_file( bucketName, srcFilePath, trgFilePath ) {
-
-
/** #5
* ---
* MAIN function (exposed function to run the whole proccess)