Search in sources :

Example 1 with SAnnotation

use of org.corpus_tools.salt.core.SAnnotation in project ANNIS by korpling.

the class CorefVisualizer method writeOutput.

/**
 * writes Output for the CorefVisualizer
 * @param writer writer to write with
 */
@Override
public void writeOutput(VisualizerInput input, Writer w) {
    // root html element
    Html html = new Html();
    Head head = new Head();
    Body body = new Body();
    html.removeXmlns();
    html.appendChild(head);
    html.appendChild(body);
    try {
        LinkedList<String> fonts = new LinkedList<String>();
        if (input.getFont() != null) {
            Link linkFont = new Link();
            linkFont.setHref(input.getFont().getUrl());
            head.appendChild(linkFont);
            fonts.add(input.getFont().getName());
        }
        fonts.add("serif");
        Link linkJQueryUI = new Link();
        linkJQueryUI.setHref(input.getResourcePath("coref/jquery-ui-1.11.4.custom/jquery-ui.min.css"));
        linkJQueryUI.setRel("stylesheet");
        linkJQueryUI.setType("text/css");
        head.appendChild(linkJQueryUI);
        Link linkJQueryUIStructure = new Link();
        linkJQueryUIStructure.setHref(input.getResourcePath("coref/jquery-ui-1.11.4.custom/jquery-ui.structure.min.css"));
        linkJQueryUIStructure.setRel("stylesheet");
        linkJQueryUIStructure.setType("text/css");
        head.appendChild(linkJQueryUIStructure);
        Script scriptJquery = new Script("text/javascript");
        scriptJquery.setSrc(input.getResourcePath("coref/jquery.js"));
        head.appendChild(scriptJquery);
        Script scriptUI = new Script("text/javascript");
        scriptUI.setSrc(input.getResourcePath("coref/jquery-ui-1.11.4.custom/jquery-ui.min.js"));
        head.appendChild(scriptUI);
        Link linkCoref = new Link();
        linkCoref.setHref(input.getResourcePath("coref/coref.css"));
        linkCoref.setRel("stylesheet");
        linkCoref.setType("text/css");
        head.appendChild(linkCoref);
        Script scriptCoref = new Script("text/javascript");
        scriptCoref.setSrc(input.getResourcePath("coref/CorefVisualizer.js"));
        head.appendChild(scriptCoref);
        body.setStyle("font-family: '" + StringUtils.join(fonts, "', '") + "';");
        // get Info
        globalIndex = 0;
        tokensOfNode = new HashMap<String, List<String>>();
        referentList = new LinkedList<TReferent>();
        komponent = new LinkedList<TComponent>();
        referentOfToken = new HashMap<String, HashMap<Long, Integer>>();
        componentOfToken = new HashMap<String, List<Long>>();
        componenttype = new LinkedList<TComponenttype>();
        SDocument saltDoc = input.getDocument();
        SDocumentGraph saltGraph = saltDoc.getDocumentGraph();
        if (saltGraph == null) {
            body.setText("An Error occured: Could not get Graph of Result (Graph == null).");
            return;
        }
        List<SRelation<SNode, SNode>> edgeList = saltGraph.getRelations();
        if (edgeList == null) {
            return;
        }
        for (SRelation rawRel : edgeList) {
            if (includeEdge(rawRel, input.getNamespace())) {
                SPointingRelation rel = (SPointingRelation) rawRel;
                String relType = componentNameForRelation(rel);
                visitedNodes = new LinkedList<String>();
                // got type for this?
                boolean gotIt = false;
                int componentnr;
                for (componentnr = 0; componentnr < componenttype.size(); componentnr++) {
                    if (componenttype.get(componentnr) != null && componenttype.get(componentnr).type != null && componenttype.get(componentnr).nodeList != null && componenttype.get(componentnr).type.equals(relType) && componenttype.get(componentnr).nodeList.contains(rel.getSource().getId())) {
                        gotIt = true;
                        break;
                    }
                }
                TComponent currentComponent;
                TComponenttype currentComponenttype;
                if (gotIt) {
                    currentComponent = komponent.get(componentnr);
                    currentComponenttype = componenttype.get(componentnr);
                } else {
                    currentComponenttype = new TComponenttype();
                    currentComponenttype.type = relType;
                    componenttype.add(currentComponenttype);
                    componentnr = komponent.size();
                    currentComponent = new TComponent();
                    currentComponent.type = relType;
                    currentComponent.tokenList = new LinkedList<String>();
                    komponent.add(currentComponent);
                    currentComponenttype.nodeList.add(rel.getSource().getId());
                }
                TReferent ref = new TReferent();
                ref.annotations = new HashSet<SerializableAnnotation>();
                for (SAnnotation anno : rel.getAnnotations()) {
                    ref.annotations.add(new SerializableAnnotation(anno));
                }
                ref.component = componentnr;
                referentList.add(ref);
                List<String> currentTokens = getAllTokens(rel.getSource(), componentNameForRelation(rel), currentComponenttype, componentnr, input.getNamespace());
                // neu
                setReferent(rel.getTarget(), globalIndex, 0);
                // neu
                setReferent(rel.getSource(), globalIndex, 1);
                for (String s : currentTokens) {
                    if (!currentComponent.tokenList.contains(s)) {
                        currentComponent.tokenList.add(s);
                    }
                }
                globalIndex++;
            }
        }
        colorlist = new HashMap<Integer, Integer>();
        // A list containing all the generated HTML elements, one list entry
        // for each text.
        List<List<Node>> nodesPerText = new LinkedList<List<Node>>();
        // write output for each text separatly
        List<STextualDS> texts = saltGraph.getTextualDSs();
        if (texts != null && !texts.isEmpty()) {
            for (STextualDS t : texts) {
                DataSourceSequence<Integer> sequence = new DataSourceSequence<>(t, 0, (t.getText() != null) ? t.getText().length() : 0);
                List<SToken> token = saltGraph.getSortedTokenByText(saltGraph.getTokensBySequence(sequence));
                if (token != null) {
                    boolean validText = true;
                    if (Boolean.parseBoolean(input.getMappings().getProperty("hide_empty", "false"))) {
                        validText = false;
                        // check if the text contains any matching annotations
                        for (SToken tok : token) {
                            /* 
                 * The token is only added to this map if an valid edge
                 * (according to the resolver trigger) conntected to 
                 * this token was found.
                 */
                            if (referentOfToken.get(tok.getId()) != null && !referentOfToken.get(tok.getId()).isEmpty()) {
                                validText = true;
                                break;
                            }
                        }
                    }
                    if (validText) {
                        List<Node> nodes = outputSingleText(token, input);
                        nodesPerText.add(nodes);
                    }
                }
            }
            // end for each STexutalDS
            /* 
         * Append the generated output to the body, wrap in table if necessary. 
         */
            // present all texts as columns side by side if using multiple texts
            Table tableTexts = new Table();
            Tr trTextRow = new Tr();
            trTextRow.setCSSClass("textRow");
            // only append wrapper table if we have multiple texts
            if (nodesPerText.size() > 1) {
                body.appendChild(tableTexts);
                tableTexts.appendChild(trTextRow);
            }
            for (List<Node> nodes : nodesPerText) {
                // multi-text mode?
                if (nodesPerText.size() > 1) {
                    Td tdSingleText = new Td();
                    trTextRow.appendChild(tdSingleText);
                    tdSingleText.setCSSClass("text");
                    tdSingleText.appendChild(nodes);
                } else {
                    body.appendChild(nodes);
                }
            }
        } else {
            Text errorTxt = new Text("Could not find any texts for the " + input.getNamespace() + " node namespace (layer).");
            body.appendChild(errorTxt);
        }
        // write HTML4 transitional doctype
        w.append(new Doctype(DocumentType.HTMLTransitional).write());
        // append the html tree
        w.append(html.write());
    } catch (IOException ex) {
        log.error(null, ex);
    }
}
Also used : HashMap(java.util.HashMap) SNode(org.corpus_tools.salt.core.SNode) SStructuredNode(org.corpus_tools.salt.common.SStructuredNode) Node(com.hp.gagawa.java.Node) SToken(org.corpus_tools.salt.common.SToken) Td(com.hp.gagawa.java.elements.Td) SRelation(org.corpus_tools.salt.core.SRelation) SDocumentGraph(org.corpus_tools.salt.common.SDocumentGraph) STextualDS(org.corpus_tools.salt.common.STextualDS) LinkedList(java.util.LinkedList) List(java.util.List) Body(com.hp.gagawa.java.elements.Body) Tr(com.hp.gagawa.java.elements.Tr) SPointingRelation(org.corpus_tools.salt.common.SPointingRelation) Script(com.hp.gagawa.java.elements.Script) Head(com.hp.gagawa.java.elements.Head) Table(com.hp.gagawa.java.elements.Table) SAnnotation(org.corpus_tools.salt.core.SAnnotation) Html(com.hp.gagawa.java.elements.Html) SDocument(org.corpus_tools.salt.common.SDocument) Doctype(com.hp.gagawa.java.elements.Doctype) Text(com.hp.gagawa.java.elements.Text) IOException(java.io.IOException) DataSourceSequence(org.corpus_tools.salt.util.DataSourceSequence) LinkedList(java.util.LinkedList) Link(com.hp.gagawa.java.elements.Link)

