Exemple #1
0
        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);
        }
Exemple #2
0
        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);
        }