package org.deeplearning4j.iterator.provider; import lombok.NonNull; import org.deeplearning4j.berkeley.Pair; import org.deeplearning4j.iterator.LabeledSentenceProvider; import org.deeplearning4j.text.documentiterator.LabelAwareIterator; import org.deeplearning4j.text.documentiterator.LabelledDocument; import java.util.List; /** * Simple class for conversion between LabelAwareIterator -> LabeledSentenceProvider for neural nets. * Since we already have converters for all other classes - this single converter allows us to accept all possible iterators * * @author raver119@gmail.com */ public class LabelAwareConverter implements LabeledSentenceProvider { private LabelAwareIterator backingIterator; private List<String> labels; public LabelAwareConverter(@NonNull LabelAwareIterator iterator, @NonNull List<String> labels) { this.backingIterator = iterator; this.labels = labels; } @Override public boolean hasNext() { return backingIterator.hasNext(); } @Override public Pair<String, String> nextSentence() { LabelledDocument document = backingIterator.nextDocument(); // TODO: probably worth to allow more then one label? i.e. pass same document twice, sequentially return Pair.makePair(document.getContent(), document.getLabels().get(0)); } @Override public void reset() { backingIterator.reset(); } @Override public int totalNumSentences() { return -1; } @Override public List<String> allLabels() { return labels; } @Override public int numLabelClasses() { return labels.size(); } }