diff options
| author | Owen <despito@MacBook-Pro-de-Despito.local> | 2014-08-01 19:18:02 +0300 |
|---|---|---|
| committer | Owen <despito@MacBook-Pro-de-Despito.local> | 2014-08-01 19:18:02 +0300 |
| commit | 731f9e7d362c95f07edfb672c24688b30cc95a15 (patch) | |
| tree | c77fcfc9a815a59e3174f1cfb66777fdcb0159e2 /scripts/textanalysis.js | |
| parent | e6e8f5fa56826b709142d623ce0689889673c1f1 (diff) | |
BetterAnalysis+Suggestions+TypeSelection
AND cases are managed better
small graph bugs resolved
Typeselection works just as before now
New nodes added to suggestion box
Previous phrases added to suggestion box
Diffstat (limited to 'scripts/textanalysis.js')
| -rw-r--r-- | scripts/textanalysis.js | 458 |
1 files changed, 163 insertions, 295 deletions
diff --git a/scripts/textanalysis.js b/scripts/textanalysis.js index 31e6cd43..49fb671d 100644 --- a/scripts/textanalysis.js +++ b/scripts/textanalysis.js @@ -1,14 +1,12 @@ var text = ""; -var opened = false; var sugg = ["AJAX", "Neo4J", "Rhizi", "Research", "CRI", "SageBionetworks", "Hero.coli", "CSS", "NodeJS", "HTML5", "Angular", "D3", "ProofOfConcept", "Graphs", "CloudComputing", "BigData", "ProblemSolving", "PHP", "Javascript", "BackBone", "Cooperation", "SemanticWeb"]; var typeindex = 0; var names = ["Jean-ChristopheThalabard", "MaévaVignes", "AbdelElAbed", "ValérieTaly", "SébastienDutreuil", "AntoineBERGEL", "AntoineAngot", "JérômeFeret", "CharlèneGayrard", "HugoJimenezPerez", "CaterinaUrban", "GaëlleChevalon", "IanMarcus", "AntoineTALY", "ChantalLOTTON", "Ana-MariaLennon-Duménil", "FrédériqueCarlier-Grynkorn", "PascalMartin", "TamaraMilosevic", "NicolasCarpi", "StéphaneDaoudy", "DanijelaMaticVignjevic", "EugenioCinquemani", "VincentDAHIREL", "MartinLenz", "MaïlysChassagne", "AnneSchmidt", "SophieSacquinMora", "Richard-EmmanuelEastes", "MichelMorange", "EwaZlotek-Zlotkiewicz", "A.m.o.d.s.e.nC.h.o.t.i.a", "AlexandreVaugoux", "AnnemiekJMCornelissen", "ClémentNizak", "AntoineFrenoy", "ArielB.Lindner", "BenjaminBrogniart", "ChristopheZimmer", "ClaireRibrault", "DavidTareste", "DenisLafeuille", "DorGarbash", "DusanMISEVIC", "EddaNitschke", "FrançoisTaddei", "GregoryBatt", "JeanLucLebrun", "JesseHimmelstein", "KevinLhoste", "LauraCiriani", "LivioRiboli-Sasco", "NathalieSussfeld", "JakeEdwinWintermute", "MarlyneNogbou", "MatthieuPiel", "PascalHersen", "Pierre-YvesBourguignon", "TimoBetz", "RaphaëlGoujet", "StéphaneDebove", "VincentDanos", "TamKienDuong"]; var nodetypes = ["person", "project", "skill", "deliverable", "objective"]; -var previousorder = "NOTHING"; -var nodecounter = 0; -var nodereplaced = false; -var newlink = ""; +var sentenceStack = []; +var nodeindex, linkindex; +var typeStack = []; var ExecutionStack = []; @@ -20,43 +18,43 @@ $('#textanalyser').autocompleteTrigger({ source: sugg }); -$('#textanalyser').submit(function () { +$('#textanalyser').submit(function() { //finalize text input, empty - text=$('#textanalyser').val(); + text = $('#textanalyser').val(); $('#textanalyser').val(""); - TextAnalyser2(text,true); + TextAnalyser2(text, true); + typeStack=[]; return false; }); -$(document).keydown(function (e) { +$(document).keydown(function(e) { //RIGHT - if (e.keyCode == 37 ) { + if (e.keyCode == 37) { e.preventDefault(); - changeType("up",lastnode); + changeType("up", lastnode); return false; } - //LEFT - if (e.keyCode == 39 ) { + if (e.keyCode == 39) { e.preventDefault(); - changeType("down",lastnode); + changeType("down", lastnode); return false; } - if (e.keyCode == 13) { - text=$('#textanalyser').val(); + text = $('#textanalyser').val(); $('#textanalyser').val(""); - TextAnalyser2(text,true); + TextAnalyser2(text, true); + typeStack=[]; return false; } }); -function changeType(arg,id) { +function changeType(arg, id) { if (arg === 'up') { if (typeindex < 4) typeindex++; else typeindex = 0; @@ -74,343 +72,213 @@ function changeType(arg,id) { graph.updateGraph(); } - - - -window.setInterval(function () { +window.setInterval(function() { if ($('#textanalyser').val() != text) { $('.typeselection').css('top', -300); $('.typeselection').css('left', 0); // text changed text = $('#textanalyser').val(); - TextAnalyser2(text,false); - + TextAnalyser2(text, false); } }, 5); - - - - -var sentenceStack = []; -var nodeindex,linkindex; - -function TextAnalyser2(newtext,finalize) { - var states = ["NOTHING", "NEWNODE", "EDITNODE", "CLOSENODE", "NEWLINK", "EDITLINK" , "SPECIAL" , "QUARTET"]; - var segment = [], subsegment = [], sentence = []; - var newlinks=[];linkindex=0; - var newnodes=[];nodeindex=0; +function TextAnalyser2(newtext, finalize) { + var states = ["NOTHING", "NEWNODE", "EDITNODE", "CLOSENODE", "NEWLINK", "EDITLINK", "SPECIAL", "QUARTET"]; + var segment = [], + subsegment = [], + sentence = []; + var newlinks = []; + var newnodes = []; + linkindex = 0; + nodeindex = 0; var orderStack = []; - var quoteword=""; - var ANDcase=false; - var prefix=""; + var quoteword = ""; + var ANDcase = false; + var ANDcount = 0; + var prefix = ""; //Sentence Sequencing //Build the words and cuts the main elements - segment=newtext.split("#"); - for(var j=0;j<segment.length;j++){ - if(j!==0)sentence.push("#"); - subsegment=segment[j].split(" "); - if(subsegment.length===0){ + segment = newtext.split("#"); + for (var j = 0; j < segment.length; j++) { + if (j !== 0) sentence.push("#"); + subsegment = segment[j].split(" "); + if (subsegment.length === 0) { sentence.push(" "); } - for(var k=0;k<subsegment.length;k++){ - if(subsegment[k]!==" " && subsegment[k]!==""){ - if(subsegment[k].charAt(0)==='"'){ - quoteword=""; - do{ - quoteword+=subsegment[k]+" "; + for (var k = 0; k < subsegment.length; k++) { + if (subsegment[k] !== " " && subsegment[k] !== "") { + if (subsegment[k].charAt(0) === '"') { + quoteword = ""; + do { + quoteword += subsegment[k] + " "; k++; - }while(k<subsegment.length && subsegment[k].charAt(subsegment[k].length-1)!=='"'); - if(k<subsegment.length)quoteword+=subsegment[k]; + } while (k < subsegment.length && subsegment[k].charAt(subsegment[k].length - 1) !== '"'); + if (k < subsegment.length) quoteword += subsegment[k]; sentence.push(quoteword.replace(/"/g, "")); - }else{ + } else { sentence.push(subsegment[k]); } } } } - - for(var m=0;m<sentence.length;m++){ - switch(sentence[m]){ + + //BUILD NEW NODE AND LINK ARRAYS WITH ORDER OF APPEARENCE + for (var m = 0; m < sentence.length; m++) { + switch (sentence[m]) { case "#": - orderStack.push("START"); - break; - case "and": case "+": case ",": - //orderStack.push("AND"); + orderStack.push("START"); + break; + case "and": + case "+": + case ",": + sentence[m]=" and "; + ANDcount++; + //orderStack.push("AND"); default: - if(orderStack[orderStack.length-1]==="START"){ - orderStack.push("NODE"); - newnodes.push(sentence[m]); - linkindex++; - }else if(orderStack[orderStack.length-1]==="NODE"){ - orderStack.push("LINK"); - - if(!newlinks[linkindex]){newlinks[linkindex]=sentence[m]+" "; } - else{ newlinks[linkindex]+=sentence[m]+" ";} - }else{ - if(!newlinks[linkindex]){newlinks[linkindex]=sentence[m]+" "; } - else{ newlinks[linkindex]+=sentence[m]+" ";} - } - if(newnodes.length===0)prefix+=sentence[m]+" "; - break; + if (orderStack[orderStack.length - 1] === "START") { + orderStack.push("NODE"); + newnodes.push(sentence[m]); + linkindex++; + } else if (orderStack[orderStack.length - 1] === "NODE") { + orderStack.push("LINK"); + if (!newlinks[linkindex]) { + newlinks[linkindex] = sentence[m] + " "; + } else { + newlinks[linkindex] += sentence[m] + " "; + } + } else { + if (!newlinks[linkindex]) { + newlinks[linkindex] = sentence[m] + " "; + } else { + newlinks[linkindex] += sentence[m] + " "; + } + } + if (newnodes.length === 0) prefix += sentence[m] + " "; + break; } } - if(prefix)newlinks[1]+="("+prefix+")"; + + //ATTACH SENTENCE PREFIX + if (prefix) newlinks[1] += "(" + prefix + ")"; //WRITE COMPLETE SENTENCE - linkindex=0; - nodeindex=0; - var word=""; - var completeSentence=""; - for(var m=0; m<orderStack.length;m++){ - if(orderStack[m]==="NODE"){ - word+=" ("+newnodes[nodeindex]+") "; - completeSentence+=newnodes[nodeindex]+" "; + linkindex = 0; + nodeindex = 0; + var word = ""; + var completeSentence = ""; + for (var m = 0; m < orderStack.length; m++) { + if (orderStack[m] === "NODE") { + word += " (" + newnodes[nodeindex] + ") "; + completeSentence += newnodes[nodeindex] + " "; nodeindex++; - }else if(orderStack[m]==="LINK"){ + } else if (orderStack[m] === "LINK") { linkindex++; - word+=" -->"+newlinks[linkindex]+" --> "; - completeSentence+=newlinks[linkindex]; + word += " -->" + newlinks[linkindex] + " --> "; + completeSentence += newlinks[linkindex]; } } //REBUILD GRAPH - linkindex=0; - nodeindex=0; + linkindex = 0; + nodeindex = 0; - var typesetter=""; - if(finalize===false)typesetter="temp"; - else typesetter="perm"; + //CHANGE TO PERMANENT STATE AND UPDATE SUGGESTIONLIST + var typesetter = ""; + if (finalize === true) { + typesetter = "perm"; + for (var n = 0; n < newnodes.length; n++) { + if (Unique(newnodes[n])) { + sugg.push(newnodes[n]); + } + } + sugg.push(text); + } else { + typesetter = "temp"; + } + //REINITIALISE GRAPH (DUMB BUT IT WORKS) graph.removeNodes("temp"); graph.removeLinks("temp"); - if(orderStack.length>0)graph.addNode("","bubble","temp"); + //ADD SURROUNDING BUBBLE + if (orderStack.length > 0) graph.addNode("", "bubble", "temp"); + + var abnormalGraph=false; + if(newlinks.length >= 4 && ANDcount<2 )abnormalGraph=true; + //0-N ORDER STACK - for(var m=0; m<orderStack.length-1;m++){ - switch(orderStack[m]){ - case "NODE": - graph.addNode(newnodes[nodeindex],nodetypes[typeindex],typesetter); - if(newnodes.length<4)graph.addLink(newnodes[nodeindex-1],newnodes[nodeindex],newlinks[linkindex],typesetter); - ANDcase=ANDconnect(newnodes[nodeindex]); - nodeindex++; - break; - case "LINK": - linkindex++; - break; + for (var m = 0; m < orderStack.length - 1; m++) { + switch (orderStack[m]) { + case "NODE": + graph.addNode(newnodes[nodeindex], typeStack[nodeindex], typesetter); + if (!abnormalGraph) graph.addLink(newnodes[nodeindex - 1], newnodes[nodeindex], newlinks[linkindex], typesetter); + ANDcase = ANDconnect(newnodes[nodeindex]); + nodeindex++; + break; + case "LINK": + linkindex++; + break; } } //FINAL N ORDER - switch(orderStack[orderStack.length-1]){ + switch (orderStack[orderStack.length - 1]) { case "START": - graph.addNode("new node",nodetypes[typeindex],typesetter); - if(newnodes.length<4)graph.addLink(newnodes[nodeindex-1],"new node",newlinks[linkindex],typesetter); - ANDcase=ANDconnect("new node"); - break; + typeStack[nodeindex]=nodetypes[typeindex]; + graph.addNode("new node", typeStack[nodeindex], "temp"); + if (!abnormalGraph) graph.addLink(newnodes[nodeindex - 1], "new node", newlinks[linkindex], "temp"); + ANDcase = ANDconnect("new node"); + break; case "NODE": - graph.addNode(newnodes[nodeindex],nodetypes[typeindex],typesetter); - if(newnodes.length<4)graph.addLink(newnodes[nodeindex-1],newnodes[nodeindex],newlinks[linkindex],typesetter); - ANDcase=ANDconnect(newnodes[nodeindex]); - break; + typeStack[nodeindex]=nodetypes[typeindex]; + graph.addNode(newnodes[nodeindex], typeStack[nodeindex], typesetter); + if (!abnormalGraph) graph.addLink(newnodes[nodeindex - 1], newnodes[nodeindex], newlinks[linkindex], typesetter); + ANDcase = ANDconnect(newnodes[nodeindex]); + break; case "LINK": linkindex++; - graph.addNode("new node","empty",typesetter); - if(newnodes.length<4)graph.addLink(newnodes[nodeindex-1],"new node",newlinks[linkindex],typesetter); - ANDcase=ANDconnect("new node"); - break; + graph.addNode("new node", "empty", "temp"); + if (!abnormalGraph) graph.addLink(newnodes[nodeindex - 1], "new node", newlinks[linkindex], "temp"); + ANDcase = ANDconnect("new node"); + break; } - function ANDconnect(node){ - if(newlinks[linkindex-1])if(newnodes[nodeindex-2])if(newlinks[linkindex-1].replace(/ /g, "")=="and" && newlinks[linkindex].replace(/ /g, "")!=="and"){ - if(newnodes.length<4)graph.addLink(newnodes[nodeindex-2],node,newlinks[linkindex],typesetter); - return true; - } + //EXTERNAL AND CONNECTION CHECKING + function ANDconnect(node) { + if (newlinks[linkindex - 1]) + if (newnodes[nodeindex - 2]) + if (newlinks[linkindex - 1].replace(/ /g, "") == "and" && newlinks[linkindex].replace(/ /g, "") !== "and") { + if (!abnormalGraph) + if(finalize)graph.addLink(newnodes[nodeindex - 2], node, newlinks[linkindex], typesetter); + else graph.addLink(newnodes[nodeindex - 2], node, newlinks[linkindex], "temp"); + return true; + } } //STAR CASE - var verb=""; - if(newnodes.length>=4){ - for(var l=1;l<newlinks.length;l++){ - if(newlinks[l])if(newlinks[l].replace(/ /g,"")!=="and"){ - verb=newlinks[l]; - } - } - graph.addNode(completeSentence,"chainlink",typesetter); - for(var n=0;n<newnodes.length;n++){graph.addLink(newnodes[n],completeSentence,verb,typesetter);} - } - - lastnode=newnodes[nodeindex]; - //UPDATE GRAPH ONCE - graph.update(); -} -/* - - - - - - - - - -function TextAnalyser(newtext) { - var states = ["NOTHING", "NEWNODE", "EDITNODE", "CLOSENODE", "NEWLINK", "EDITLINK"]; - var order = previousorder; - var nodetype = "new"; - var array = []; - var arraytext = ""; - - var newnode = ""; - var index = newtext.length; - - - array = newtext.match(/([#]\w+)/g); - for (var i = nodecounter - 1; i <= nodecounter; i++) { - if (addednodes[i] !== undefined) newlink = newtext.replace(addednodes[i], ""); - newlink = newlink.replace("#", ""); - } - - - - var lastchar = newtext.charAt(newtext.length - 1); - switch (lastchar) { - case " ": - if (previousorder === "NEWNODE") order = "CLOSENODE"; - if (previousorder === "EDITNODE") order = "CLOSENODE"; - if (previousorder === "NEWLINK") order = "EDITLINK"; - break; - - case "#": - if (previousorder === "NEWNODE") order = "EDITNODE"; - else if (previousorder === "EDITNODE") order = "EDITNODE"; - else order = "NEWNODE"; - break; - - default: - if (previousorder === "NEWNODE") order = "EDITNODE"; - if (previousorder === "CLOSENODE") order = "NEWLINK"; - if (previousorder === "NEWLINK") order = "EDITLINK"; - break; - } - - //console.log(order); - - //ORDER CYCLE - previousorder = order; - var lol = ""; - for (var k = 0; k < addednodes.length; k++) { - lol += k + " " + addednodes[k] + "|"; - } - console.log(lol); - - - //edit words - switch (order) { - case "NOTHING": - newnode = ""; - break; - case "NEWNODE": - newnode = ""; - break; - case "EDITNODE": - do { - newnode = newtext.charAt(index) + newnode; - newnode = newnode.replace(/\s/g, ''); - index--; - } while (newtext.charAt(index) !== "#" && index > 0); - break; - case "CLOSENODE": - do { - newnode = newtext.charAt(index) + newnode; - newnode = newnode.replace(/\s/g, ''); - index--; - } while (newtext.charAt(index) !== "#" && index > 0); - break; - case "NEWLINK": - - newlink = ""; - - break; - case "EDITLINK": - newnode = ""; - break; - } - - - //$('.debug').html("node n "+nodecounter+" state: "+order+" nodename: |"+newnode+ "| link: |"+newlink+"| lastnode: |"+addednodes[nodecounter-2]+"rep: "+nodereplaced); - - - switch (order) { - case states[0]: - window.setTimeout(function () { - $('#textanalyser').css('box-shadow', '0 0 0px #303030') - }, 200); - break; - case states[1]: - - - if (nodecounter % 2 === 0) { - graph.addNode("", nodetypes[typeindex], "temp"); - } else { - graph.addNode("", nodetypes[typeindex], "temp"); - } - graph.editType("x", "temp", nodetypes[typeindex]); - nodecounter++; - break; - case states[2]: - if (nodereplaced === true) { - //graph.removeLink(); - //graph.addLink - graph.addNode(newnode, nodetypes[typeindex], "temp"); - graph.editLinkTarget(addednodes[nodecounter - 2], replacement, newnode); - replacement = ""; - } - nodereplaced = false; - if (AddedUnique(newnode)) { - - } else if (nodecounter % 2 === 0) { - console.log("not unique, replace"); - graph.addLink(addednodes[nodecounter - 2], newnode, newlink, "temp"); - graph.removeNode("x", "temp"); - nodereplaced = true; - replacement = newnode; + var verb = ""; + if (abnormalGraph) { + for (var l = 1; l < newlinks.length; l++) { + if (newlinks[l]) + if (newlinks[l].replace(/ /g, "") !== "and") { + verb = newlinks[l]; + } } - graph.editName("x", "temp", newnode); - graph.findCoordinates("x", "temp"); - break; - case states[3]: - - nodereplaced = false; - graph.editState("x", "temp", "perm"); - addednodes.push(newnode); - if (Unique(newnode)) sugg.push(newnode); - - if (nodecounter % 2 === 0) { - - $('#textanalyser').css('box-shadow', '0 0 30px #FFFF8F'); - $('#textanalyser').val(""); - graph.removeNode("x", "temp"); - previousorder = states[0]; - newnode = ""; + graph.addNode(completeSentence, "chainlink", typesetter); + for (var n = 0; n < newnodes.length; n++) { + graph.addLink(newnodes[n], completeSentence, verb, typesetter); } - break; - case states[4]: - graph.addNode("", "empty", "temp"); - graph.addLink(addednodes[nodecounter - 1], "", newlink, "perm"); - break; - case states[5]: - graph.editLink(addednodes[nodecounter - 1], "", newlink); - break; } + //FOR THE EXTERNAL ARROW-TYPE CHANGER + lastnode = newnodes[nodeindex]; - + //UPDATE GRAPH ONCE + graph.update(); } -*/ function Unique(newnode) { |
