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()); }
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); }