Example 2 with SAnnotation

use of org.corpus_tools.salt.core.SAnnotation in project ANNIS by korpling.

the class VakyarthaDependencyTree method selectNode.

/**
 * If the {@link VakyarthaDependencyTree#MAPPING_NODE_KEY} is set, then the
 * value of this mapping is used for selecting the SNode. If the mapping is
 * not set, it falls back to the default behaviour and only SToken are are
 * selected.
 */
private boolean selectNode(SNode n) {
    String annoKey = null;
    if (mappings.containsKey(MAPPING_NODE_KEY)) {
        annoKey = mappings.getProperty(MAPPING_NODE_KEY);
    }
    /**
     * Default behaviour, when mapping is not set correctly or is not set at
     * all.
     */
    if (annoKey == null) {
        if (n instanceof SToken) {
            return true;
        } else {
            return false;
        }
    }
    // if mapping is set, we check, if the node carries the mapped annotation key
    Set<SAnnotation> annos = n.getAnnotations();
    for (SAnnotation a : annos) {
        if (annoKey.equals(a.getName())) {
            return true;
        }
    }
    return false;
}
Also used : SToken(org.corpus_tools.salt.common.SToken) SAnnotation(org.corpus_tools.salt.core.SAnnotation)

Example 3 with SAnnotation

