Example #1
0
    def classify(self, doc, verbose=False):

        model_file = '%ssvm_model' % self.path
        if not self.feats: sbd_util.die('Incomplete model')
        if not os.path.isfile(model_file):
            sbd_util.die('no model [%s]' % model_file)

        ## testing data file
        if verbose: sys.stderr.write('SVM classifying... ')
        lines = []
        frag = doc.frag
        while frag:
            if frag.label == None: svm_label = '0'
            elif frag.label: svm_label = '+1'
            else: svm_label = '-1'
            line = '%s ' % svm_label
            feats = [f + '_' + v for f, v in frag.features.items()]
            svm_feats = [self.feats[f] for f in feats if f in self.feats]
            svm_feats.sort(lambda x, y: x - y)
            line += ' '.join(['%d:1' % x for x in svm_feats])
            lines.append(line)
            frag = frag.next

        #print "!----!",get_open_fds()
        #unused, test_file = tempfile.mkstemp()
        test_file = "tmp1"
        fh = open(test_file, 'w')
        fh.write('\n'.join(lines) + '\n')
        fh.close()
        #print "!----!",get_open_fds()

        #unused, pred_file = tempfile.mkstemp()
        pred_file = "tmp2"
        options = '-v 0'
        cmd = '%s %s %s %s %s' % (SVM_CLASSIFY, options, test_file, model_file,
                                  pred_file)
        os.system(cmd)

        ## get predictions
        total = 0
        pf = open(pred_file, 'r')
        #print pf
        preds = map(float, pf.read().splitlines())
        frag = doc.frag
        while frag:
            frag.pred = sbd_util.logit(preds[total])
            frag = frag.next
            total += 1

        ## clean up
        pf.close()
        os.remove(test_file)
        os.remove(pred_file)

        if verbose: sys.stderr.write('done!\n')
Example #2
0
    def classify(self, doc, verbose=False):

        model_file = '%ssvm_model' %self.path
        if not self.feats: sbd_util.die('Incomplete model')
        if not os.path.isfile(model_file): sbd_util.die('no model [%s]' %model_file)

        ## testing data file
        if verbose: sys.stderr.write('SVM classifying... ')
        lines = []
        frag = doc.frag
        while frag:
            if frag.label == None: svm_label = '0'
            elif frag.label: svm_label = '+1'
            else: svm_label = '-1'
            line = '%s ' %svm_label
            feats = [f+'_'+v for f,v in frag.features.items()]
            svm_feats = [self.feats[f] for f in feats if f in self.feats]
            svm_feats.sort(lambda x,y: x-y)
            line += ' '.join(['%d:1' %x for x in svm_feats])
            lines.append(line)
            frag = frag.next

        #print "!----!",get_open_fds()
        #unused, test_file = tempfile.mkstemp()
        test_file = "tmp1"
        fh = open(test_file, 'w')
        fh.write('\n'.join(lines) + '\n')
        fh.close()
        #print "!----!",get_open_fds()

    
        #unused, pred_file = tempfile.mkstemp()
        pred_file = "tmp2"
        options = '-v 0'
        cmd = '%s %s %s %s %s' %(SVM_CLASSIFY, options, test_file, model_file, pred_file)
        os.system(cmd)

        ## get predictions
        total = 0
        pf = open(pred_file,'r')
        #print pf
        preds = map(float, pf.read().splitlines())
        frag = doc.frag
        while frag:
            frag.pred = sbd_util.logit(preds[total])
            frag = frag.next
            total += 1

        ## clean up
        pf.close()
        os.remove(test_file)
        os.remove(pred_file)
        
        if verbose: sys.stderr.write('done!\n')