Beispiel #1
0
/* This method saves all events to file.
 * Format:
 * name
 * date
 * startTime
 * endTime
 * name
 * date
 * ...
*/
void Calendar::saveEvents()
{

    QFile file("C:/CalendarData/events.txt");
    if(file.open(QFile::WriteOnly | QFile::Truncate | QFile::Text))
    {
        QTextStream eventStream(&file);
        for(int thisEvent = 0; thisEvent < eventListCounter; thisEvent++)
        {
        eventStream << eventList[thisEvent]->getName() << "\n"
        << eventList[thisEvent]->getDate().toString("dd.MM.yyyy") << "\n"
        << eventList[thisEvent]->getStartTime().toString() << "\n"
        << eventList[thisEvent]->getEndTime().toString() << "\n";
        }
    }
    file.close();
}
Beispiel #2
0
// This method load saved informations about events from file and recreate eventList array/vector.
void Calendar::loadEvents()
{
    QFile file("C:/CalendarData/events.txt");
    if(file.open(QFile::ReadOnly))
    {
        QTextStream eventStream(&file);
        while(!eventStream.atEnd())
        {
            QString loadedName, loadedDate, loadedStartTime, loadedEndTime;

            loadedName = eventStream.readLine();
            loadedDate = eventStream.readLine();
            loadedStartTime = eventStream.readLine();
            loadedEndTime = eventStream.readLine();

            QDate convertedDate;
            QTime convertedStartTime, convertedEndTime;

            convertedDate = QDate::fromString(loadedDate, "dd.MM.yyyy");
            convertedStartTime = QTime::fromString(loadedStartTime);
            convertedEndTime = QTime::fromString(loadedEndTime);


            Event **eventListMemory;

            if(eventListCounter > 0)
                eventListMemory = eventList;

            eventList = new Event*[eventListCounter + 1];                 // array of pointers to Event objects
                                                                         // different than future situation of loading from file
            if(eventListCounter > 0)
            {
                for(int i = 0; i < eventListCounter; i++)
                {
                    eventList[i] = eventListMemory[i];
                }

                delete[] eventListMemory;
            }

            eventList[eventListCounter++] = new Event(loadedName, convertedStartTime, convertedEndTime, convertedDate);
        }
    }
    file.close();
}
Beispiel #3
0
void ApParser::train(SentenceReader* sentenceReader, char const* modelFile)
{
  WordIndex		labelIndex;
  vector<string>	labels;

  vector<string>	predLabels;

  // collect events
  list<Tanl::Classifier::Event*>	events;

  WordCounts		predCount; // count predicate occurrences
  int evCount = 0;
  Tanl::Classifier::PID pID = 1;		// leave 0 for bias
  // create inverted index of predicate names
  // used to create vector of pIDs
  EventStream eventStream(sentenceReader, &info);
  while (eventStream.hasNext()) {
    Tanl::Classifier::Event* ev = eventStream.next();
    events.push_back(ev);
    evCount++;		      // count them explicitly, since size() is costly
    if (config.verbose) {
      if (evCount % 10000 == 0)
	cerr << '+' << flush;
      else if (evCount % 1000 == 0)
	cerr << '.' << flush;
    }
    vector<string>& ec = ev->features; // ec = {p1, ... , pn}
    for (unsigned j = 0; j < ec.size(); j++) {
      string& pred = ec[j];
      // decide whether to retain it (# occurrences > cutoff)
      if (predIndex.find(pred.c_str()) == predIndex.end()) {
	// not yet among those retained
	WordCounts::iterator wcit = predCount.find(pred);
	// increment # of occurrences
	int count;
	if (wcit == predCount.end())
	  count = predCount[pred] = 1;
	else
	  count = ++wcit->second;
	if (count >= config.featureCutoff) {
	  predLabels.push_back(pred); // accept it into predLabels
	  predIndex[pred.c_str()] = pID++;
	  predCount.erase(pred);
	}
      }
    }
  }
  if (config.verbose)
    cerr << endl;

  // build cases
  Cases cases;
  cases.reserve(evCount);
  int n = 0;
  Tanl::Classifier::ClassID oID = 0;
  while (!events.empty()) {
    Tanl::Classifier::Event* ev = events.front();
    events.pop_front();
    cases.push_back(Case());
    X& x = cases[n].first;	// features
    // add features
    vector<string>& ec = ev->features; // ec = {p1, ... , pn}
    char const* c = ev->className.c_str();
    for (unsigned j = 0; j < ec.size(); j++) {
      string& pred = ec[j];
      WordIndex::const_iterator pit = predIndex.find(pred.c_str());
      if (pit != predIndex.end()) {
	x.push_back(pit->second);
      }
    }
    if (x.size()) {
      if (labelIndex.find(c) == labelIndex.end()) {
	labelIndex[c] = oID++;
	labels.push_back(c);
      }
      cases[n].second = labelIndex[c];
      n++;
      if (config.verbose) {
	if (n % 10000 == 0)
	  cerr << '+' << flush;
	else if (n % 1000 == 0)
	  cerr << '.' << flush;
      }
      x.push_back(0);		// bias
    }
    delete ev;
  }
  cases.resize(n);
  if (config.verbose)
    cerr << endl;

  int predSize = predLabels.size();
  predSize++;			// bias
  APSV ap(labels.size(), predSize);
  
  ofstream ofs(modelFile, ios::binary | ios::trunc);
  // dump configuration settings
  config.writeHeader(ofs);
  // dump labels
  ofs << labels.size() << endl;
  FOR_EACH (vector<string>, labels, pit)
    ofs << *pit << endl;
  // dump predLabels
  ofs << predLabels.size() << endl;
  FOR_EACH (vector<string>, predLabels, pit)
    ofs << *pit << endl;
  // free memory
  predIndex.clear();
  WordIndex().swap(predIndex); // STL map do not deallocate. resize(0) has no effect
  labelIndex.clear();
  WordIndex().swap(labelIndex);
  // clear memory for unfrequent entities
  info.clearRareEntities();
  // perform training
  ap.train(cases, iter);
  // dump parameters
  ap.save(ofs);
  // dump global info
  info.save(ofs);
}