Add constructor to load all resources from Input Streams
diff --git a/tf-ner-poc/src/main/java/org/apache/opennlp/namefinder/SequenceTagging.java b/tf-ner-poc/src/main/java/org/apache/opennlp/namefinder/SequenceTagging.java
index 3713555..69a1748 100644
--- a/tf-ner-poc/src/main/java/org/apache/opennlp/namefinder/SequenceTagging.java
+++ b/tf-ner-poc/src/main/java/org/apache/opennlp/namefinder/SequenceTagging.java
@@ -19,15 +19,22 @@
 
 import java.io.FileInputStream;
 import java.io.IOException;
+import java.io.InputStream;
+import java.nio.file.Files;
+import java.nio.file.Path;
 import java.util.Arrays;
 import java.util.List;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipInputStream;
 
 import org.tensorflow.SavedModelBundle;
 import org.tensorflow.Session;
 import org.tensorflow.Tensor;
 
 import opennlp.tools.namefind.BioCodec;
+import opennlp.tools.namefind.NameSample;
 import opennlp.tools.namefind.TokenNameFinder;
+import opennlp.tools.tokenize.SimpleTokenizer;
 import opennlp.tools.util.Span;
 
 public class SequenceTagging implements TokenNameFinder, AutoCloseable {
@@ -46,6 +53,38 @@
     this.indexTagger = new IndexTagger((new FileInputStream(config.getVocabTags())));
   }
 
+  public SequenceTagging(InputStream vocabWords, InputStream vocabChars,
+                         InputStream vocabTags, InputStream modelZipPackage) throws IOException {
+
+    wordIndexer = new WordIndexer(vocabWords, vocabChars);
+    indexTagger = new IndexTagger(vocabTags);
+
+    Path tmpDir = Files.createTempDirectory("opennlp2_namefinder");
+
+    // Unzip the model to a temp directory
+    ZipInputStream zis = new ZipInputStream(modelZipPackage);
+    ZipEntry zipEntry = zis.getNextEntry();
+    while(zipEntry != null){
+      Path newFile = tmpDir.resolve(zipEntry.getName());
+
+      if (zipEntry.isDirectory()) {
+        Files.createDirectories(newFile);
+      }
+      else {
+        Files.copy(zis, newFile);
+        // This is a bit of hack, but should work fine for now ...
+        newFile.toFile().deleteOnExit();
+      }
+
+      zipEntry = zis.getNextEntry();
+    }
+    zis.closeEntry();
+    zis.close();
+
+    model = SavedModelBundle.load(tmpDir.toString(), "serve");
+    session = model.session();
+  }
+
   @Override
   public Span[] find(String[] sentence) {
     TokenIds tokenIds = wordIndexer.toTokenIds(sentence);