Изменение значений по умолчанию ресурсов ANNIE в GATE из Java-кода

Вопрос или проблема

В GATE значения по умолчанию для ANNIE устанавливаются во время инициализации, но иногда в зависимости от требований их необходимо изменить.

Мое требование : Я хочу извлекать английские предложения, не учитывая “символ переноса строки”, но учитывая “точку”, что дает правильные предложения. Для этого мне нужно изменить значение по умолчанию для transducerURL в SentenceSplitter в ANNIE. Это можно сделать двумя способами:

  1. Используя ANNIE_with_defaults.gapp – изменив значение initparams в Sentencesplitter и получив доступ из Java:

     Gate.setGateHome(new File(Configuration.GATE_HOME));                        
     Gate.init();
    // Загрузить ANNIE с настройками по умолчанию из папки плагинов
    File pluginsHome = Gate.getPluginsHome();
    File anniePlugin = new File(pluginsHome, ANNIEConstants.PLUGIN_DIR);
    File annieGapp = new File(anniePlugin, ANNIEConstants.DEFAULT_FILE);
    annieController = (CorpusController) PersistenceManager.loadObjectFromFile(annieGapp);
    

Я не могу найти, где изменить его значение в файле gapp.

  1. После инициализации GATE, получить доступ к ResourceData с помощью CreoleRegister и изменить значение по умолчанию для параметра transducerURL следующим образом:

     String resourceClassName = "gate.creole.splitter.SentenceSplitter";
     ResourceData resData = Gate.getCreoleRegister().get(resourceClassName);
    //System.out.println(resData.getParameterList());
    ParameterList params = resData.getParameterList();
    List<List<Parameter>> param =  params.getInitimeParameters();
    System.out.println(param);
    //System.out.println(param.get(0));
    for(List<Parameter> plist : param)
    {
        for(Parameter pm : plist)
        {
            System.out.println("Имя : "+pm.getName()+", "+pm.getDefaultValue());
        }
    }
    

Но у Parameter нет метода setDefaultvalue.

Как я могу это исправить?

Для любой из этих ситуаций лучший подход – построить приложение так, как вам нужно, используя GATE Developer, “сохранить состояние приложения”, чтобы создать свой собственный пользовательский файл gapp, затем передать ваш новый gapp в PersistenceManager вместо загрузки стандартного ANNIE_with_defaults.

Я решил проблему, используя creole.xml. Я пробовал с SentenceSplitter, но он дает мне неправильные предложения. Поэтому я вместо этого использую RegexSentenceSplitter. Добавил несколько строк в creole.xml-

<RESOURCE>
    <CLASS>gate.creole.splitter.RegexSentenceSplitter</CLASS>
    <PARAMETER NAME="externalSplitListURL" DEFAULT="file:/C:/Program%20Files/GATE_Developer_8.1/plugins/ANNIE/resources/regex-splitter/external-split-patterns.txt" COMMENT="URL для пользовательского external-split-patterns.txt" SUFFIXES="txt;text">java.net.URL</PARAMETER>
    <PARAMETER NAME="internalSplitListURL" DEFAULT="file:/C:/Program%20Files/GATE_Developer_8.1/plugins/ANNIE/resources/regex-splitter/internal-split-patterns.txt" COMMENT="URL для пользовательского internal-split-patterns.txt" SUFFIXES="txt;text">java.net.URL</PARAMETER>
    <PARAMETER NAME="nonSplitListURL" DEFAULT="file:/C:/Program%20Files/GATE_Developer_8.1/plugins/ANNIE/resources/regex-splitter/non-split-patterns.txt" COMMENT="URL для пользовательского non-split-patterns.txt" SUFFIXES="txt;text">java.net.URL</PARAMETER>
</RESOURCE>

Затем загрузив ANNIE_with_defaults.gapp из кода бэкенда, как показано в вопросе.

Надеюсь, это может быть полезно.

Ответ или решение

Изменение значений по умолчанию ресурсов ANNIE в GATE с помощью кода на Java может быть необходимым для настройки работы системы под конкретные требования проекта по обработке естественного языка. Ниже приведен пошаговый анализ, как можно модифицировать параметры, такие как transducerURL в SentenceSplitter.

Шаг 1: Инициализация GATE

Для начала необходимо инициализировать GATE. Это обеспечит доступ к необходимым ресурсам и библиотекам:

Gate.setGateHome(new File(Configuration.GATE_HOME));                        
Gate.init();

Шаг 2: Загрузка ANNIE с настройками по умолчанию

После инициализации GATE загрузите ANNIE с использованием файла ANNIE_with_defaults.gapp. Убедитесь, что путь к плагину ANNIE правильный:

File pluginsHome = Gate.getPluginsHome();
File anniePlugin = new File(pluginsHome, ANNIEConstants.PLUGIN_DIR);
File annieGapp = new File(anniePlugin, ANNIEConstants.DEFAULT_FILE);
annnieController = (CorpusController) PersistenceManager.loadObjectFromFile(annieGapp);

Шаг 3: Изменение параметра transducerURL

Если ваше требование заключается в изменении значения transducerURL в SentenceSplitter, вы можете сделать это несколькими способами.

Вариант 1: Использование creole.xml

Этот способ подразумевает редактирование creole.xml, где вы можете добавить вашу собственную конфигурацию для RegexSentenceSplitter, если стандартный SentenceSplitter не удовлетворяет вашим требованиям.

<RESOURCE>
    <CLASS>gate.creole.splitter.RegexSentenceSplitter</CLASS>
    <PARAMETER NAME="externalSplitListURL" DEFAULT="file:/путь/к/external-split-patterns.txt" COMMENT="URL к файлу с внешними шаблонами разбиения" SUFFIXES="txt;text">java.net.URL</PARAMETER>
    <PARAMETER NAME="internalSplitListURL" DEFAULT="file:/путь/к/internal-split-patterns.txt" COMMENT="URL к файлу с внутренними шаблонами разбиения" SUFFIXES="txt;text">java.net.URL</PARAMETER>
    <PARAMETER NAME="nonSplitListURL" DEFAULT="file:/путь/к/non-split-patterns.txt" COMMENT="URL к файлу с неразделяющими шаблонами" SUFFIXES="txt;text">java.net.URL</PARAMETER>
</RESOURCE>

Это обеспечит загрузку пользовательских настроек для разделителей предложений.

Шаг 4: Проверка и отладка

После внесения изменений убедитесь, что все изменения корректно применены и протестируйте приложение, чтобы убедиться в правильности разбиения предложений. Вы можете использовать функционал System.out.println() для отладки:

String resourceClassName = "gate.creole.splitter.SentenceSplitter";
ResourceData resData = Gate.getCreoleRegister().get(resourceClassName);
ParameterList params = resData.getParameterList();
List<List<Parameter>> param = params.getInitimeParameters();
for(List<Parameter> plist : param) {
    for(Parameter pm : plist) {
        System.out.println("Name: " + pm.getName() + ", Default Value: " + pm.getDefaultValue());
    }
}

Заключение

Следуя вышеописанным шагам, вы сможете успешно изменить параметры по умолчанию для ресурсов ANNIE в GATE. Конструкция с creole.xml является гибким решением и позволяет оптимизировать процесс обработки текстов в зависимости от специфики вашего проекта. Не забывайте тестировать изменения и следить за возможными ошибками в процессе работы.

Оцените материал
Добавить комментарий

Капча загружается...