Esempio n. 1
0
 /// <summary>
 /// �ִʴ��������캯��
 /// </summary>
 /// <param name="input">�ı���ȡ��</param>
 public ThesaurusSpliter(TextReader input)
 {
     this.input = input;
     //����������.ģ�����뷨���������Ĺ���
     assoStream = new AssociateStream();
     ReadBuffer();
 }
Esempio n. 2
0
        /// <summary>
        /// ���ַ����н������ʼ��
        /// </summary>
        /// <param name="word">�ַ�����</param>
        /// <param name="length">��Ч�ַ�����</param>
        /// <returns></returns>
        public static int Match(Char[] word, int length)
        {
            int nStart = 0;
            //���ϼ��
            if (FamilyNameRule.Test(((int)word[0] << 2) + (int)word[1]))
            {
                nStart = 2;
            }
            else if (FamilyNameRule.Test((int)word[0]) && !LinkRule.Test(word[1]))
            {
                nStart = 1;
            }
            else
            {
                AssociateStream assoStream = new AssociateStream();
                //���ʼ��,������������������д���ƥ��
                if (!LinkRule.Test(word[1]))
                {
                    for (nStart = 1; nStart < length; )
                    {
                        assoStream.Associate(word[nStart++]);
                        if (!assoStream.IsBegin && assoStream.Associate(word[nStart]))
                        {
                            return nStart - 1;
                        }
                        else
                        {
                            assoStream.Reset();
                        }
                    }
                }
                //�������
                for (nStart = 0; nStart < length - 1;)
                {
                    assoStream.Reset();
                    if (!LinkRule.Test(word[nStart++]) && PlaceRule.Test(word[nStart]))
                    {
                        return nStart + 1;
                    }
                }
                return 1;
            }
            //�����⵽���ϲ���ʣ���ַ���С��3���ַ�����������һ����������
            if(length - nStart <= 2)
            {
                return length;
            }
            //������ij��ȴ������ϵij�����ʼ�����Ч�����ֳ���
            if (length > nStart)
            {
                int nEnd = nStart + 1;
                AssociateStream assoStream = new AssociateStream();

                //�����һ�����������ֻ��ߵ�ǰ�ַ�����һ�����޷���ϳ�һ����֪���򽫵�ǰ�ֱ�ȷ��Ϊʱ������һ����
                if (LinkRule.Test(word[nEnd + 1]) || !(assoStream.Associate(word[nEnd]) && assoStream.Associate(word[nEnd + 1])))
                {
                    nEnd++;
                }
                nStart = nEnd;
            }
            return nStart;
        }