diff options
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) { |
