Example #1
0
        //Unknown word recognition
        //pWordSegResult:word Segmentation result;
        //graphOptimum: The optimized segmentation graph
        //graphSeg: The original segmentation graph
        public bool Recognition(WordResult[] pWordSegResult, RowFirstDynamicArray <ChainContent> graphOptimum,
                                List <AtomNode> atomSegment, WordDictionary dictCore)
        {
            ChainItem <ChainContent> item;
            int    nStartPos = 0, j = 0, nAtomStart, nAtomEnd, nPOSOriginal;
            double dValue;

            m_roleTag.POSTagging(pWordSegResult, dictCore, m_dict);
            //Tag the segmentation with unknown recognition roles according the core dictionary and unknown recognition dictionary
            for (int i = 0; i < m_roleTag.m_nUnknownWordsCount; i++)
            {
                while (j < atomSegment.Count && nStartPos < m_roleTag.m_nUnknownWords[i, 0])
                {
                    nStartPos += atomSegment[j++].sWord.Length;
                }

                nAtomStart = j;
                while (j < atomSegment.Count && nStartPos < m_roleTag.m_nUnknownWords[i, 1])
                {
                    nStartPos += atomSegment[j++].sWord.Length;
                }

                nAtomEnd = j;
                if (nAtomStart < nAtomEnd)
                {
                    item = graphOptimum.GetElement(nAtomStart, nAtomEnd);
                    if (item != null)
                    {
                        dValue       = item.Content.eWeight;
                        nPOSOriginal = item.Content.nPOS;
                    }
                    else
                    {
                        dValue = Predefine.INFINITE_VALUE;
                    }

                    if (dValue > m_roleTag.m_dWordsPossibility[i])
                    {
                        //Set the element with less frequency
                        graphOptimum.SetElement(nAtomStart, nAtomEnd, new ChainContent(m_roleTag.m_dWordsPossibility[i], m_nPOS, m_sUnknownFlags));
                    }
                }
            }
            return(true);
        }