Есть ли способ сравнить данные JCas между конвейерами? - PullRequest
0 голосов
/ 12 апреля 2019

Я устанавливаю новый фреймворк на основе UIMA и DKPro-Core. Инфраструктура предоставляет простой способ настройки конвейеров UIMA.

Внутри некоторого JCasAnnotator Я хочу сравнить данные всех документов (в данном случае, я полагаю, различных объектов JCas) попарно или с одним JCas.

runPipeline(createReaderDescription(SomeReader.class),
                somePreprocessingEngineDescription,
                similarityPipelineDescription,
                createEngineDescription(SomeWriter.class)
);

Внутри similarityPipelineDescription Я хотел бы сравнить данные для одного JCas со всеми JCas.

public void process(JCas aJCas) throws AnalysisEngineProcessException {
        // Compare aJcas with all other JCas objects
}

Это рекомендуемый способ, которым кто-то может и будет делать это? Если так, как я могу получить доступ к другим JCas объектам?

Или мне следует сохранить данные, которые я хочу сравнить, и сравнить их позже?

1 Ответ

1 голос
/ 12 апреля 2019

Объекты (J) Cas, которые передаются через конвейер, обычно используются повторно.Поэтому не имеет смысла хранить ссылки на них в механизме анализа, и также не будет работать сохранение ссылок на любые структуры объектов, которые вы получаете от них, потому что они будут недействительными при сбросе и повторном использовании (J) Cas.

Вы можете записать данные на диск и затем прочитать их в несколько объектов CAS, которые затем сможете сравнить.

В качестве альтернативы, вы можете реализовать механизм анализа, который извлекает интересующие вас данные внезависимый набор объектов и основывайте свое сравнение на этом.

Если вы хотите выполнить парное сравнение, вы также можете реализовать устройство чтения, которое считывает данные, которые вы хотите сравнить, в два разных представления одного и того же CAS, а затемСделайте так, чтобы ваши механизмы анализа обрабатывали / сравнивали это.См., Например, DKPro TC PairReader_ImplBase и его подклассы.

...