Ejemplo n.º 1
0
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()