class TermNumerator(Observable): def __init__(self, path, lruTaxonomyWriterCacheSize=100): Observable.__init__(self) taxoDirectory = MMapDirectory(File(path)) taxoDirectory.setUseUnmap(False) self._taxoWriter = DirectoryTaxonomyWriter(taxoDirectory, IndexWriterConfig.OpenMode.CREATE_OR_APPEND, LruTaxonomyWriterCache(lruTaxonomyWriterCacheSize)) def numerateTerm(self, term): if not term: return return self._taxoWriter.addCategory(FacetLabel([term])) def getTerm(self, nr): if not hasattr(self, "_taxoReader"): self._taxoReader = DirectoryTaxonomyReader(self._taxoWriter) tr = DirectoryTaxonomyReader.openIfChanged(self._taxoReader) if tr: self._taxoReader.close() self._taxoReader = tr return self._taxoReader.getPath(nr).components[0] def handleShutdown(self): print 'handle shutdown: saving TermNumerator' from sys import stdout; stdout.flush() self._taxoWriter.commit() def close(self): self._taxoWriter.close()