use of org.corpus_tools.salt.core.SAnnotation in project ANNIS by korpling.

the class VakyarthaDependencyTree method printHTMLOutput.

public void printHTMLOutput(VisualizerInput input, Writer writer, Map<SNode, Integer> selectedNodes) {
    SDocumentGraph sDocumentGraph = input.getSResult().getDocumentGraph();
    for (SNode n : sDocumentGraph.getNodes()) {
        if (selectNode(n)) {
            RelannisNodeFeature feat = (RelannisNodeFeature) n.getFeature(ANNIS_NS, FEAT_RELANNIS_NODE).getValue();
            int tokenIdx = feat != null ? (int) feat.getTokenIndex() : -1;
            selectedNodes.put(n, tokenIdx);
        }
    }
    Map<SNode, Integer> node2Int = new HashMap<SNode, Integer>();
    int count = 0;
    for (SNode tok : selectedNodes.keySet()) {
        node2Int.put(tok, count++);
    }
    try {
        println("<html>", writer);
        println("<head>", writer);
        LinkedList<String> fontsText = new LinkedList<String>();
        LinkedList<String> fontsDep = new LinkedList<String>();
        if (input.getFont() != null) {
            fontsText.add(input.getFont().getName());
            fontsDep.add(input.getFont().getName());
            println("<link href=\"" + input.getFont().getUrl() + "\" rel=\"stylesheet\" type=\"text/css\" >", writer);
        }
        fontsText.add("sans-serif");
        fontsDep.add("serif");
        println("<script type=\"text/javascript\" src=\"" + input.getResourcePath("vakyartha/jquery.js") + "\"></script>", writer);
        println("<script type=\"text/javascript\" src=\"" + input.getResourcePath("vakyartha/raphael-min.js") + "\"></script>", writer);
        println("<script type=\"text/javascript\" src=\"" + input.getResourcePath("vakyartha/vakyarthaDependency.js") + "\"></script>", writer);
        // output the data for the javascript
        println("<script type=\"text/javascript\">", writer);
        println("fcolors={};", writer);
        println("shownfeatures=[\"t\"];", writer);
        println("tokens=new Object();", writer);
        count = 0;
        for (SNode node : selectedNodes.keySet()) {
            JSONObject vakyarthaObject = new JSONObject();
            String completeAnnotation = getAnnotation(node);
            String annotationValue = completeAnnotation.replaceFirst(".*=", "");
            String text = getText(node, input);
            // decide, if the visualization is token based.
            if (mappings.containsKey(MAPPING_NODE_KEY)) {
                vakyarthaObject.put("t", annotationValue);
            } else {
                vakyarthaObject.put("t", text);
            }
            vakyarthaObject.put("annotation", annotationValue);
            vakyarthaObject.put("text", text);
            vakyarthaObject.put("tooltip", completeAnnotation);
            JSONObject govs = new JSONObject();
            List<SRelation<SNode, SNode>> sEdges = node.getGraph().getInRelations(node.getId());
            for (SRelation<? extends SNode, ? extends SNode> e : sEdges) {
                if (e instanceof SPointingRelation) {
                    SPointingRelation sRelation = (SPointingRelation) e;
                    boolean includeEdge = true;
                    // check layer
                    if (input.getNamespace() != null) {
                        // must be included in the layer in order to be included
                        includeEdge = false;
                        if (sRelation.getLayers() != null) {
                            for (SLayer layer : sRelation.getLayers()) {
                                if (input.getNamespace().equals(layer.getName())) {
                                    includeEdge = true;
                                    break;
                                }
                            }
                        }
                    }
                    if (includeEdge) {
                        SNode source = (SNode) sRelation.getSource();
                        String label = "";
                        for (SAnnotation anno : sRelation.getAnnotations()) {
                            label = anno.getValue_STEXT();
                            break;
                        }
                        if (sRelation.getSource() != null && node2Int.containsKey(source)) {
                            govs.put(String.valueOf(node2Int.get(source)), label);
                        }
                    }
                }
            // end if pointing relation
            }
            vakyarthaObject.put("govs", govs);
            JSONObject attris = new JSONObject();
            JSONObject tAttris = new JSONObject();
            String tokenColor = "black";
            if (input.getMarkedAndCovered().containsKey(node)) {
                tokenColor = MatchedNodeColors.getHTMLColorByMatch(input.getMarkedAndCovered().get(node));
            }
            tAttris.put("fill", tokenColor);
            tAttris.put("font", "11px " + StringUtils.join(fontsText, ","));
            attris.put("t", tAttris);
            JSONObject depAttris = new JSONObject();
            depAttris.put("fill", "#999");
            depAttris.put("font-style", "italic");
            depAttris.put("font", "12px " + StringUtils.join(fontsDep, ","));
            attris.put("deptext", depAttris);
            vakyarthaObject.put("attris", attris);
            writer.append("tokens[").append("" + count++).append("]=");
            writer.append(vakyarthaObject.toString().replaceAll("\n", " "));
            writer.append(";\n");
        }
        println("</script>", writer);
        println("</head>", writer);
        println("<body id=\"holder\">", writer);
        // the div to render the javascript to
        // println(
        // "<div id=\"holder\"> </div>",
        // writer);
        println("</body>", writer);
        println("</html>", writer);
    } catch (JSONException ex) {
        log.error(null, ex);
    } catch (IOException ex) {
        log.error(null, ex);
    }
}
Also used : SPointingRelation(org.corpus_tools.salt.common.SPointingRelation) RelannisNodeFeature(annis.model.RelannisNodeFeature) SLayer(org.corpus_tools.salt.core.SLayer) SNode(org.corpus_tools.salt.core.SNode) HashMap(java.util.HashMap) SAnnotation(org.corpus_tools.salt.core.SAnnotation) JSONException(org.json.JSONException) IOException(java.io.IOException) LinkedList(java.util.LinkedList) SRelation(org.corpus_tools.salt.core.SRelation) JSONObject(org.json.JSONObject) SDocumentGraph(org.corpus_tools.salt.common.SDocumentGraph)

