private int MergeDuplicates() { int numMerged = 0; for (int i = 0; i < latticeWords.Count - 1; i++) { HTKLatticeReader.LatticeWord first = latticeWords[i]; for (int j = i + 1; j < latticeWords.Count; j++) { HTKLatticeReader.LatticeWord second = latticeWords[j]; if (first.Equals(second)) { if (Debug) { log.Info("removed duplicate"); } first.Merge(second); latticeWords.Remove(j); wordsStartAt[second.startNode].Remove(second); wordsEndAt[second.endNode].Remove(second); for (int k = second.startNode; k <= second.endNode; k++) { wordsAtTime[k].Remove(second); } numMerged++; j--; } } } return(numMerged); }
private void ChangeEndTimes(IList <HTKLatticeReader.LatticeWord> words, int newEndTime) { List <HTKLatticeReader.LatticeWord> toRemove = new List <HTKLatticeReader.LatticeWord>(); foreach (HTKLatticeReader.LatticeWord lw in words) { latticeWords.Remove(lw); int oldEndTime = lw.endNode; lw.endNode = newEndTime; if (latticeWords.Contains(lw)) { if (Debug) { log.Info("duplicate found"); } HTKLatticeReader.LatticeWord twin = latticeWords[latticeWords.IndexOf(lw)]; // assert (twin != lw) ; lw.endNode = oldEndTime; twin.Merge(lw); wordsStartAt[lw.startNode].Remove(lw); //wordsEndAt[lw.endNode].remove(lw); toRemove.Add(lw); for (int i = lw.startNode; i <= lw.endNode; i++) { wordsAtTime[i].Remove(lw); } } else { if (oldEndTime > newEndTime) { for (int i = newEndTime + 1; i <= oldEndTime; i++) { wordsAtTime[i].Remove(lw); } } else { for (int i = oldEndTime + 1; i <= newEndTime; i++) { wordsAtTime[i].Add(lw); } } latticeWords.Add(lw); if (oldEndTime != newEndTime) { //wordsEndAt[oldEndTime].remove(lw); toRemove.Add(lw); wordsEndAt[newEndTime].Add(lw); } } } words.RemoveAll(toRemove); }