w2v-server: untabify
diff --git a/templates/index.html.ep b/templates/index.html.ep
index da66918..709b99c 100644
--- a/templates/index.html.ep
+++ b/templates/index.html.ep
@@ -1,482 +1,482 @@
<!DOCTYPE html>
<html>
<head>
- <title>DeReKo-Word-Vector-Distances: <%= $word %></title>
+ <title>DeReKo-Word-Vector-Distances: <%= $word %></title>
<link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
- <link href="https://fonts.googleapis.com/css?family=Lato|Roboto+Condensed" rel="stylesheet">
+ <link href="https://fonts.googleapis.com/css?family=Lato|Roboto+Condensed" rel="stylesheet">
<script src="http://code.jquery.com/jquery-latest.min.js"></script>
- <script src = "https://cdn.datatables.net/1.10.16/js/jquery.dataTables.min.js"></script>
- <script src = "https://cdn.datatables.net/fixedcolumns/3.2.3/js/dataTables.fixedColumns.min.js"></script>
- <script src = "https://cdn.datatables.net/plug-ins/1.10.16/sorting/scientific.js"></script>
- <link rel="stylesheet" href="https://cdn.datatables.net/1.10.16/css/jquery.dataTables.min.css">
+ <script src = "https://cdn.datatables.net/1.10.16/js/jquery.dataTables.min.js"></script>
+ <script src = "https://cdn.datatables.net/fixedcolumns/3.2.3/js/dataTables.fixedColumns.min.js"></script>
+ <script src = "https://cdn.datatables.net/plug-ins/1.10.16/sorting/scientific.js"></script>
+ <link rel="stylesheet" href="https://cdn.datatables.net/1.10.16/css/jquery.dataTables.min.css">
<script
- src="http://code.jquery.com/ui/1.12.1/jquery-ui.min.js"
- integrity="sha256-VazP97ZCwtekAsvgPBSUwPFKdrwD3unUfSGVYrahUqU="
- crossorigin="anonymous"></script>
+ src="http://code.jquery.com/ui/1.12.1/jquery-ui.min.js"
+ integrity="sha256-VazP97ZCwtekAsvgPBSUwPFKdrwD3unUfSGVYrahUqU="
+ crossorigin="anonymous"></script>
<script>
- var urlParams = new URLSearchParams(window.location.search);
+ var urlParams = new URLSearchParams(window.location.search);
$('#firstable').hide();
- $(document).ready(function() {
+ $(document).ready(function() {
- $("input").bind("keydown", function(event) {
- // track enter key
- var keycode = (event.keyCode ? event.keyCode : (event.which ? event.which : event.charCode));
- if (keycode == 13) { // keycode for enter key
- // force the 'Enter Key' to implicitly click the Update button
- document.getElementById('SEARCH').click();
- return false;
- } else {
- return true;
- }});
+ $("input").bind("keydown", function(event) {
+ // track enter key
+ var keycode = (event.keyCode ? event.keyCode : (event.which ? event.which : event.charCode));
+ if (keycode == 13) { // keycode for enter key
+ // force the 'Enter Key' to implicitly click the Update button
+ document.getElementById('SEARCH').click();
+ return false;
+ } else {
+ return true;
+ }});
- $( "#tabs" ).on( "tabsactivate", function( event, ui ) {
- if (localStorage) localStorage['tab'] = ui.newTab.index();
- });
+ $( "#tabs" ).on( "tabsactivate", function( event, ui ) {
+ if (localStorage) localStorage['tab'] = ui.newTab.index();
+ });
- $(function(){
- $("#SEARCH").click(function() {
- window.open($(location).attr('pathname')+'?'+$('form').serialize(), "_self");
- });
- });
+ $(function(){
+ $("#SEARCH").click(function() {
+ window.open($(location).attr('pathname')+'?'+$('form').serialize(), "_self");
+ });
+ });
- function changeCharColor(txt, heat) {
- var newText = "";
- for (var i=0, l=txt.length; i<l; i++) {
- newText += (i == 5 ? txt.charAt(i) : '<span style="background-color:'+getHeatColor(heat[i]/maxHeat)+'">'+txt.charAt(i)+'</span>');
+ function changeCharColor(txt, heat) {
+ var newText = "";
+ for (var i=0, l=txt.length; i<l; i++) {
+ newText += (i == 5 ? txt.charAt(i) : '<span style="background-color:'+getHeatColor(heat[i]/maxHeat)+'">'+txt.charAt(i)+'</span>');
+ }
+ return newText;
}
- return newText;
- }
- function getHeatColor(value) {
- var hue=((1-value)*120).toString(10);
- return ["hsl(",hue,",90%,70%)"].join("");
- }
-
- function bitvec2window(n, heat) {
- var str = n.toString(2).padStart(10, "0")
- .replace(/^([0-9]{5})/, '$1x')
- .replace(/0/g, '·')
- .replace(/1/g, '+');
- return changeCharColor(str, heat);
- }
-
- % use Mojo::ByteStream 'b';
- % my $urlprefix = url_with->query([word=>'']);
- var paraResults = <%= b(Mojo::JSON::to_json($lists)) %>;
- var urlprefix = new URLSearchParams(window.location.search);
- if (paraResults.length > 0) {
- var nvecs = [],
- nwords = [],
- nranks = [],
- nmarked = [];
- for(var i = 0; i < paraResults.length; i++) {
- nwords = nwords.concat(paraResults[i].map(function(a){return a.word;}));
- nvecs = nvecs.concat(paraResults[i].map(function(a){return a.vector;}));
- nranks = nranks.concat(paraResults[i].map(function(a){return a.rank;}));
- nmarked = nmarked.concat(paraResults[i].map(function(a){return a.marked;}));
+ function getHeatColor(value) {
+ var hue=((1-value)*120).toString(10);
+ return ["hsl(",hue,",90%,70%)"].join("");
}
- showMap({target: " "+urlParams.get('word')+" ", mergedEnd: 0, words: nwords, vecs: nvecs, ranks: nranks, marked: nmarked, urlprefix: "?"+urlprefix} );
- var t = $('#firsttable').DataTable({
- data: paraResults[0],
- "sScrollY": "780px",
- "bScrollCollapse": true,
- "bPaginate": false,
- "bJQueryUI": true,
- "dom": '<"top">rt<"bottom"flp><"clear">',
- "columns": [
- { "data": "rank", type: "allnumeric" },
- { "data": "dist", render: function ( data, type, row ) {return data.toFixed(3) }},
- { "data": "word", render: function ( data, type, row ) {urlprefix.set("word", data); return '<a href="?' + urlprefix + '">' + data + '</a>' }}
- ],
- "columnDefs": [
- { className: "dt-right", "targets": [0,1] },
- { "searchable": false,
- "orderable": false,
- "targets": 0
- },
- { "orderSequence": [ "desc" ], "targets": [ 1 ] },
- { "orderSequence": [ "asc", "desc" ], "targets": [ 2 ] },
- ],
- "order": [[ 1, 'desc' ]],
- } );
- t.on( 'order.dt search.dt', function () {
- t.column(0, {order:'applied'}).nodes().each( function (cell, i) {
- cell.innerHTML = i+1;
- } );
- } ).draw();
-
- $( "#first" ).clone().prependTo( "#tabs-2" );
-
- }
-
- var collocatorData = <%= b(Mojo::JSON::to_json($collocators)) %>;
- var maxHeat; // = Math.max.apply(Math,collocatorData.map(function(o){return o.cprob;}))
-
- if (collocatorData != null) {
- maxHeat = Math.max.apply(Math,collocatorData.map(function(o){return Math.max.apply(Math,o.heat);}))
- var t = $('#secondtable').DataTable({
- data: collocatorData,
- "sScrollY": "780px",
- "bScrollCollapse": true,
- "bPaginate": false,
- "bJQueryUI": true,
- "dom": '<"top">rt<"bottom"flp><"clear">',
- "columns": [
- { "data": "rank", type: "allnumeric" },
- { "data": "pos", width: "7%", sClass: "dt-center mono compact", render: function ( data, type, row ) {return bitvec2window(data, row.heat) }},
- { "data": "max", render: function ( data, type, row ) {return data.toFixed(3) }},
- { "data": "conorm", render: function ( data, type, row ) {return data.toFixed(3) }},
- { "data": "prob", type: "scientific", render: function ( data, type, row ) {return data.toExponential(3) } },
- { "data": "cprob", type: "scientific", render: function ( data, type, row ) {return data.toExponential(3) } },
- { "data": "overall", type: "scientific", render: function ( data, type, row ) {return data.toExponential(3) } },
- { "data": "word", sClass: "collocator" }
- ],
- "columnDefs": [
- { className: "dt-right", "targets": [0,2,3,4,5,6] },
- { className: "dt-center", "targets": [ 1] },
- { "searchable": false,
- "orderable": false,
- "targets": 0
- },
- { "type": "scientific", targets: [2,3,4,5,6] },
- { "orderSequence": [ "desc" ], "targets": [ 2, 3, 4, 5, 6 ] },
- { "orderSequence": [ "asc", "desc" ], "targets": [ 1, 7 ] },
- ],
- "order": [[ 4, 'desc' ]],
- } );
-
- t.on( 'order.dt search.dt', function () {
- t.column(0, {order:'applied'}).nodes().each( function (cell, i) {
- cell.innerHTML = i+1;
- } );
- } ).draw();
-
- if (localStorage) { // let's not crash if some user has IE7
- var index = parseInt(localStorage['tab']||'0');
- $("#tabs").tabs({ active: index });
+ function bitvec2window(n, heat) {
+ var str = n.toString(2).padStart(10, "0")
+ .replace(/^([0-9]{5})/, '$1x')
+ .replace(/0/g, '·')
+ .replace(/1/g, '+');
+ return changeCharColor(str, heat);
}
- }
- $("#tabs").css("visibility", "visible"); // now we can show the tabs
- });
+ % use Mojo::ByteStream 'b';
+ % my $urlprefix = url_with->query([word=>'']);
+ var paraResults = <%= b(Mojo::JSON::to_json($lists)) %>;
+ var urlprefix = new URLSearchParams(window.location.search);
+ if (paraResults.length > 0) {
+ var nvecs = [],
+ nwords = [],
+ nranks = [],
+ nmarked = [];
+ for(var i = 0; i < paraResults.length; i++) {
+ nwords = nwords.concat(paraResults[i].map(function(a){return a.word;}));
+ nvecs = nvecs.concat(paraResults[i].map(function(a){return a.vector;}));
+ nranks = nranks.concat(paraResults[i].map(function(a){return a.rank;}));
+ nmarked = nmarked.concat(paraResults[i].map(function(a){return a.marked;}));
+ }
+ showMap({target: " "+urlParams.get('word')+" ", mergedEnd: 0, words: nwords, vecs: nvecs, ranks: nranks, marked: nmarked, urlprefix: "?"+urlprefix} );
+ var t = $('#firsttable').DataTable({
+ data: paraResults[0],
+ "sScrollY": "780px",
+ "bScrollCollapse": true,
+ "bPaginate": false,
+ "bJQueryUI": true,
+ "dom": '<"top">rt<"bottom"flp><"clear">',
+ "columns": [
+ { "data": "rank", type: "allnumeric" },
+ { "data": "dist", render: function ( data, type, row ) {return data.toFixed(3) }},
+ { "data": "word", render: function ( data, type, row ) {urlprefix.set("word", data); return '<a href="?' + urlprefix + '">' + data + '</a>' }}
+ ],
+ "columnDefs": [
+ { className: "dt-right", "targets": [0,1] },
+ { "searchable": false,
+ "orderable": false,
+ "targets": 0
+ },
+ { "orderSequence": [ "desc" ], "targets": [ 1 ] },
+ { "orderSequence": [ "asc", "desc" ], "targets": [ 2 ] },
+ ],
+ "order": [[ 1, 'desc' ]],
+ } );
- $(function(){
- $("#dropdownoptions").dialog({
- title: "Options",
- autoOpen: false,
- modal: false,
- draggable: false,
- height: "auto",
- width: "auto",
- resizable: false,
- buttons: {
- "Cancel": function() {
- $( this ).dialog( "close" );
- },
- "Apply": function() {
- window.open($(location).attr('pathname')+'?'+$('form').serialize(), "_self");
- }
- }
- });
- });
+ t.on( 'order.dt search.dt', function () {
+ t.column(0, {order:'applied'}).nodes().each( function (cell, i) {
+ cell.innerHTML = i+1;
+ } );
+ } ).draw();
- $(function(){
- $("td.collocator").click(function(){
- queryKorAPCII(this.textContent + " /w5 " + urlParams.get('word'));
- });
- });
+ $( "#first" ).clone().prependTo( "#tabs-2" );
- $(function(){
- $("#showoptions").click(function(){
- $("#dropdownoptions").dialog("open");
- var target = $(this);
- $("#dropdownoptions").dialog("widget").position({
- my: 'left bottom',
- at: 'left bottom',
- of: target
- });
- });
- });
+ }
- $( function() {
- $( "#no_iterations" ).spinner({
- spin: function( event, ui ) {
- if ( ui.value < 1000 ) {
- $( this ).spinner( "value", 1000 );
- return false;
- } else if ( ui.value > 10000 ) {
- $( this ).spinner( "value", 10000 );
- return false;
- }
- }
- });
- } );
+ var collocatorData = <%= b(Mojo::JSON::to_json($collocators)) %>;
+ var maxHeat; // = Math.max.apply(Math,collocatorData.map(function(o){return o.cprob;}))
- $( function() {
- $( "#neighbours" ).spinner({
- spin: function( event, ui ) {
- if ( ui.value < 0 ) {
- $( this ).spinner( "value", 0 );
- return false;
- } else if ( ui.value > 200 ) {
- $( this ).spinner( "value", 200 );
- return false;
- }
- }
- });
- } );
+ if (collocatorData != null) {
+ maxHeat = Math.max.apply(Math,collocatorData.map(function(o){return Math.max.apply(Math,o.heat);}))
+ var t = $('#secondtable').DataTable({
+ data: collocatorData,
+ "sScrollY": "780px",
+ "bScrollCollapse": true,
+ "bPaginate": false,
+ "bJQueryUI": true,
+ "dom": '<"top">rt<"bottom"flp><"clear">',
+ "columns": [
+ { "data": "rank", type: "allnumeric" },
+ { "data": "pos", width: "7%", sClass: "dt-center mono compact", render: function ( data, type, row ) {return bitvec2window(data, row.heat) }},
+ { "data": "max", render: function ( data, type, row ) {return data.toFixed(3) }},
+ { "data": "conorm", render: function ( data, type, row ) {return data.toFixed(3) }},
+ { "data": "prob", type: "scientific", render: function ( data, type, row ) {return data.toExponential(3) } },
+ { "data": "cprob", type: "scientific", render: function ( data, type, row ) {return data.toExponential(3) } },
+ { "data": "overall", type: "scientific", render: function ( data, type, row ) {return data.toExponential(3) } },
+ { "data": "word", sClass: "collocator" }
+ ],
+ "columnDefs": [
+ { className: "dt-right", "targets": [0,2,3,4,5,6] },
+ { className: "dt-center", "targets": [ 1] },
+ { "searchable": false,
+ "orderable": false,
+ "targets": 0
+ },
+ { "type": "scientific", targets: [2,3,4,5,6] },
+ { "orderSequence": [ "desc" ], "targets": [ 2, 3, 4, 5, 6 ] },
+ { "orderSequence": [ "asc", "desc" ], "targets": [ 1, 7 ] },
+ ],
+ "order": [[ 4, 'desc' ]],
+ } );
- $( function() {
- $( "#cutoff" ).spinner({
- spin: function( event, ui ) {
- if ( ui.value < 100000 ) {
- $( this ).spinner( "value", 100000 );
- return false;
- } else if ( ui.value > 2000000 ) {
- $( this ).spinner( "value", 2000000 );
- return false;
- }
- }
- });
- } );
+ t.on( 'order.dt search.dt', function () {
+ t.column(0, {order:'applied'}).nodes().each( function (cell, i) {
+ cell.innerHTML = i+1;
+ } );
+ } ).draw();
+
+ if (localStorage) { // let's not crash if some user has IE7
+ var index = parseInt(localStorage['tab']||'0');
+ $("#tabs").tabs({ active: index });
+ }
+ }
+ $("#tabs").css("visibility", "visible"); // now we can show the tabs
+
+ });
+
+ $(function(){
+ $("#dropdownoptions").dialog({
+ title: "Options",
+ autoOpen: false,
+ modal: false,
+ draggable: false,
+ height: "auto",
+ width: "auto",
+ resizable: false,
+ buttons: {
+ "Cancel": function() {
+ $( this ).dialog( "close" );
+ },
+ "Apply": function() {
+ window.open($(location).attr('pathname')+'?'+$('form').serialize(), "_self");
+ }
+ }
+ });
+ });
+
+ $(function(){
+ $("td.collocator").click(function(){
+ queryKorAPCII(this.textContent + " /w5 " + urlParams.get('word'));
+ });
+ });
+
+ $(function(){
+ $("#showoptions").click(function(){
+ $("#dropdownoptions").dialog("open");
+ var target = $(this);
+ $("#dropdownoptions").dialog("widget").position({
+ my: 'left bottom',
+ at: 'left bottom',
+ of: target
+ });
+ });
+ });
$( function() {
- $( "#tabs" ).tabs().addClass('tabs-min');
- } );
+ $( "#no_iterations" ).spinner({
+ spin: function( event, ui ) {
+ if ( ui.value < 1000 ) {
+ $( this ).spinner( "value", 1000 );
+ return false;
+ } else if ( ui.value > 10000 ) {
+ $( this ).spinner( "value", 10000 );
+ return false;
+ }
+ }
+ });
+ } );
- $( function() {
- $( ".controlgroup-vertical" ).controlgroup({
- "direction": "vertical"
- });
- } );
+ $( function() {
+ $( "#neighbours" ).spinner({
+ spin: function( event, ui ) {
+ if ( ui.value < 0 ) {
+ $( this ).spinner( "value", 0 );
+ return false;
+ } else if ( ui.value > 200 ) {
+ $( this ).spinner( "value", 200 );
+ return false;
+ }
+ }
+ });
+ } );
- $(function() {
- $( document ).tooltip({
- content: function() {
- return $(this).attr('title');
- }}
- )
- })
+ $( function() {
+ $( "#cutoff" ).spinner({
+ spin: function( event, ui ) {
+ if ( ui.value < 100000 ) {
+ $( this ).spinner( "value", 100000 );
+ return false;
+ } else if ( ui.value > 2000000 ) {
+ $( this ).spinner( "value", 2000000 );
+ return false;
+ }
+ }
+ });
+ } );
+
+ $( function() {
+ $( "#tabs" ).tabs().addClass('tabs-min');
+ } );
+
+ $( function() {
+ $( ".controlgroup-vertical" ).controlgroup({
+ "direction": "vertical"
+ });
+ } );
+
+ $(function() {
+ $( document ).tooltip({
+ content: function() {
+ return $(this).attr('title');
+ }}
+ )
+ })
</script>
- <script src="//d3js.org/d3.v3.min.js" charset="utf-8"></script>
- <script src="/derekovecs/js/tsne.js"></script>
- <script src="/derekovecs/js/som.js"></script>
- <script src="/derekovecs/js/labeler.js"></script>
+ <script src="//d3js.org/d3.v3.min.js" charset="utf-8"></script>
+ <script src="/derekovecs/js/tsne.js"></script>
+ <script src="/derekovecs/js/som.js"></script>
+ <script src="/derekovecs/js/labeler.js"></script>
<style>
body, input {
- font-family: Lato, sans-serif;
- font-size: 11pt;
+ font-family: Lato, sans-serif;
+ font-size: 11pt;
}
- h1, h2, h3 {
- margin: 5px 10px 0 0;
- color: rgb(246,168,0);
- font-family: "Univers LT Std 47 Cn Lt", "Univers LT Std 67 Cn Lt", "Roboto Condensed", "Univers LT Std 67 Cn Bold", "UniversLTStd-BoldCn", "Times", 'League Gothic', Impact, sans-serif;
- font-weight: bold;
- line-height: 1.35;
- letter-spacing: normal;
- text-transform: uppercase;
- text-shadow: none;
- word-wrap: break-word;
- }
+ h1, h2, h3 {
+ margin: 5px 10px 0 0;
+ color: rgb(246,168,0);
+ font-family: "Univers LT Std 47 Cn Lt", "Univers LT Std 67 Cn Lt", "Roboto Condensed", "Univers LT Std 67 Cn Bold", "UniversLTStd-BoldCn", "Times", 'League Gothic', Impact, sans-serif;
+ font-weight: bold;
+ line-height: 1.35;
+ letter-spacing: normal;
+ text-transform: uppercase;
+ text-shadow: none;
+ word-wrap: break-word;
+ }
- showoptions, #SEARCH {
- margin-left: 10px;
- margin-right: 10px;
- }
+ showoptions, #SEARCH {
+ margin-left: 10px;
+ margin-right: 10px;
+ }
- .tabs-left-vertical .ui-tabs-nav {
- position: absolute;
- width: 21em;
- transform: translate(-100%,0%) rotate(-90deg);
- transform-origin: 100% 0%;
- }
+ .tabs-left-vertical .ui-tabs-nav {
+ position: absolute;
+ width: 21em;
+ transform: translate(-100%,0%) rotate(-90deg);
+ transform-origin: 100% 0%;
+ }
- .tabs-left-vertical .ui-tabs-nav li {
- float: right;
- }
+ .tabs-left-vertical .ui-tabs-nav li {
+ float: right;
+ }
- .tabs-left-vertical .ui-tabs-panel {
- padding-left: 3.5em;
- }
+ .tabs-left-vertical .ui-tabs-panel {
+ padding-left: 3.5em;
+ }
- .tabs-left-vertical .ui-tabs-panel {
- height: 20em;
- }
+ .tabs-left-vertical .ui-tabs-panel {
+ height: 20em;
+ }
- .mono {
- font-family: "DejaVu Sans Mono", Inconsolata, SourceCodePro, Courier;
- }
+ .mono {
+ font-family: "DejaVu Sans Mono", Inconsolata, SourceCodePro, Courier;
+ }
- .ui-tooltip-content {
- font-size: 9pt;
- color: #222222;
- }
+ .ui-tooltip-content {
+ font-size: 9pt;
+ color: #222222;
+ }
- svg > .ui-tooltip-content {
- font-size: 8pt;
- color: #222222;
- }
+ svg > .ui-tooltip-content {
+ font-size: 8pt;
+ color: #222222;
+ }
- a.merged {
- color: green;
- fill: green;
- }
+ a.merged {
+ color: green;
+ fill: green;
+ }
- #first a {
- text-decoration: none;
- }
+ #first a {
+ text-decoration: none;
+ }
- a.marked, #first a.marked {
- text-decoration: underline;
- }
+ a.marked, #first a.marked {
+ text-decoration: underline;
+ }
- a.target {
- color: red;
- fill: red;
- }
+ a.target {
+ color: red;
+ fill: red;
+ }
- table.display {
- width: 40% important!;
- margin: 1; /* <- works for me this way ****/
- }
+ table.display {
+ width: 40% important!;
+ margin: 1; /* <- works for me this way ****/
+ }
- table.dataTable thead th, table.dataTable thead td, table.dataTable tbody td {
- padding: 2px 2px;
- // border-bottom: 1px solid #111;
- }
+ table.dataTable thead th, table.dataTable thead td, table.dataTable tbody td {
+ padding: 2px 2px;
+ // border-bottom: 1px solid #111;
+ }
- #collocators {
- margin-bottom: 15px;
- }
+ #collocators {
+ margin-bottom: 15px;
+ }
- #header {
- width: 100%;
- // border: 1px solid red;
- overflow: hidden; /* will contain if #first is longer than #second */
- }
+ #header {
+ width: 100%;
+ // border: 1px solid red;
+ overflow: hidden; /* will contain if #first is longer than #second */
+ }
- #topwrapper {
- width: 100%;
- // border: 1px solid red;
- overflow: hidden; /* will contain if #first is longer than #second */
- }
+ #topwrapper {
+ width: 100%;
+ // border: 1px solid red;
+ overflow: hidden; /* will contain if #first is longer than #second */
+ }
- #wrapper {
- // border: 1px solid red;
- overflow: hidden; /* will contain if #first is longer than #second */
- }
+ #wrapper {
+ // border: 1px solid red;
+ overflow: hidden; /* will contain if #first is longer than #second */
+ }
- #pagetitle {
- max-width: 460px;
- margin-right: 20px;
- float: left;
- overflow: hidden; /* if you don't want #second to wrap below #first */
- // border: 1px solid green;
- }
+ #pagetitle {
+ max-width: 460px;
+ margin-right: 20px;
+ float: left;
+ overflow: hidden; /* if you don't want #second to wrap below #first */
+ // border: 1px solid green;
+ }
- #options {
- float: left;
- width: 800px;
- margin: 10px;
- overflow: hidden; /* if you don't want #second to wrap below #first */
- }
+ #options {
+ float: left;
+ width: 800px;
+ margin: 10px;
+ overflow: hidden; /* if you don't want #second to wrap below #first */
+ }
- #word {
- width: 50%;
- }
+ #word {
+ width: 50%;
+ }
- #first {
- margin-right: 20px;
- float: left;
- overflow: hidden; /* if you don't want #second to wrap below #first */
- // border: 1px solid green;
- }
- #tabs {
- margin-right: 20px;
- overflow: hidden; /* if you don't want #second to wrap below #first */
- }
+ #first {
+ margin-right: 20px;
+ float: left;
+ overflow: hidden; /* if you don't want #second to wrap below #first */
+ // border: 1px solid green;
+ }
+ #tabs {
+ margin-right: 20px;
+ overflow: hidden; /* if you don't want #second to wrap below #first */
+ }
- .tabs-min {
- background: transparent;
- border: none;
- }
+ .tabs-min {
+ background: transparent;
+ border: none;
+ }
- .tabs-min .ui-widget-header {
- background: transparent;
- border: none;
- border-bottom: 1px solid #c0c0c0;
- -moz-border-radius: 0px;
- -webkit-border-radius: 0px;
- border-radius: 0px;
- }
+ .tabs-min .ui-widget-header {
+ background: transparent;
+ border: none;
+ border-bottom: 1px solid #c0c0c0;
+ -moz-border-radius: 0px;
+ -webkit-border-radius: 0px;
+ border-radius: 0px;
+ }
- .tabs-min .ui-tabs-nav .ui-state-default {
- background: transparent;
- border: none;
- }
+ .tabs-min .ui-tabs-nav .ui-state-default {
+ background: transparent;
+ border: none;
+ }
- .tabs-min .ui-tabs-nav .ui-state-active {
- background: transparent url(img/uiTabsArrow.png) no-repeat bottom center;
- border: none;
- }
+ .tabs-min .ui-tabs-nav .ui-state-active {
+ background: transparent url(derekovecs/img/uiTabsArrow.png) no-repeat bottom center;
+ border: none;
+ }
- .tabs-min .ui-tabs-nav .ui-state-default a {
- color: #c0c0c0;
- }
+ .tabs-min .ui-tabs-nav .ui-state-default a {
+ color: #c0c0c0;
+ }
- .tabs-min .ui-tabs-nav .ui-state-active a {
- color: rgb(246,168,0);
- }
+ .tabs-min .ui-tabs-nav .ui-state-active a {
+ color: rgb(246,168,0);
+ }
- #embed {
- max-width: 802px;
- border: 1px solid #333;
- }
+ #embed {
+ max-width: 802px;
+ border: 1px solid #333;
+ }
- #second {
- min-width: 800px;
- // border: 1px solid #333;
- overflow: hidden; /* if you don't want #second to wrap below #first */
- }
- #som2 svg {
- border: 1px solid #333;
- }
+ #second {
+ min-width: 800px;
+ // border: 1px solid #333;
+ overflow: hidden; /* if you don't want #second to wrap below #first */
+ }
+ #som2 svg {
+ border: 1px solid #333;
+ }
- #cost {
- font-size: 8pt;
- color: #222222;
- margin-top: 4px;
- margin-bottom: 12px;
- }
+ #cost {
+ font-size: 8pt;
+ color: #222222;
+ margin-top: 4px;
+ margin-bottom: 12px;
+ }
- #sominfo1, #sominfo {
- font-size: 8pt;
- color: #222222;
- margin-top: 0px;
- }
+ #sominfo1, #sominfo {
+ font-size: 8pt;
+ color: #222222;
+ margin-top: 0px;
+ }
- #somcolor1, #somcolor2, #somcolor3 {
- display: inline-block;
- height: 10px;
- width: 10px;
- }
+ #somcolor1, #somcolor2, #somcolor3 {
+ display: inline-block;
+ height: 10px;
+ width: 10px;
+ }
- #third {
- border: 1px solid #333;
- }
+ #third {
+ border: 1px solid #333;
+ }
</style>
<script>
var opt = {epsilon: <%= $epsilon %>, perplexity: <%= $perplexity %>},
- mapWidth = 800, // width map
- mapHeight = 800,
- jitterRadius = 7;
+ mapWidth = 800, // width map
+ mapHeight = 800,
+ jitterRadius = 7;
var T = new tsnejs.tSNE(opt); // create a tSNE instance
@@ -486,27 +486,27 @@
var labeler;
function applyJitter() {
- svg.selectAll('.tsnet')
- .data(labels)
- .transition()
- .duration(50)
- .attr("transform", function(d, i) {
- T.Y[i][0] = (d.x - mapWidth/2 - tx)/ss/20;
- T.Y[i][1] = (d.y - mapHeight/2 - ty)/ss/20;
- return "translate(" +
- (d.x) + "," +
- (d.y) + ")";
- });
+ svg.selectAll('.tsnet')
+ .data(labels)
+ .transition()
+ .duration(50)
+ .attr("transform", function(d, i) {
+ T.Y[i][0] = (d.x - mapWidth/2 - tx)/ss/20;
+ T.Y[i][1] = (d.y - mapHeight/2 - ty)/ss/20;
+ return "translate(" +
+ (d.x) + "," +
+ (d.y) + ")";
+ });
}
function updateEmbedding() {
- var Y = T.getSolution();
- svg.selectAll('.tsnet')
- .data(data.words)
- .attr("transform", function(d, i) {
- return "translate(" +
- ((Y[i][0]*20*ss + tx) + mapWidth/2) + "," +
- ((Y[i][1]*20*ss + ty) + mapHeight/2) + ")"; });
+ var Y = T.getSolution();
+ svg.selectAll('.tsnet')
+ .data(data.words)
+ .attr("transform", function(d, i) {
+ return "translate(" +
+ ((Y[i][0]*20*ss + tx) + mapWidth/2) + "," +
+ ((Y[i][1]*20*ss + ty) + mapHeight/2) + ")"; });
}
var svg;
@@ -515,58 +515,59 @@
var text;
function drawEmbedding() {
- $("#embed").empty();
- var div = d3.select("#embed");
+ var urlprefix = new URLSearchParams(window.location.search);
+ $("#embed").empty();
+ var div = d3.select("#embed");
- // get min and max in each column of Y
- var Y = T.Y;
+ // get min and max in each column of Y
+ var Y = T.Y;
- svg = div.append("svg") // svg is global
- .attr("width", mapWidth)
- .attr("height", mapHeight);
+ svg = div.append("svg") // svg is global
+ .attr("width", mapWidth)
+ .attr("height", mapHeight);
- var g = svg.selectAll(".b")
- .data(data.words)
- .enter().append("g")
- .attr("class", "tsnet");
+ var g = svg.selectAll(".b")
+ .data(data.words)
+ .enter().append("g")
+ .attr("class", "tsnet");
- g.append("a")
- .attr("xlink:href", function(word) {
- return (data.urlprefix+word);})
- .attr("class", function(d, i) {
- var res="";
- if(data.marked[i]) {
- res="marked ";
- }
- if(data.target.indexOf(" "+d+" ") >= 0) {
- return res+"target";
- } else if(data.ranks[i] < data.mergedEnd) {
- return res+"merged";
- } else {
- return res;
- }
- })
- .attr("title", function(d, i) {
- if(data.mergedEnd > 0) {
- if(data.ranks[i] >= data.mergedEnd) {
- return "rank: "+i +" "+"freq. rank: "+(data.ranks[i]).toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
- } else {
- return "rank: "+i +" "+"freq. rank: "+data.ranks[i].toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",") + " (merged vocab)";
- }
- } else {
- return "rank: "+i +" "+"freq. rank: "+data.ranks[i].toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
- }
- })
- .append("text")
- .attr("text-anchor", "top")
- .attr("font-size", 12)
- .text(function(d) { return d; });
+ g.append("a")
+ .attr("xlink:href", function(word) {
+ urlprefix.set("word", word); return "?"+urlprefix; })
+ .attr("class", function(d, i) {
+ var res="";
+ if(data.marked[i]) {
+ res="marked ";
+ }
+ if(data.target.indexOf(" "+d+" ") >= 0) {
+ return res+"target";
+ } else if(data.ranks[i] < data.mergedEnd) {
+ return res+"merged";
+ } else {
+ return res;
+ }
+ })
+ .attr("title", function(d, i) {
+ if(data.mergedEnd > 0) {
+ if(data.ranks[i] >= data.mergedEnd) {
+ return "rank: "+i +" "+"freq. rank: "+(data.ranks[i]).toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
+ } else {
+ return "rank: "+i +" "+"freq. rank: "+data.ranks[i].toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",") + " (merged vocab)";
+ }
+ } else {
+ return "rank: "+i +" "+"freq. rank: "+data.ranks[i].toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
+ }
+ })
+ .append("text")
+ .attr("text-anchor", "top")
+ .attr("font-size", 12)
+ .text(function(d) { return d; });
- var zoomListener = d3.behavior.zoom()
- .scaleExtent([0.1, 10])
- .center([0,0])
- .on("zoom", zoomHandler);
- zoomListener(svg);
+ var zoomListener = d3.behavior.zoom()
+ .scaleExtent([0.1, 10])
+ .center([0,0])
+ .on("zoom", zoomHandler);
+ zoomListener(svg);
}
var tx=0, ty=0;
@@ -574,274 +575,274 @@
var iter_id=-1;
function zoomHandler() {
- tx = d3.event.translate[0];
- ty = d3.event.translate[1];
- ss = d3.event.scale;
- updateEmbedding();
+ tx = d3.event.translate[0];
+ ty = d3.event.translate[1];
+ ss = d3.event.scale;
+ updateEmbedding();
}
var stepnum = 0;
function stopStep() {
- clearInterval(iter_id);
- text = svg.selectAll("text");
+ clearInterval(iter_id);
+ text = svg.selectAll("text");
- // jitter function needs different data and co-ordinate representation
- labels = d3.range(data.words.length).map(function(i) {
- var x = (T.Y[i][0]*20*ss + tx) + mapWidth/2;
- var y = (T.Y[i][1]*20*ss + ty) + mapHeight/2;
- anchor_array.push({x: x, y: y, r: jitterRadius});
- return {
- x: x,
- y: y,
- name: data.words[i]
- };
- });
+ // jitter function needs different data and co-ordinate representation
+ labels = d3.range(data.words.length).map(function(i) {
+ var x = (T.Y[i][0]*20*ss + tx) + mapWidth/2;
+ var y = (T.Y[i][1]*20*ss + ty) + mapHeight/2;
+ anchor_array.push({x: x, y: y, r: jitterRadius});
+ return {
+ x: x,
+ y: y,
+ name: data.words[i]
+ };
+ });
- // get the actual label bounding boxes for the jitter function
- var index = 0;
- text.each(function() {
- labels[index].width = this.getBBox().width;
- labels[index].height = this.getBBox().height;
- index += 1;
- });
+ // get the actual label bounding boxes for the jitter function
+ var index = 0;
+ text.each(function() {
+ labels[index].width = this.getBBox().width;
+ labels[index].height = this.getBBox().height;
+ index += 1;
+ });
- // setTimeout(updateEmbedding, 1);
- // setTimeout(
- labeler = d3.labeler()
- .label(labels)
- .anchor(anchor_array)
- .width(mapWidth)
- .height(mapHeight)
- .update(applyJitter);
- // .start(1000);
+ // setTimeout(updateEmbedding, 1);
+ // setTimeout(
+ labeler = d3.labeler()
+ .label(labels)
+ .anchor(anchor_array)
+ .width(mapWidth)
+ .height(mapHeight)
+ .update(applyJitter);
+ // .start(1000);
- iter_id = setInterval(jitterStep, 1);
+ iter_id = setInterval(jitterStep, 1);
}
var jitter_i=0;
function jitterStep() {
- if(jitter_i++ > 100) {
- clearInterval(iter_id);
- } else {
- labeler.start2(10);
- applyJitter();
- }
+ if(jitter_i++ > 100) {
+ clearInterval(iter_id);
+ } else {
+ labeler.start2(10);
+ applyJitter();
+ }
}
var last_cost=1000;
function step() {
- var i = T.iter;
+ var i = T.iter;
- if(i > <%= $no_iterations %>) {
- stopStep();
- } else {
- var cost = Math.round(T.step() * 100000) / 100000; // do a few steps
- $("#cost").html("tsne iteration " + i + ", cost: " + cost.toFixed(5));
- if(i % 250 == 0 && cost >= last_cost) {
- stopStep();
- } else {
- last_cost = cost;
- updateEmbedding();
- }
- }
+ if(i > <%= $no_iterations %>) {
+ stopStep();
+ } else {
+ var cost = Math.round(T.step() * 100000) / 100000; // do a few steps
+ $("#cost").html("tsne iteration " + i + ", cost: " + cost.toFixed(5));
+ if(i % 250 == 0 && cost >= last_cost) {
+ stopStep();
+ } else {
+ last_cost = cost;
+ updateEmbedding();
+ }
+ }
}
function showMap(j) {
- data=j;
- T.iter=0;
- T.initDataRaw(data.vecs); // init embedding
- drawEmbedding(); // draw initial embedding
+ data=j;
+ T.iter=0;
+ T.initDataRaw(data.vecs); // init embedding
+ drawEmbedding(); // draw initial embedding
- if(iter_id >= 0) {
- clearInterval(iter_id);
- }
- //T.debugGrad();
- iter_id = setInterval(step, 1);
- if(true) { // (<%= $show_som %>) {
- makeSOM(j, <%= $no_iterations %>);
- }
+ if(iter_id >= 0) {
+ clearInterval(iter_id);
+ }
+ //T.debugGrad();
+ iter_id = setInterval(step, 1);
+ if(true) { // (<%= $show_som %>) {
+ makeSOM(j, <%= $no_iterations %>);
+ }
}
var queryword;
function onload() {
- queryword = document.getElementById('word');
+ queryword = document.getElementById('word');
}
function queryKorAP() {
- window.open('http://korap.ids-mannheim.de/kalamar/?q='+queryword.value, 'KorAP');
+ window.open('http://korap.ids-mannheim.de/kalamar/?q='+queryword.value, 'KorAP');
}
function queryKorAPCII(query) {
- window.open('http://korap.ids-mannheim.de/kalamar/?ql=cosmas2&q='+query, 'KorAP');
+ window.open('http://korap.ids-mannheim.de/kalamar/?ql=cosmas2&q='+query, 'KorAP');
}
</script>
</head>
<body onload="onload()">
- <div id="header">
- <div id="pagetitle">
- <h1>DeReKo-Vectors</h1>
- </div>
- <div id="options" class="widget">
- <form id="queryform">
- <input id="word" type="text" name="word" placeholder="Word(s) to be searched" value="<%= $word %>"
- title="When looking for multiple words use spaces as separators to search around the average vector and | as separator to get the neighbours for each word."/>
- <input id="SEARCH" type="button" value="SEARCH">
- <input type="button" id="showoptions" name="showoptions" value="Options" />
- </form>
- <div id="dropdownoptions" style="display: none">
- <form id="optionsform">
- <div class="controlgroup-vertical">
- <label for="cutoff">cut-off</label>
- <input id="cutoff" type="text" name="cutoff" size="10" value="<%= $cutoff %>" title="Only consider the most frequent x word forms.">
- <label for="dedupe">dedupe</label>
- <input id="dedupe" type="checkbox" name="dedupe" value="1" <%= ($dedupe ? "checked" : "") %> title="radically filter out any near-duplicates">
- % if($mergedEnd > 0) {
- <label for="sbf">backw.</label>
- <input id="sbf" type="checkbox" name="sbf" value="1" <%= ($searchBaseVocabFirst ? "checked" : "") %> title="If checkecked base vocabulary will be searched first. Otherwise merged vocabulray will be searched first.">
- % }
- <label for="neighbours">max. neighbours:</label>
- <input id="neighbours" size="4" name="n" value="<%= $no_nbs %>">
- <label for="no_iterations">max. iterations</label>
- <input id="no_iterations" name="N" size="4" value="<%= $no_iterations %>">
- <!-- <label for="dosom">SOM</label>
- <input id="dosom" type="checkbox" name="som" value="1" <%= ($show_som ? "checked" : "") %>> -->
- % if($collocators) {
- <label for="sortby">window/sort</label>
- <select id="sortby" name="sort">
- <option value="0" <%= ($sort!=1 && $sort!=2? "selected":"") %>>auto focus</option>
- <!-- <option value="1" <%= ($sort==1? "selected":"") %>>any single position</option>
- <option value="2" <%= ($sort==2? "selected":"") %>>whole window</option> -->
- </select>
- % }
- <input type="button" value="→ KorAP" onclick="queryKorAP();" title="query word with KorAP"/>
- </div>
- </form>
- </div>
- </div>
- </div>
- <div id="topwrapper">
- <div style="visibility: hidden;" id="tabs">
- <ul>
- <li><a href="#tabs-1">Semantics (TSNE-map)</a></li>
- <li><a href="#tabs-2">Semantics (SOM)</a></li>
- <li><a href="#tabs-3">Syntagmatic (collocators)</a></li>
- </ul>
- <div id="tabs-1">
- % if($lists && (@$lists) > 0 && (@$lists)[0]) {
- <div id="wrapper">
- <div id="first" style="width: 320px">
- <table class="display compact nowrap" id="firsttable">
- <thead>
- <tr>
- <th align="right">#</th><th align="right">cos</th><th align="left">similars</th>
- </tr>
- </thead>
- <tbody>
- <tr>
- <td align="right">
- </td>
- <td align="right">
- </td>
- <td></td>
- </tr>
- </tbody>
- </table>
- </div>
- <script>
- </script>
- <div id="second">
- <div id="embed">
- </div>
- <div id="cost">
- </div>
- </div>
- </div>
- % } elsif($word !~ /^\s*$/) {
- <div id="wrapper">
- <div id="not-found-dialog" title="Not found">
- <p>ERROR: "<%= $word %>" not found in vocabluary.</p>
- <p>If you are sure you have spelled the word as intended, you can try to increase the cutoff parameter in the options menu.</p>
- </div>
- <script>
- $( function() {
- $( "#not-found-dialog" ).dialog({
- autoOpen: true,
- modal: true,
- draggable: false,
- height: "auto",
- width: "auto",
- resizable: false,
- buttons: {
- "OK": function() {
- $( this ).dialog( "close" );
- },
- "Apply": function() {
- window.open($(location).attr('pathname')+'?'+$('form').serialize(), "_self");
- }
- }
- });
- });
- </script>
- </div>
- % }
- </div>
- <div id="tabs-2">
- <div id="som2" style="width: 800; height: 800px">
- </div>
- <div id="sominfo1"><span id="somcolor1"> </span> <span id="somword1"> </span> <span id="somcolor2"> </span> <span id="somword2"> </span> <span id="somcolor3"> </span></div>
- <div id="sominfo">SOM iteration <span id="iterations">0</span></div>
- </div>
- <div id="tabs-3">
- <div style="width: 800px" id="secondt">
- <table class="display compact nowrap" id="secondtable">
- <thead>
- <tr>
- % if($collocators) {
- <th>#</th>
- <th align="center" title="The columns (c) around the target are considered for summation are marked with *.">w'</th>
- <th align="right" title="Raw (max.) activation of the collocator in the output layers.">max(a)</th>
- <th title="Co-normalized raw activation sum of the collocator in the selected columns." align="right">⊥Σa</th>
- <th title="Sum of activations over the selected colunns normalized by the total activation sum of the selected columns." align="right">Σa/Σc</th>
- <th title="Sum of the column normalized activations over the selected colunns." align="right">Σ(a/c)</th>
- <th title="Sum of the activations over the whole window normalized by the total window sum (no auto-focus)." align="right">Σa/Σw</th>
- <th align="left">collocator</th>
- % }
- </tr>
- </thead>
- <tbody>
- <tr>
- <td align="right">
- </td>
- <td align="right">
- </td>
- <td align="right">
- </td>
- <td align="right">
- </td>
- <td align="right">
- </td>
- <td align="right">
- </td>
-<script
- src="http://code.jquery.com/ui/1.12.1/jquery-ui.min.js"
- </td>
- </tr>
- </tbody>
- </table>
- </div> <!-- - tab2 -->
- </div> <!-- tabs -->
+ <div id="header">
+ <div id="pagetitle">
+ <h1>DeReKo-Vectors</h1>
</div>
- </div> <!-- topwrapper -->
- <div style="clear: both;"></div>
- </div>
+ <div id="options" class="widget">
+ <form id="queryform">
+ <input id="word" type="text" name="word" placeholder="Word(s) to be searched" value="<%= $word %>"
+ title="When looking for multiple words use spaces as separators to search around the average vector and | as separator to get the neighbours for each word."/>
+ <input id="SEARCH" type="button" value="SEARCH">
+ <input type="button" id="showoptions" name="showoptions" value="Options" />
+ </form>
+ <div id="dropdownoptions" style="display: none">
+ <form id="optionsform">
+ <div class="controlgroup-vertical">
+ <label for="cutoff">cut-off</label>
+ <input id="cutoff" type="text" name="cutoff" size="10" value="<%= $cutoff %>" title="Only consider the most frequent x word forms.">
+ <label for="dedupe">dedupe</label>
+ <input id="dedupe" type="checkbox" name="dedupe" value="1" <%= ($dedupe ? "checked" : "") %> title="radically filter out any near-duplicates">
+ % if($mergedEnd > 0) {
+ <label for="sbf">backw.</label>
+ <input id="sbf" type="checkbox" name="sbf" value="1" <%= ($searchBaseVocabFirst ? "checked" : "") %> title="If checkecked base vocabulary will be searched first. Otherwise merged vocabulray will be searched first.">
+ % }
+ <label for="neighbours">max. neighbours:</label>
+ <input id="neighbours" size="4" name="n" value="<%= $no_nbs %>">
+ <label for="no_iterations">max. iterations</label>
+ <input id="no_iterations" name="N" size="4" value="<%= $no_iterations %>">
+ <!-- <label for="dosom">SOM</label>
+ <input id="dosom" type="checkbox" name="som" value="1" <%= ($show_som ? "checked" : "") %>> -->
+ % if($collocators) {
+ <label for="sortby">window/sort</label>
+ <select id="sortby" name="sort">
+ <option value="0" <%= ($sort!=1 && $sort!=2? "selected":"") %>>auto focus</option>
+ <!-- <option value="1" <%= ($sort==1? "selected":"") %>>any single position</option>
+ <option value="2" <%= ($sort==2? "selected":"") %>>whole window</option> -->
+ </select>
+ % }
+ <input type="button" value="→ KorAP" onclick="queryKorAP();" title="query word with KorAP"/>
+ </div>
+ </form>
+ </div>
+ </div>
+ </div>
+ <div id="topwrapper">
+ <div style="visibility: hidden;" id="tabs">
+ <ul>
+ <li><a href="#tabs-1">Semantics (TSNE-map)</a></li>
+ <li><a href="#tabs-2">Semantics (SOM)</a></li>
+ <li><a href="#tabs-3">Syntagmatic (collocators)</a></li>
+ </ul>
+ <div id="tabs-1">
+ % if($lists && (@$lists) > 0 && (@$lists)[0]) {
+ <div id="wrapper">
+ <div id="first" style="width: 320px">
+ <table class="display compact nowrap" id="firsttable">
+ <thead>
+ <tr>
+ <th align="right">#</th><th align="right">cos</th><th align="left">similars</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td align="right">
+ </td>
+ <td align="right">
+ </td>
+ <td></td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ <script>
+ </script>
+ <div id="second">
+ <div id="embed">
+ </div>
+ <div id="cost">
+ </div>
+ </div>
+ </div>
+ % } elsif($word !~ /^\s*$/) {
+ <div id="wrapper">
+ <div id="not-found-dialog" title="Not found">
+ <p>ERROR: "<%= $word %>" not found in vocabluary.</p>
+ <p>If you are sure you have spelled the word as intended, you can try to increase the cutoff parameter in the options menu.</p>
+ </div>
+ <script>
+ $( function() {
+ $( "#not-found-dialog" ).dialog({
+ autoOpen: true,
+ modal: true,
+ draggable: false,
+ height: "auto",
+ width: "auto",
+ resizable: false,
+ buttons: {
+ "OK": function() {
+ $( this ).dialog( "close" );
+ },
+ "Apply": function() {
+ window.open($(location).attr('pathname')+'?'+$('form').serialize(), "_self");
+ }
+ }
+ });
+ });
+ </script>
+ </div>
+ % }
+ </div>
+ <div id="tabs-2">
+ <div id="som2" style="width: 800; height: 800px">
+ </div>
+ <div id="sominfo1"><span id="somcolor1"> </span> <span id="somword1"> </span> <span id="somcolor2"> </span> <span id="somword2"> </span> <span id="somcolor3"> </span></div>
+ <div id="sominfo">SOM iteration <span id="iterations">0</span></div>
+ </div>
+ <div id="tabs-3">
+ <div style="width: 800px" id="secondt">
+ <table class="display compact nowrap" id="secondtable">
+ <thead>
+ <tr>
+ % if($collocators) {
+ <th>#</th>
+ <th align="center" title="The columns (c) around the target are considered for summation are marked with *.">w'</th>
+ <th align="right" title="Raw (max.) activation of the collocator in the output layers.">max(a)</th>
+ <th title="Co-normalized raw activation sum of the collocator in the selected columns." align="right">⊥Σa</th>
+ <th title="Sum of activations over the selected colunns normalized by the total activation sum of the selected columns." align="right">Σa/Σc</th>
+ <th title="Sum of the column normalized activations over the selected colunns." align="right">Σ(a/c)</th>
+ <th title="Sum of the activations over the whole window normalized by the total window sum (no auto-focus)." align="right">Σa/Σw</th>
+ <th align="left">collocator</th>
+ % }
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td align="right">
+ </td>
+ <td align="right">
+ </td>
+ <td align="right">
+ </td>
+ <td align="right">
+ </td>
+ <td align="right">
+ </td>
+ <td align="right">
+ </td>
+ <script
+ src="http://code.jquery.com/ui/1.12.1/jquery-ui.min.js"
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div> <!-- - tab2 -->
+ </div> <!-- tabs -->
+ </div>
+ </div> <!-- topwrapper -->
+ <div style="clear: both;"></div>
+ </div>
% if($training_args) {
<p>
Word vector model trained with <a href="https://code.google.com/p/word2vec/">word2vec</a> using the following parameters: <pre><%= $training_args %></pre>
</p>
% }
- </body>
+ </body>
</html>