Example 4 with SAnnotation

use of org.corpus_tools.salt.core.SAnnotation in project ANNIS by korpling.

the class VakyarthaDependencyTree method getAnnotation.

/**
 * Provid the whole annotation ((String)
 * &lt;namespace&gt;::&lt;key&gt;=&lt;value&gt;) value with namespace and
 * annotation key, which was defined in the mappings with the Key
 * {@link VakyarthaDependencyTree#MAPPING_NODE_KEY}.
 *
 * @return Empty string, if the mapping is not defined.
 */
private String getAnnotation(SNode node) {
    if (mappings.containsKey(MAPPING_NODE_KEY) && mappings.getProperty(MAPPING_NODE_KEY) != null) {
        Set<SAnnotation> annos = node.getAnnotations();
        SAnnotation anno = null;
        for (SAnnotation a : annos) {
            if (mappings.getProperty(MAPPING_NODE_KEY).equals(a.getName())) {
                anno = a;
                break;
            }
        }
        return anno != null ? anno.getQName() + "=" + anno.getValue_STEXT() : "";
    }
    return "";
}
Also used : SAnnotation(org.corpus_tools.salt.core.SAnnotation)

Example 5 with SAnnotation

use of org.corpus_tools.salt.core.SAnnotation in project ANNIS by korpling.

