public string Evalulate(string keyFile, string devFile, string dumpFile) { var keyModel = new ReadModel(keyFile); var devModel = new ReadModel(devFile); var dumpOutputModel = new WriteModel(dumpFile); var keyIter = keyModel.ModelIterator().GetEnumerator(); var devIter = devModel.ModelIterator().GetEnumerator(); float expected = 0; float correct = 0; float found = 0; float line = 0; string dump; while (keyIter.MoveNext() && devIter.MoveNext()) { var key = keyIter.Current; var dev = devIter.Current; line++; if (!key.Key.Equals(dev.Key)) { dump = "line: " + line + " " + key.Key + " doesn't match " + dev.Key+"\r\n"; dumpOutputModel.WriteLine(dump); dumpOutputModel.Flush(); return dump; } if (key.Value.Contains("LOCATION")) { expected++; if (!dev.Value.Contains("LOCATION")) continue; found++; correct++; } else if (dev.Value.Contains("LOCATION")) { found++; } } dump = "found: " + found + " expected: " + expected + " correct: " + correct +"\r\n"; dumpOutputModel.WriteLine(dump); float precision = correct/found; float recall = correct/expected; float f1Score = (2*precision*recall)/(precision + recall); dump += "precision\t recall \t f1score\t\r\n"; dumpOutputModel.WriteLine("precision\t recall \t f1score\t"); dump += precision.ToString(CultureInfo.InvariantCulture) + "\t" + recall.ToString(CultureInfo.InvariantCulture) + "\t" + f1Score.ToString(CultureInfo.InvariantCulture) +"\r\n"; dumpOutputModel.WriteLine(precision.ToString(CultureInfo.InvariantCulture)+"\t"+ recall.ToString(CultureInfo.InvariantCulture)+ "\t" + f1Score.ToString(CultureInfo.InvariantCulture)); dumpOutputModel.Flush(); return dump; }
public void Dump() { var output = new WriteModel(string.Concat(_outputFile, ".preceptron")); for (int index = 0; index < WeightVector.FeatureCount; index++) { output.WriteLine(string.Format("{0} {1} {2}", index, MapFeatures.DictKToFeatures[index], _useAvg ? AvgWeightVector.WeightArray[index] : WeightVector.WeightArray[index])); } output.Flush(); }
public void Dump(string outputFile, Dictionary<int, string> dictKtoFeature) { Console.WriteLine(DateTime.Now+" training is complete"); var output = new WriteModel(outputFile); var sortedDictionary = from pair in _weightVector.WDictionary orderby Math.Abs(pair.Value) descending select pair; foreach (var weight in sortedDictionary) { output.WriteLine(string.Format("{0} {1} {2}", weight.Key, dictKtoFeature[weight.Key], weight.Value)); } output.Flush(); }
public void Dump() { var output = new WriteModel(string.Concat(_outputFile, ".temp")); var sortedDictionary = from pair in WeightVector.WDictionary orderby Math.Abs(pair.Value) descending select pair; foreach (var weight in sortedDictionary) { output.WriteLine(string.Format("{0} {1}", MapFeatures.DictKToFeatures[weight.Key], weight.Value)); //output.WriteLine(string.Format("{0} {1} {2}", weight.Key, // MapFeatures.DictKToFeatures[weight.Key], weight.Value)); } output.Flush(); }
internal static void CreateInputForCRF(string input, string output) { var reader = new ReadModel(input); var keyWriter = new WriteModel(string.Concat(output, ".key")); var devWriter = new WriteModel(string.Concat(output, ".key.dev")); foreach (var line in reader.GetNextLine()) { var words = line.Split(new[] {' '}); if (words.Length < 4) continue; foreach (var word in words) { if (string.IsNullOrEmpty(word.Trim())) continue; if (word.EndsWith("{LOCATION}")) { keyWriter.WriteLine(word.Replace("{LOCATION}", "") + " " + "LOCATION"); devWriter.WriteLine(word.Replace("{LOCATION}", "")); } else if (word.EndsWith("{LOCATION}.")) { keyWriter.WriteLine(word.Replace("{LOCATION}.", ".") + " " + "LOCATION"); devWriter.WriteLine(word.Replace("{LOCATION}.", ".")); } else { keyWriter.WriteLine(word + " " + "OTHER"); devWriter.WriteLine(word); } } keyWriter.WriteLine(""); devWriter.WriteLine(""); } keyWriter.Flush(); devWriter.Flush(); }
public void Parse(string input, string output) { var readModel= new ReadModel(input); var writeModel = new WriteModel(output); var writeDevModel = new WriteModel(output+".dev"); //var tempWrite = new WriteModel(output + "tempWrite"); var temp = new List<string>(); foreach (var line in readModel.GetNextLine()) { var newLine = RemoveTags(line); newLine = ReplaceTags(newLine); newLine = RemoveAllTags(newLine); if (string.IsNullOrEmpty(newLine)) continue; //tempWrite.WriteLine(newLine); var split = newLine.Split(new char[] {' '}); temp.AddRange(split.ToList()); //temp.Add("##NEWLINE##"); } //tempWrite.Flush(); bool location = false; var lastStr = string.Empty; foreach (var tempStr in temp) { var str = tempStr.Trim(); if (string.IsNullOrEmpty(str)) { lastStr = ""; continue; } //if (str.Equals("##NEWLINE##")) { if (!location && lastStr.EndsWith(".") && !IsSalutationAbbr(lastStr)) { lastStr = string.Empty; writeModel.WriteLine(""); writeDevModel.WriteLine(""); continue; } } if (location) { if (str.Equals("##ENDTAG##")) { location = false; lastStr = ""; continue; } writeModel.WriteLine(str + " " + "LOCATION"); writeDevModel.WriteLine(str); lastStr = str; continue; } if (str.Equals("##LOCATIONSTARTTAG##")) { lastStr = ""; location = true; continue; } if (str.Equals("##ENDTAG##")) { lastStr = ""; continue; } writeModel.WriteLine(str + " "+ "OTHER"); writeDevModel.WriteLine(str); lastStr = str; } writeModel.Flush(); writeDevModel.Flush(); }
public void Dump(string outputFile, Dictionary<int, string> dictKtoFeature) { Console.WriteLine(DateTime.Now+" training is complete"); var output = new WriteModel(outputFile); for (int index = 0; index <_weightVector.FeatureCount; index++) { output.WriteLine(string.Format("{0} {1} {2}", index, dictKtoFeature[index], _weightVector.WeightArray[index])); } //var sortedDictionary = from pair in _weightVector.WDictionary // orderby Math.Abs(pair.Value) descending // select pair; //foreach (var weight in sortedDictionary) //{ // output.WriteLine(string.Format("{0} {1} {2}", weight.Key, // dictKtoFeature[weight.Key], weight.Value)); //} output.Flush(); //Logger.Flush(); }