Есть ли способ сравнить данные JCas между конвейерами?
Я устанавливаю новый фреймворк на основе 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 ответ
Объекты (J)Cas, которые передаются через конвейер, обычно используются повторно. Поэтому не имеет смысла хранить ссылки на них в механизме анализа, и также не будет работать сохранение ссылок на любые структуры объектов, которые вы получаете от них, потому что они будут недействительными при сбросе и повторном использовании (J)Cas.
Вы можете записать данные на диск, а затем прочитать их в несколько объектов CAS, которые затем сможете сравнить.
В качестве альтернативы вы можете реализовать механизм анализа, который извлекает интересующие вас данные в независимый набор объектов и основывает на этом свое сравнение.
Если вы хотите выполнить сравнение пар, вы также можете внедрить считыватель, который считывает данные, которые вы хотите сравнить, в два разных представления одного и того же CAS, а затем обрабатывает / сравнивает ваши механизмы анализа. Смотрите, например, DKPro TC PairReader_ImplBase и его подклассы.