the class PDFPageHelper method getAllSSpanWithPageNumber.

private void getAllSSpanWithPageNumber(SDocumentGraph graph) {
    if (graph == null) {
        log.error("could not get page annos from empty graph");
        return;
    }
    List<SSpan> sSpans = graph.getSpans();
    if (sSpans != null) {
        for (SSpan s : sSpans) {
            Set<SAnnotation> sAnnotations = s.getAnnotations();
            if (sAnnotations != null) {
                for (SAnnotation anno : sAnnotations) {
                    // TODO support mappings of resolver vis map
                    if (getPDFPageAnnotationName().equals(anno.getName())) {
                        int leftIdx = getLeftIndexFromSNode(s);
                        int rightIdx = getRightIndexFromSNode(s);
                        if (sspans.containsKey(leftIdx)) {
                            if (sspans.get(leftIdx).containsKey(rightIdx)) {
                                log.warn("an intervall {}-{} is overrided by: {}", s);
                            }
                            sspans.get(leftIdx).put(rightIdx, s);
                        } else {
                            sspans.put(leftIdx, new TreeMap<Integer, SSpan>());
                            sspans.get(leftIdx).put(rightIdx, s);
                        }
                    }
                }
            }
        }
    }
}
Also used : SSpan(org.corpus_tools.salt.common.SSpan) SAnnotation(org.corpus_tools.salt.core.SAnnotation)

Aggregations

SAnnotation (org.corpus_tools.salt.core.SAnnotation)22 SToken (org.corpus_tools.salt.common.SToken)9 SNode (org.corpus_tools.salt.core.SNode)8 SRelation (org.corpus_tools.salt.core.SRelation)8 LinkedList (java.util.LinkedList)6 RelannisNodeFeature (annis.model.RelannisNodeFeature)5 HashMap (java.util.HashMap)4 SPointingRelation (org.corpus_tools.salt.common.SPointingRelation)4 SSpanningRelation (org.corpus_tools.salt.common.SSpanningRelation)4 SFeature (org.corpus_tools.salt.core.SFeature)4 SLayer (org.corpus_tools.salt.core.SLayer)4 Annotation (annis.model.Annotation)3 ArrayList (java.util.ArrayList)3 TreeSet (java.util.TreeSet)3 SDocumentGraph (org.corpus_tools.salt.common.SDocumentGraph)3 SSpan (org.corpus_tools.salt.common.SSpan)3 STextualDS (org.corpus_tools.salt.common.STextualDS)3 DataSourceSequence (org.corpus_tools.salt.util.DataSourceSequence)3 IOException (java.io.IOException)2 HashSet (java.util.HashSet)2