我正在使用UIMA构建一个XML文本提取器。由于我对UIMA框架是一个完全的初学者,我想知道如何去做。
我了解到UIMA可以注释文件的特定部分,但是如何高效地提取信息呢?任何帮助都将不胜感激。
谢谢, Jatin
我正在使用UIMA构建一个XML文本提取器。由于我对UIMA框架是一个完全的初学者,我想知道如何去做。
我了解到UIMA可以注释文件的特定部分,但是如何高效地提取信息呢?任何帮助都将不胜感激。
谢谢, Jatin
作为UIMA Ruta的开发者,我在以下用例中使用HtmlAnnotator。在有限的视角下,这当然不是最高效的方法。分析引擎不会为元素使用单独的类型,因为它只知道最常见的html标签,但如果需要,我会将其转换为预定义的UIMA Ruta类型系统。在后端,应用了htmlparser。
import static com.google.common.base.Preconditions.checkArgument;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.List;
import org.apache.uima.UimaContext;
import org.apache.uima.collection.CollectionException;
import org.apache.uima.fit.descriptor.TypeCapability;
import org.apache.uima.jcas.JCas;
import org.apache.uima.resource.ResourceInitializationException;
import org.jdom2.Document;
import org.jdom2.Element;
import org.jdom2.JDOMException;
import org.jdom2.Text;
import org.jdom2.input.SAXBuilder;
import org.jdom2.output.Format;
import org.jdom2.output.XMLOutputter;
import org.jdom2.xpath.XPathExpression;
import org.jdom2.xpath.XPathFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@TypeCapability(outputs = "xxx")
public class XmlCollectionReader extends JCasCollectionReader_ImplBase {
private static Logger LOG = LoggerFactory.getLogger(XmlCollectionReader.class);
private SAXBuilder builder;
private XMLOutputter xo;
private XPathExpression<Object> sentenceXPath;
@Override
public void initialize(UimaContext context) throws ResourceInitializationException {
super.initialize(context);
try {
File corpusDir = new File(inputDir);
checkArgument(corpusDir.exists());
fileIterator = DirectoryIterator.get(directoryIterator, corpusDir, "xml", false);
builder = new SAXBuilder();
xo = new XMLOutputter();
xo.setFormat(Format.getRawFormat());
sentenceXPath = XPathFactory.instance().compile("//S");
} catch (Exception e) {
throw new ResourceInitializationException(
ResourceInitializationException.NO_RESOURCE_FOR_PARAMETERS,
new Object[] { inputDir });
}
}
public void getNext(JCas jcas) throws IOException, CollectionException {
File file = fileIterator.next();
try {
LOG.debug("reading {}", file.getName());
Document doc = builder.build(new FileInputStream(file));
Element rootNode = doc.getRootElement();
String title = xo.outputString(rootNode.getChild("Title").getContent());
for (Object sentence : sentenceXPath.evaluate(rootNode)) {
Element sentenceE = (Element) sentence;
...
}
}
jcas.setDocumentText(...);
} catch (JDOMException e) {
throw new CollectionException(e);
}
}
}