Nano Hash - криптовалюты, майнинг, программирование

как вывести Stanford Parser SemanticGraph в виде числового списка узлов и ребер

Пожалуйста, помогите мне закодировать выходные данные Stanford Parser SemanticGraph в виде числового списка узлов и ребер, где узлы имеют идентификаторы и метки, ребра состоят из двух идентификаторов узлов и веса ребра, например: Список узлов: 1 A , 2 B... Список ребер: 1 2 10, 2 1 10. Хотя, согласно stanford nlp javadoc --> Class SemanticGraph:

Не существует механизма возврата всех ребер сразу (например, edgeSet()). Это сделано намеренно. Используйте edgeIterable() для итерации по краям, если это необходимо.

Следовательно, я попытался использовать аналогичный пример с предложением одного из участников форума, но он не заработал. Я использую Эклипс Луна. Есть моя попытка:

import java.io.*;
import java.util.*;

import edu.stanford.nlp.io.*;
import edu.stanford.nlp.ling.*;
import edu.stanford.nlp.pipeline.*;
import edu.stanford.nlp.trees.*;
import edu.stanford.nlp.util.*;

public class StanfordCoreNlpDemo {
    public static void main(String[] args) throws IOException {
        PrintWriter out;
        if (args.length > 1) {
            out = new PrintWriter(args[1]);
        } else {
           out = new PrintWriter(System.out);
        }

        PrintWriter xmlOut = null;
        if (args.length > 2) {
            xmlOut = new PrintWriter(args[2]);
        }

        StanfordCoreNLP pipeline = new StanfordCoreNLP();
        Annotation annotation;
        if (args.length > 0) {
            annotation = new Annotation(IOUtils.slurpFileNoExceptions(args[0]));
        } else {
            annotation = new Annotation("Out of the unconstructed nature ...");    
        }

        pipeline.annotate(annotation);
        pipeline.prettyPrint(annotation, out);
        if (xmlOut != null) {
            pipeline.xmlPrint(annotation, xmlOut);
        }

        // An Annotation is a Map and you can get and use the various analyses individually.
        // For instance, this gets the parse tree of the first sentence in the text.
        List<CoreMap> sentences =  annotation.get(CoreAnnotations.SentencesAnnotation.class);
        if (sentences != null && sentences.size() > 0) {
            CoreMap sentence = sentences.get(0);
            Tree tree = sentence.get(TreeCoreAnnotations.TreeAnnotation.class);
            out.println();
            out.println("The first sentence parsed is:");
            tree.pennPrint(out);
            SemanticGraph sg = sg.get(StanfordCoreNlpSemGraph.class);
            for (SemanticGraphEdge edge : sg.getEdgesIterable()) {
                int headIndex = edge.getGovernor().index();
                int depIndex = edge.getDependent().index();
                int weight = 1 // Not sure what "edge weight" if at all put here?
                System.out.printf("%d %d %d%n", headIndex, depIndex, weight);
            }
        }
    }
}

Я получаю следующие две ошибки:

SemanticGraph cannot be resolved to a type --> SemanticGraph sg = sg.get(StanfordCoreNlpSemGraph.class); 
SemanticGraphEdge cannot be resolved to a type --> for (SemanticGraphEdge edge : sg.getEdgesIterable()) 

Кроме того, мне нужен список узлов, который можно получить, перебирая токены в предложении и распечатывая их. Но опять же, я не уверен, как это реализовать. Заранее большое спасибо за вашу помощь.


Ответы:


1

Почему вы пытаетесь получить экземпляр семантического графа от самого себя?

Мне кажется, что вы должны получить SemanticGraph из предложения, используя:

SemanticGraph sg = sentence.get(SemanticGraphCoreAnnotations.BasicDependenciesAnnotation.class);
15.10.2015
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..