【问题标题】:How to get Named Entity Extraction using GATE Annie in Java?如何在 Java 中使用 GATE Annie 获取命名实体提取?
【发布时间】:2016-05-17 10:09:20
【问题描述】:

我是GATE ANNIE的新手。我尝试了 GATE GUI 界面,并获得了完成任务的经验。我想知道如何在 Java 中实现 命名实体提取

我做过研发,但找不到任何关于命名实体提取的教程。

是否有任何代码可用于在 Java 中的 GATE ANNIE 中找出 命名实体提取

【问题讨论】:

标签: java nlp named-entity-recognition gate


【解决方案1】:
import gate.*;
import gate.creole.ANNIEConstants;
import gate.util.persistence.PersistenceManager;
import java.io.File;
import java.util.*;

public class AnnieNerExample {

    public static void main(String[] args) throws Exception {
        Gate.setGateHome(new File("C:\\Program Files\\GATE_Developer_8.1"));
        Gate.init();

        LanguageAnalyser controller = (LanguageAnalyser) PersistenceManager
                .loadObjectFromFile(new File(new File(Gate.getPluginsHome(),
                        ANNIEConstants.PLUGIN_DIR), ANNIEConstants.DEFAULT_FILE));

        Corpus corpus = Factory.newCorpus("corpus");
        Document document = Factory.newDocument(
                "Michael Jordan is a professor at the University of California, Berkeley.");
        corpus.add(document); controller.setCorpus(corpus); 
        controller.execute();

        document.getAnnotations().get(new HashSet<>(Arrays.asList("Person", "Organization", "Location")))
            .forEach(a -> System.err.format("%s - \"%s\" [%d to %d]\n", 
                    a.getType(), Utils.stringFor(document, a),
                    a.getStartNode().getOffset(), a.getEndNode().getOffset()));

        //Don't forget to release GATE resources 
        Factory.deleteResource(document); Factory.deleteResource(corpus); Factory.deleteResource(controller);
    }
}

输出:

Person - "Michael Jordan" [0 to 14]
Organization - "University of California" [37 to 61]
Location - "Berkeley" [63 to 71]

罐子

两种可能:

  1. 手册

Quick Start with GATE Embedded:

$GATE_HOME/bin/gate.jar$GATE_HOME/lib 中的JAR 文件添加到Java CLASSPATH($GATE_HOME 是GATE 根目录)

  1. 马文

    <dependency>
        <groupId>uk.ac.gate</groupId>
        <artifactId>gate-core</artifactId>
        <version>8.4</version>
    </dependency>
    

【讨论】:

  • 感谢您的代码。你节省了我的时间。还有一个问题,你用的是哪个 JARS?
  • @dedek 谢谢你的代码,真的很有帮助。我希望运行 TwitIE 管道,这是一个门插件。你碰巧知道怎么做吗?
  • @Mr.Phil 唯一的变化应该在 GAPP 文件中:PersistenceManager.loadObjectFromFile(new File(Gate.getPluginsHome(), "Twitter/resources/twitie-english-only.gapp"))
【解决方案2】:

用于开发和使用 java 代码。最好使用嵌入式门。

pom.xml 文件

<dependencies>
    <dependency>
        <groupId>uk.ac.gate</groupId>
        <artifactId>gate-core</artifactId>
        <version>8.6.1</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/uk.ac.gate.plugins/annie -->
    <dependency>
        <groupId>uk.ac.gate.plugins</groupId>
        <artifactId>annie</artifactId>
        <version>8.6</version>
        <scope>provided</scope>
    </dependency>

</dependencies>

src 中的 Main.java 文件

import gate.*;
import gate.creole.ANNIEConstants;
import gate.creole.Plugin;
import gate.creole.ResourceReference;
import gate.util.persistence.PersistenceManager;

import java.net.URL;
import java.util.Arrays;
import java.util.HashSet;

public class Main {

    public static void main(String[] args) throws Exception {
        Gate.init();
        Plugin anniePlugin = new Plugin.Maven("uk.ac.gate.plugins", "annie", "8.6");
        Gate.getCreoleRegister().registerPlugin(anniePlugin);
        URL annieFile = new ResourceReference(anniePlugin, "resources/" + ANNIEConstants.DEFAULT_FILE).toURL();

        LanguageAnalyser controller = (LanguageAnalyser) PersistenceManager.loadObjectFromUrl(annieFile);

        Corpus corpus = Factory.newCorpus("corpus");
        Document document = Factory.newDocument("Michael Jordan is a professor at the University of California, Berkeley.");
        corpus.add(document);
        controller.setCorpus(corpus);
        controller.execute();


        for (Annotation obj : document.getAnnotations().get(new HashSet<String>(Arrays.asList("Person", "Organization", "Location")))) {
            System.out.print("type : " + obj.getType());
            System.out.print("\t data : " + Utils.stringFor(document, obj));
            System.out.print("\t start : " + obj.getStartNode().getOffset());
            System.out.println("\t end : " + obj.getEndNode().getOffset());
        }
        Factory.deleteResource(document);
        Factory.deleteResource(corpus);
        Factory.deleteResource(controller);
    }
}

示例代码https://github.com/hsali/gate-developer-annie-plugin-example

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-02-17
    • 1970-01-01
    • 1970-01-01
    • 2011-03-11
    • 1970-01-01
    • 2012-10-03
    • 2014-04-12
    • 1970-01-01
    相关资源
    最近更新 更多