Пример #1
0
std::vector<WordAnalysis> Vabamorf::analyze(
    StringVector const& sentence,
    const bool disambiguate,
    const bool guess,
    const bool phonetic,
    const bool propername) {

    applyMorfSettings(linguistic, guess, phonetic, propername);
    CFSArray<CFSVar> words = convertInput(sentence);
    addAnalysis(linguistic, disambiguator, words, disambiguate);
    return convertOutput(words);
}
 foreach(AbstractAnalysis* item, analyzes)
 {
     addAnalysis(item->clone());
 }
Пример #3
0
void AnalysisManager::startSequence(void)
{
    if(inFilesList_.size()==0 || (theXmlParser_->getDocument())==0)
        return;

    currentOperation_ = "Running analyses";
    STDLINE(currentOperation_,ACRed);
    abort_            = false;
    isFinished_       = false;
    currentEntry_     = 0;
    completionStatus_ = 0;
    currentEntry_     = 0;

    resetAnalyses();
    openOutFile();

    setMaxNumberOfThreads(atoi(theXmlParser_->getGeneral()->getNumberOfThreads().c_str()));
    setThreadEvents();

    if(abort_) return;

    if((theXmlParser_->getPlanes())["Dut0"]->useCalibrations())
    {
        STDLINE("Setting calibrations for Dut0...",ACRed);
        setupCalibrations(0);
        STDLINE("Done!",ACGreen);
    }
    else if((theXmlParser_->getPlanes())["Dut1"]->useCalibrations())
    {
        STDLINE("Setting calibrations for Dut1...",ACRed);
        setupCalibrations(1);
        STDLINE("Done!",ACGreen);
    }
    else
        STDLINE("Not using calibrations!",ACRed);

    std::map<int, std::pair<std::string,XmlAnalysis*> > analyses = theXmlParser_->getAnalyses();
    int totAnalysesToRun = 0;
    for(std::map<int, std::pair<std::string, XmlAnalysis*> >::iterator iy = analyses.begin(); iy != analyses.end(); ++iy)
    {
        if(iy->second.second->isToRun())
        {
            std::string analName = iy->second.first;
            int it = iy->second.second->getPriority();
            addAnalysis(it, analName);
            analyses[it].second->setCutsList();
            ++totAnalysesToRun;

            std::stringstream ss;
            ss << it;
            STDLINE("Adding " + analName + " analysis with priority " + ss.str(), ACWhite);
        }
    }

    std::sort(analysesOrder_.begin(), analysesOrder_.end(), sorter_);

    completionStatus_ = 1;
    if(abort_) return;

    //initializeTrees();//Done already in setThreadEvents()

    completionStatus_ = 2;
    if(abort_) return;

    currentOperation_ = "Begin jobs";
    STDLINE(currentOperation_, ACRed);

    for (int it = 0; it < totAnalysesToRun; ++it)
    {
        setCutsFormula(analyses[it].first,analyses[it].second->getCutsList());
    }
    completionStatus_ = 3;
    float completionRunning = 95/analysesOrder_.size();
    float n = 0;

    for (int it = 0; it < totAnalysesToRun; ++it)
    {
        analyses_[it].second->setDoNotDelete(true);//Because the out file is open and it will delete the objects when closed

        setListOfRun(analyses_[it].second);

        if (analyses[it].first.find("After") != std::string::npos)
        {
            writeOutFile();
            analyses_[it].second->getInFile(outFile_);
        }

        currentOperation_ = "Begin " + analyses_[it].first + "jobs";
        STDLINE(currentOperation_, ACRed);

        if (!outFile_) STDLINE("Where the hell is the output file??", ACRed);
        outFile_->cd();
        analyses_[it].second->beginJob();

        currentOperation_ += " done!";
        STDLINE(currentOperation_, ACGreen);

        if(abort_) return;
        currentOperation_ += " done!";
        STDLINE(currentOperation_, ACGreen);

        completionStatus_      = 3 + completionRunning*n + 1;
        if(abort_) return;
        completionStatusBegin_ = completionStatusEnd_ = completionStatus_;

        if(abort_) return;
        currentOperation_ = "Running " + analyses_[it].first + " analysis";
        STDLINE(currentOperation_, ACRed);

        currentEntry_ = 0;
        completionStatusBegin_ = completionStatusEnd_;
        completionStatusEnd_ += completionRunning -1;
        resetThreadedEntries();
        outFile_->cd();
        analyses_[it].second->runAnalysis();
        if(abort_) return;
        currentOperation_ = analyses_[it].first + " analysis done!";
        STDLINE(currentOperation_, ACGreen);

        if(abort_) return;
        currentOperation_ = "End " + analyses_[it].first + " jobs";
        STDLINE(currentOperation_, ACRed);

        outFile_->cd();
        analyses_[it].second->endJob();

        currentOperation_ += " done!";
        STDLINE(currentOperation_, ACGreen);

        n += 1;
        if(abort_) return;
    }
    closeInFiles();

    completionStatus_ = completionStatusEnd_;
    if(abort_) return;
    currentOperation_ += " done!";
    STDLINE(currentOperation_, ACGreen);

    if(abort_) return;
    currentOperation_ = "Writing file " + outFileName_;
    STDLINE(currentOperation_, ACRed);
    writeOutFile();
    //closeOutFile();
    resetAnalyses();
    completionStatus_ = 99;
    if(abort_) return;
    currentOperation_ += " done!";
    STDLINE(currentOperation_,ACGreen);

    isFinished_ = true;
    currentOperation_ = "Analyses completed!";
    STDLINE(currentOperation_,ACGreen);
}