function PlWordnet(data) { console.log(data); PlWordnet.data = data; this.analyseData(data); } PlWordnet.wordClick = function(ev) { Lexp.target = PlWordnet.id; var target = ev.target.getAttribute('href'); Lexp.go2URL(target) return false; } PlWordnet.prototype.sortUnits = function(_units) { // console.log(_units); var i; _units.sort(function(a, b) { if (a.synset == b.synset) { return a.unitid > b.unitid ? 1 : -1; } return a.synset > b.synset ? 1 : -1; }); for (i = 0; i < _units.length - 1; i++) { if (_units[i].synset == _units[i + 1].synset) { _units[i + 1].smallestunitid = _units[i].smallestunitid; } } _units.sort(function(a, b) { if (a.smallestunitid == b.smallestunitid) { return a.unitid > b.unitid ? 1 : -1; } return a.smallestunitid > b.smallestunitid ? 1 : -1; }); var i = 0, num = 0, first = -1, ind = 0; while (i < _units.length) { _units[i].rowspan = 0; if (_units[i].synset != ind) { if (first >= 0) { _units[first].rowspan = num; } first = i; num = 1; ind = _units[i].synset; } else { num += 1; } i += 1; } _units[first].rowspan = num; } PlWordnet.fullQualifiermapa = {"og.":"ogólne","pot.":"potoczne","wulg.":"wulgarne","posp.":"pospolite","książk.":"książkowe","urz.":"urzędowe","daw.":"dawne","specj.":"specjalistyczne","nienorm.":"nienormatywne","środ.":"środowiskowe","reg.":"regionalne"} PlWordnet.fullQualifiermapaEnglish = {"og.":"general","pot.":"colloquial","wulg.":"vulgar","posp.":"common","książk.":"bookish","urz.":"official","daw.":"former","specj.":"special","nienorm.":"imprescriptive","środ.":"environmental","reg.":"regional"} PlWordnet.fullQualifier = function(str) { if (str in PlWordnet.fullQualifiermapa) { if(document.body.className == 'pl') { return PlWordnet.fullQualifiermapa[str]; } else { return PlWordnet.fullQualifiermapaEnglish[str]; } } return ""; } PlWordnet.citeSourcemapa = { "P":"przykład spreparowany przez lingwistę mający formę zdania", "W":"przykład z Wikipedii", "WN":"cytat z WikiNews", "Z":"zasłyszane albo wymyślone, teksty z języka mówionego" } PlWordnet.citeSourcemapaEnglish = { "P":"example developed by linguist having form of a sentence", "W":"example from Wikipedia", "WN":"quote from WikiNews", "Z":"overheard or made-up, texts from spoken language" } PlWordnet.citeSource = function(str) { if (str in PlWordnet.citeSourcemapa) { if(document.body.className == 'pl') { return PlWordnet.citeSourcemapa[str]; } else { return PlWordnet.citeSourcemapaEnglish[str]; } } return ""; } PlWordnet.prototype.analyseData = function(data) { // console.log(data); function clean(str) { if (str != null) { return str.slice(0, -1) } return ""; } var _units = []; let language = window.location.href.split("/")[4]; for (var rid in data.synsets) { var synset = data.synsets[rid]; var synsetDescription = data.synsets[rid].definition; for (var uid in synset.units) { var unit = synset.units[uid]; var _unit = new Object(); _unit.unitname = unit.str.split("(")[0]; _unit.unitid = unit.id; _unit.smallestunitid = unit.id; _unit.synset = synset.id; _unit.url = "/lemma/" + language + "/" + unit.lemma; _unit.definition = clean(unit.definition); if (!_unit.definition) { _unit.definition = synsetDescription; } // console.log(_unit.definition); _unit.qualifier = unit.usage_notes; _unit.link = ""; _unit.islemma = unit.lemma == Lexp.element.lemma; if (unit.external_links.length == 0) { _unit.link += ' '; } else { for (var elid in unit.external_links) { var link = unit.external_links[elid]; if (link.length > 0) { _unit.link += '<a href="' + link + '" style="color: inherit;">' + '<span lang="pl" data-toggle="tooltip" data-placement="top" title="Link do zasobu zewnętrznego" class="source glyphicon glyphicon glyphicon-link"></span></a>' + '<span lang="en" data-toggle="tooltip" data-placement="top" title="Link for external resource" class="source glyphicon glyphicon glyphicon-link"></span></a>'; } } } _unit.examples = ""; for (var seid in unit.sense_examples) { if (unit.sense_examples[seid].length > 0) _unit.examples += unit.sense_examples[seid] + '<span rel="tooltip" data-original-title="' + PlWordnet.citeSource(unit.sense_examples_sources[seid]) + '"> #' + unit.sense_examples_sources[seid] + "</span><br>"; } _units.push(_unit); } } if($('#type').val() == 'synsetid') { /* Synset way */ this.sortUnits(data.units); this.data = data.units; } else { /* Normal way */ this.sortUnits(_units); this.data = _units; } } PlWordnet.prototype.createAdditionalInfo = function(jsonData, title, titleEn, lang = 'pl') { let textData = '', quantity = 0; $(jsonData).each(function(index, element) { $(element[2].units).each(function(index2, element2) { let definition = '', horizontalLine = '<hr />'; quantity++; if (element2.definition !== null && element2.definition !== ',' && element2.definition !== '.') { definition = '<p class="description">' + element2.definition + '</p>'; } if (jsonData.length - 1 == index) { if (element[2].units.length - 1 == index2) { horizontalLine = ''; } } textData += // '<a href="http://plwordnet.pwr.wroc.pl/wordnet/lemma/' + element2.lemma + '" title="lemma" target="_blank">' + '<a href="/synsetid/plwordnet/' + element2.synset + '">' + '<p class="title">' + element2.lemma + '</p>' + '</a>' + `<img width="40" height="20" class="img-responsive show-icon" src="/img/lang-${lang}-32.png" alt="Language1" />` + definition + horizontalLine; }); }); if (quantity != 0) { let data = '<div class="plwordnet-box">' + '<h2>' + '<img class="img-responsive show-icon" src="/img/lang-' + lang + '-32.png" alt="Language2" />' + '<span lang="pl">' + title + ' (' + quantity + ')' + '</span>' + '<span lang="en">' + titleEn + ' (' + quantity + ')' + '</span>' + '</h2>' + textData + '</div>'; $('#lexpelement_plwordnet #plwordnet-box-left').append(data); } } PlWordnet.emotionMap = { "+ s":"weak positive", "+ m":"strong positive" }; PlWordnet.prototype.showHTMLForSynset = function() { let synsetID = this.data[0].synset; $('#lexpelement_plwordnet').append( '<div class="plwordnet-container">' + '<div id="plwordnet-box-right"></div>' + '<div id="plwordnet-box-left"></div>' + '</div>'); this.createAdditionalInfo(PlWordnet.data.related.fuzzynimia_synsetów, 'Fuzzynimia synsetów', 'Fuzzyimia of synsets'); this.createAdditionalInfo(PlWordnet.data.related.hiperonimia, 'Hiperonimia', 'Hiperonimia'); this.createAdditionalInfo(PlWordnet.data.related.hiponimia, 'Hiponimia', 'Hyponymy'); this.createAdditionalInfo(PlWordnet.data.related["holonimia/część"], 'Holonimia część', 'Holonimia part'); this.createAdditionalInfo(PlWordnet.data.related["holonimia/miejsce"], 'Holonimia miejsce', 'Holonimia place'); this.createAdditionalInfo(PlWordnet.data.related["synonimia_międzyjęzykowa/Syn_plWN-PWN"], 'Synonimia', 'Synonymy', 'en'); this.createAdditionalInfo(PlWordnet.data.related["Hyponym"], 'Hiponim', 'Hyponymy', 'en'); this.createAdditionalInfo(PlWordnet.data.related["synonimia_międzyjęzykowa/Syn_PWN-plWN"], 'Synonimia', 'Synonymy'); $(PlWordnet.data.units).each(function(index, element) { let examples = '', definition = element.definition || PlWordnet.data.definition || '-', language = (element.pos.indexOf('en') > -1) ? 'en' : 'pl'; $(element.sense_examples).each(function(index2, element2) { if (element2 != '') { examples += '<p class="description">"' + element2 + '" - <i>' + PlWordnet.citeSource(element.sense_examples_sources[index2]) + '</i></p>'; } }); if (examples == '') { examples = '-'; } let data = '<div class="plwordnet-box slides">' + '<div class="fixed-space category"><span lang="pl">Słowo</span><span lang="en">Word</span></div>' + '<div class="fixed-space">' + '<h2 class="lemma">' + element.lemma + '</h2>' + '<img class="img-responsive show-icon" src="/img/lang-' + language + '-32.png" alt="Language3" />' + '<p class="description">' + definition + '</p>' + '</div>' + '<hr />' + '<div class="fixed-space category"><span lang="pl">Domena</span><span lang="en">Domain</span></div>' + '<div class="fixed-space">' + '<p class="description">' + element.domain + '</p>' + '</div>' + '<hr />' + '<div class="fixed-space category"><span lang="pl">Przykłady</span><span lang="en">Examples</span></div>' + '<div class="fixed-space">' + examples + '</div>' + '<hr />' + '<div class="fixed-space category"><span lang="pl">Hiperonimy</span><span lang="en">Hiperonims</span></div>' + '<div class="fixed-space">' + '<p id="show-path" class="description" data-toggle="modal" data-target="#path-modal"><span lang="pl">Pokaż ścieżkę do najwyższego hiperonimu</span><span lang="en">Show path to the highest hiperonim</span></p>' + '</div>' + '<hr />' + showEmotion(element) + '</div>'; $('#lexpelement_plwordnet #plwordnet-box-right').append(data); }); addArrows(); showSlides(slideIndex); $('#lexpelement_plwordnet #plwordnet-box-right').append( // '<p id="show-graph" class="description" data-toggle="modal" data-target="#graph-modal" onClick="PlWordnet.showGraph"><span lang="pl">Wyświetl wizualizację graficzną</span><span lang="en">Show graphic visualization</span></p>' '<div class="fixed-space category"><span lang="pl">Graf</span><span lang="en">Graph</span></div>' + '<div class="fixed-space">' + '<p id="show-graph" class="description" data-toggle="modal" data-target="#graph-modal" onClick="PlWordnet.showGraph"><span lang="pl">Wyświetl wizualizację graficzną</span><span lang="en">Show graphic visualization</span></p>' + '</div>' ); $('#lexpelement_plwordnet').append( '<div id="graph-visualisation">' + '<div class="modal fade" id="graph-modal" role="dialog">' + '<div class="modal-content">' + '<div class="modal-header">' + '<span data-dismiss="modal" class="close" id="aboutAppClose">×</span>' + '<h2 lang="pl">Wizualizacja graficzna</h2>' + '<h2 lang="en">Graphic visualisation</h2>' + '</div>' + '<div id="graph" class="modal-body"></div>' + '<div class="modal-footer">webserwisy@clarin-pl.eu</div>' + '</div>' + '</div>' + '</div>'); $('#lexpelement_plwordnet').append( '<div id="path-visualisation">' + '<div class="modal fade" id="path-modal" role="dialog">' + '<div class="modal-content">' + '<div class="modal-header">' + '<span data-dismiss="modal" class="close" id="aboutAppClose">×</span>' + '<h2 lang="pl">Wizualizacja graficzna</h2>' + '<h2 lang="en">Graphic visualisation</h2>' + '</div>' + '<div id="path" class="modal-body">' + '<svg id="path-to-highest-hiperonim"></svg>' + // '<svg id="path-to-highest-hiperonim" viewBox="0 0 793 1122"></svg>' + '</div>' + '<div class="modal-footer">webserwisy@clarin-pl.eu</div>' + '</div>' + '</div>' + '</div>'); $('#show-graph').on('click', function() { setTimeout(function() { showGraph(synsetID); }, 200); }); } function showEmotion(element) { let emotionEmotions = '', emotionValuations = '', emotionPolarity = element.emotion_markedness || '-', emotionExamples = element.emotion_example || '-'; if (emotionPolarity in PlWordnet.emotionMap) { emotionPolarity = PlWordnet.emotionMap[emotionPolarity]; } $(element.emotion_names).each(function(index2, element2) { if (element2 != '') { emotionEmotions += (index2 == element.emotion_names.length - 1) ? element2 : element2 + ', '; } }); $(element.emotion_valuations).each(function(index2, element2) { if (element2 != '') { emotionValuations += (index2 == element.emotion_valuations.length - 1) ? element2 : element2 + ', '; } }); if (emotionEmotions == '' && emotionValuations == '' && emotionPolarity == '-' && emotionExamples == '-') { return ''; } if (emotionEmotions == '') { emotionEmotions = '-'; } if (emotionValuations == '') { emotionValuations = '-'; } let emotionHTML = '<div class="fixed-space category"><span lang="pl">Annotacje emocjonalne</span><span lang="en">Emotional annotations</span></div>' + '<div class="fixed-space">' + '<div class="emotion-box">' + '<div class="fixed-space-emotion category d-inline-block"><span lang="pl">Nacechowanie</span><span lang="en">Polarity</span></div>' + '<div class="d-inline-block emotion-description">' + emotionPolarity + '</div>' + '</div>' + '<div class="emotion-box">' + '<div class="fixed-space-emotion category d-inline-block"><span lang="pl">Emocje</span><span lang="en">Emotions</span></div>' + '<div class="d-inline-block emotion-description">' + emotionEmotions + '</div>' + '</div>' + '<div class="emotion-box">' + '<div class="fixed-space-emotion category d-inline-block"><span lang="pl">Wartościowanie</span><span lang="en">Valuations</span></div>' + '<div class="d-inline-block emotion-description">' + emotionValuations + '</div>' + '</div>' + '<div class="emotion-box">' + '<div class="fixed-space-emotion category d-inline-block"><span lang="pl">Przykłady</span><span lang="en">Examples</span></div>' + '<div class="d-inline-block emotion-description">' + emotionExamples + '</div>' + '</div>' + '</div>' + '<hr />'; return emotionHTML; } function showGraph(synsetID) { let width = window.innerWidth - 200 || docEl.clientWidth - 200 || bodyEl.clientWidth - 200, height = window.innerHeight - 200 || docEl.clientHeight - 200 || bodyEl.clientHeight - 200; width = document.getElementById('graph').offsetWidth; const graph = new GraphCreator.GraphCreator('graph', false, width, height); graph.showMiniMap(.25, null, 0, 0); graph.initializeFromSynsetId(synsetID); } function createNetworkGraph() { console.log(PlWordnet.data.path); let graph = PlWordnet.data.path; let width = window.innerWidth - 200 || docEl.clientWidth - 200 || bodyEl.clientWidth - 200; let height = window.innerHeight - 200 || docEl.clientHeight - 200 || bodyEl.clientHeight - 200; let svg = d3.select("svg#path-to-highest-hiperonim") .attr("width", width) .attr("height", height) .call(d3.zoom().on("zoom", function () { svg.attr("transform", d3.event.transform); })); let simulation = d3.forceSimulation() .force("link", d3.forceLink().id(function(d) { return d.id; })) // .force("charge", d3.forceManyBody().strength(-5000).distanceMax(900).distanceMin(100)) .force("charge", d3.forceManyBody().strength(-2000).distanceMax(900).distanceMin(100)) .force("center", d3.forceCenter(width / 2, height / 2)); graph.links.forEach(function(d) { d.source = d.source_id; d.target = d.target_id; }); let link = svg.append("g") .style("stroke", "#AAA") .selectAll("line") .data(graph.links) .enter().append("line"); let node = svg.append("g") .attr("class", "nodes") .selectAll("rect") .data(graph.nodes) .enter() .append("rect") .attr("x", function(d) { return d.x; }) .attr("y", function(d) { return d.y; }) .attr("width", 200) .attr("height", 50) .call(d3.drag() .on("start", dragstarted) .on("drag", dragged) .on("end", dragended)); let label = svg.append("g") .attr("class", "labels") .selectAll("text") .data(graph.nodes) .enter().append("text") .attr("class", "label") .text(function(d) { return d.name; }); simulation.nodes(graph.nodes).on("tick", ticked); simulation.force("link").links(graph.links); function ticked() { link.attr("x1", function(d) { return d.source.x + 100; }) .attr("y1", function(d) { return d.source.y; }) .attr("x2", function(d) { return d.target.x + 100; }) .attr("y2", function(d) { return d.target.y; }); node.style("fill", "#D9D9D9") .style("stroke", "#969696") .style("stroke-width", "1px") .attr("x", function(d) { return d.x; }) .attr("y", function(d) { return d.y; }) .attr("width", 200) .attr("height", 50) label.attr("x", function(d) { return d.x + 20; }) .attr("y", function (d) { return d.y + 30; }) .style("font-size", "18px").style("fill", "#4393C3"); } function dragstarted(d) { if (!d3.event.active) { simulation.alphaTarget(0.3).restart(); } d.fx = d.x; d.fy = d.y; } function dragged(d) { d.fx = d3.event.x; d.fy = d3.event.y; } function dragended(d) { if (!d3.event.active) { simulation.alphaTarget(0); } } } function addArrows() { $('#plwordnet-box-right').append( '<div id="arrow-left" onClick="plusSlides(-1)"><</div>' + '<div id="arrow-right" onClick="plusSlides(1)">></div>' ); } var slideIndex = 1; function plusSlides(n) { showSlides(slideIndex += n); } function currentSlide(n) { showSlides(slideIndex = n); } function showSlides(n) { let i, slides = $(".slides"); if (n > slides.length) {slideIndex = 1} if (n < 1) {slideIndex = slides.length} for (i = 0; i < slides.length; i++) { slides[i].style.display = "none"; } slides[slideIndex - 1].style.display = "block"; } PlWordnet.prototype.showHTML = function(tag) { if($('#type').val() == 'synsetid') { this.showHTMLForSynset(); $('#lexpelement_plwordnet img').hide(); // Append Network Graph createNetworkGraph(); } else { tag.html(""); var _html = '<div class="table-responsive" align="left">' + '<table class="table">' + '<thead>' + '<tr>' + '<th style="min-width: 110px">Synset ID</th>' + '<th><span lang="pl">Jednostka</span><span lang="en">Lexical unit</span></th>' + '<th><span lang="pl">Kwalifikator</span><span lang="en">Qualifier</span></th>' + '<th><span lang="pl">Glosa</span><span lang="en">Gloss</span></th>' + '<th> </th>' + '<th><span lang="pl">Przykład użycia</span><span lang="en">Usage example</span></th>' + '</tr>' + '</thead>' + '<tbody>'; for (var uid in this.data) { var unit = this.data[uid]; // console.log(unit); var spanb = ""; var spane = ""; if (unit.islemma) { spanb = '<span style="color:green;">'; spane = '</span>'; } _html += '<tr>'; if (unit.rowspan > 0) { // _html += '<td rowspan=' + unit.rowspan + '>' + unit.synset +'</td>'; _html += '<td rowspan=' + unit.rowspan + '><a type="lexp" href="/synsetid/plwordnet/' + unit.synset +'">' + unit.synset + '</a></td>'; } _html += '<td>' + spanb; if (unit.islemma) { _html += unit.unitname; } else { if($('#type').val() == 'synsetid') { /* Synset way */ let language = window.location.href.split("/")[4]; x = unit.str.substr(0, unit.str.indexOf('(')); _html += '<a type="lexp" href="/lemma/' + language + '/' + unit.lemma + '">' + x + '</a>'; } else { /* Normal way */ _html += '<a type="lexp" href="' + unit.url + '">' + unit.unitname + '</a>'; } } // console.log(unit); var glosaLink = ''; if($('#type').val() == 'synsetid') { /* Synset way */ if (unit.external_links.length > 0) { glosaLink += '<a type="lexp" href="' + unit.external_links[0] + '" style="color: inherit;">' + '<span lang="pl" data-toggle="tooltip" data-placement="top" title="ALink do zasobu zewnętrznego" class="source glyphicon glyphicon glyphicon-link"></span></a>' + '<span lang="en" data-toggle="tooltip" data-placement="top" title="ALink for external resource" class="source glyphicon glyphicon glyphicon-link"></span></a>'; } } else { /* Normal way */ glosaLink = unit.link; } if($('#type').val() == 'synsetid') { let definition = '', example = '', exampleLink = '', qualifier = ''; if (unit.definition != null) { definition = unit.definition; } if (unit.sense_examples[0] != undefined && unit.sense_examples[0] != null && unit.sense_examples[0].length != 0) { example = unit.sense_examples[0]; } if (unit.usage_notes[0] != undefined && unit.usage_notes[0] != null && unit.usage_notes[0].length != 0) { qualifier = unit.usage_notes[0]; } if (unit.sense_examples_sources != null && unit.sense_examples_sources.length != 0) { exampleLink = unit.sense_examples_sources[0]; } /* Synset way */ _html += spane + '</td>'; _html += '<td>' + spanb + '<span rel="tooltip" data-original-title="' + PlWordnet.fullQualifier(unit.qualifier)+'">' + qualifier + '</span>' + spane + '</td>'; _html += '<td>' + spanb + definition + spane + '</td>'; _html += '<td>' + glosaLink + '</td>'; _html += '<td>' + spanb + example + " #" + exampleLink + spane + '</td>'; _html += '</tr>'; } else { let definition = '-', examples = '-', qualifier = '-'; console.log(unit); if (unit.definition != null && unit.definition != '') { definition = unit.definition; } if (unit.examples != null && unit.examples != '') { examples = unit.examples; } if (unit.qualifier != null && unit.qualifier.length != 0) { qualifier = unit.qualifier[0]; } /* Normal way */ // console.log(unit.examples); _html += spane + '</td>'; _html += '<td>' + spanb + '<span rel="tooltip" data-original-title="' + PlWordnet.fullQualifier(unit.qualifier)+'">'+ qualifier + '</span>' + spane + '</td>'; _html += '<td>' + spanb + definition + spane + '</td>'; _html += '<td>' + glosaLink + '</td>'; _html += '<td>' + spanb + examples + spane + '</td>'; _html += '</tr>'; } } _html += '</tbody></table></div>'; tag.html(_html); tag.find("a[type='lexp']" ).click(PlWordnet.wordClick); tag.find('[rel=tooltip]').tooltip(); } } PlWordnet.id = "plwordnet"; $(function () { Element.addVisualizer(PlWordnet.id, PlWordnet); $('#lexp_results').on('mouseup', '#lexpelement_plwordnet', function(event) { let lemma = selectWord() || '', lang = $('#lang').val(), data = new Object(); data.lemma = lemma; data.lang = lang || 'pl'; data.left = event.originalEvent.clientX - 80 || 0; data.top = event.originalEvent.clientY - 55 || 0; if (lemma.length < 10) { data.left = event.originalEvent.clientX - 65 || 0; } positionTooltip(data); }); });