Beispiel #1
0
        /*private void AppendAttrValue__previous( int wordIndex, CRFAttribute crfAttribute )
         * {
         *  switch ( crfAttribute.AttributeName )
         *  {
         *      case 'w':
         #region
         *      {
         *          /*
         *          символы ':' '\'
         *          - их комментировать в поле "w", "\:" и "\\"
         * /
         *          var index = wordIndex + crfAttribute.Position;
         *          var word = _Words[ index ];
         *          fixed ( char* _base = word.valueOriginal )
         *          {
         *              switch ( *_base )
         *              {
         *                  case COLON:
         *(_AttributeBufferPtr++) = SLASH;
         *(_AttributeBufferPtr++) = COLON;
         *                  break;
         *
         *                  case SLASH:
         *(_AttributeBufferPtr++) = SLASH;
         *(_AttributeBufferPtr++) = SLASH;
         *                  break;
         *
         *                  default:
         *                      System.Diagnostics.Debug.Assert( word.valueOriginal.Length <= WORD_MAX_LENGTH, "!(word.valueOriginal.Length <= WORD_MAX_LENGTH)" );
         *                      System.Diagnostics.Debug.Assert( word.length == word.valueOriginal.Length, "!(word.length == word.valueOriginal.Length)" );
         *                      for ( int i = 0; i < WORD_MAX_LENGTH; i++ )
         *                      {
         *                          var ch = *(_base + i);
         *                          if ( ch == '\0' )
         *                              break;
         *(_AttributeBufferPtr++) = ch;
         *                      }
         *                  break;
         *              }
         *          }
         *      }
         #endregion
         *      break;
         *
         *      case 'c':
         #region
         *      {
         *          var index = wordIndex + crfAttribute.Position;
         *(_AttributeBufferPtr++) = _Words[ index ].nerInputType.ToCrfChar();
         *      }
         #endregion
         *      break;
         *
         *      case 'y':
         #region
         *      {
         *(_AttributeBufferPtr++) = 'O'; //NERINPUTTYPE_OTHER == "O"
         *      }
         #endregion
         *      break;
         *  }
         * }*/

        #region [.model-builder.]
        private void AppendAttrValue4ModelBuilder(int wordIndex, CRFAttribute crfAttribute)
        {
            switch (crfAttribute.AttributeName)
            {
            case 'w':
                #region
            {
                /*
                 * символы ':' '\'
                 * - их комментировать в поле "w", "\:" и "\\"
                 */
                var index = wordIndex + crfAttribute.Position;
                var word  = _Words4ModelBuilder[index].word;
                switch (word.valueOriginal[0])
                {
                case COLON:
                    _StringBuilder4ModelBuilder.Append(SLASH).Append(COLON);
                    break;

                case SLASH:
                    _StringBuilder4ModelBuilder.Append(SLASH).Append(SLASH);
                    break;

                default:
                    _StringBuilder4ModelBuilder.Append(word.valueOriginal);
                    break;
                }
            }
                #endregion
                break;

            case 'c':
                #region
            {
                var index = wordIndex + crfAttribute.Position;
                _StringBuilder4ModelBuilder.Append(_Words4ModelBuilder[index].word.nerInputType.ToCrfChar());
            }
                #endregion
                break;

            case 'y':
                #region
            {
                _StringBuilder4ModelBuilder.Append(xlat_Unsafe.INPUTTYPE_OTHER /*NerInputType.O.ToCrfChar()*/);
            }
                #endregion
                break;

                #if DEBUG
            default: throw (new InvalidDataException("Invalid column-name: '" + crfAttribute.AttributeName + "'"));
                #endif
            }
        }
Beispiel #2
0
        /*private void Uninit()
         * {
         *  for ( var i = 0; i < _WordsCount; i++ )
         *  {
         *      (_PinnedWordsBufferPtrBase + i)->gcHandle.Free();
         *  }
         *  //_Words = null;
         * }*/

        private void AppendAttrValue(int wordIndex, CRFAttribute crfAttribute)
        {
            switch (crfAttribute.AttributeName)
            {
            //w – слово или словосочетание
            case 'w':
                #region
            {
                /*
                 * символы ':' '\'
                 * - их комментировать в поле "w", "\:" и "\\"
                 */
                var index = wordIndex + crfAttribute.Position;
                var pw    = (_PinnedWordsBufferPtrBase + index);
                //':'
                if (pw->posTaggerInputType == PosTaggerInputType.Col)
                {
                    *(_AttributeBufferPtr++) = SLASH;
                    *(_AttributeBufferPtr++) = COLON;
                }
                else
                {
                    char *_base = pw->basePtr;
                    switch (*_base)
                    {
                    case SLASH:
                        *(_AttributeBufferPtr++) = SLASH;
                        *(_AttributeBufferPtr++) = SLASH;
                        break;

                    default:
                        //---System.Diagnostics.Debug.Assert( word.valueOriginal.Length <= WORD_MAX_LENGTH && word.valueUpper.Length <= WORD_MAX_LENGTH );
                        //---System.Diagnostics.Debug.Assert( word.length == word.valueOriginal.Length && word.length == word.valueUpper.Length );
                        for (int i = 0, len = Math.Min(WORD_MAX_LENGTH, pw->length); i < len; i++)
                        {
                            *(_AttributeBufferPtr++) = *(_base + i);
                        }
                        #region commented

                        /*
                         * for ( int i = 0; i < WORD_MAX_LENGTH; i++ )
                         * {
                         *  var ch = *(_base + i);
                         *  if ( ch == '\0' )
                         *      break;
                         *(_AttributeBufferPtr++) = ch;
                         * }
                         */
                        #endregion
                        break;
                    }
                }
            }
                #endregion
                break;

            //g\a – первая буква с конца
            case 'a':
                #region
            {
                var index = wordIndex + crfAttribute.Position;
                var pw    = (_PinnedWordsBufferPtrBase + index);

                if (pw->posTaggerExtraWordType == PosTaggerExtraWordType.Punctuation)
                {
                    *(_AttributeBufferPtr++) = DASH;
                    break;
                }

                var len = pw->length - 1;
                *(_AttributeBufferPtr++) = *(pw->basePtr + len);
            }
                #endregion
                break;

            //ng\b – две буква с конца
            case 'b':
                #region
            {
                var index = wordIndex + crfAttribute.Position;
                var pw    = (_PinnedWordsBufferPtrBase + index);

                if (pw->posTaggerExtraWordType == PosTaggerExtraWordType.Punctuation)
                {
                    *(_AttributeBufferPtr++) = DASH;
                    break;
                }

                var len = pw->length - 2;
                if (0 <= len)
                {
                    char *_base = pw->basePtr;
                    *(_AttributeBufferPtr++) = *(_base + len++);
                    *(_AttributeBufferPtr++) = *(_base + len);
                }
                else
                {
                    *(_AttributeBufferPtr++) = DASH;
                }
            }
                #endregion
                break;

            //ing\c – три буква с конца
            case 'c':
                #region
            {
                var index = wordIndex + crfAttribute.Position;
                var pw    = (_PinnedWordsBufferPtrBase + index);

                if (pw->posTaggerExtraWordType == PosTaggerExtraWordType.Punctuation)
                {
                    *(_AttributeBufferPtr++) = DASH;
                    break;
                }

                var len = pw->length - 3;
                if (0 <= len)
                {
                    char *_base = pw->basePtr;
                    *(_AttributeBufferPtr++) = *(_base + len++);
                    *(_AttributeBufferPtr++) = *(_base + len++);
                    *(_AttributeBufferPtr++) = *(_base + len);
                }
                else
                {
                    *(_AttributeBufferPtr++) = DASH;
                }
            }
                #endregion
                break;

            //ding\d – четыре буква с конца
            case 'd':
                #region
            {
                var index = wordIndex + crfAttribute.Position;
                var pw    = (_PinnedWordsBufferPtrBase + index);

                if (pw->posTaggerExtraWordType == PosTaggerExtraWordType.Punctuation)
                {
                    *(_AttributeBufferPtr++) = DASH;
                    break;
                }

                var len = pw->length - 4;
                if (0 <= len)
                {
                    char *_base = pw->basePtr;
                    *(_AttributeBufferPtr++) = *(_base + len++);
                    *(_AttributeBufferPtr++) = *(_base + len++);
                    *(_AttributeBufferPtr++) = *(_base + len++);
                    *(_AttributeBufferPtr++) = *(_base + len);
                }
                else
                {
                    *(_AttributeBufferPtr++) = DASH;
                }
            }
                #endregion
                break;

            //nding\e – пять букв с конца
            case 'e':
                #region
            {
                var index = wordIndex + crfAttribute.Position;
                var pw    = (_PinnedWordsBufferPtrBase + index);

                if (pw->posTaggerExtraWordType == PosTaggerExtraWordType.Punctuation)
                {
                    *(_AttributeBufferPtr++) = DASH;
                    break;
                }

                var len = pw->length - 5;
                if (0 <= len)
                {
                    char *_base = pw->basePtr;
                    *(_AttributeBufferPtr++) = *(_base + len++);
                    *(_AttributeBufferPtr++) = *(_base + len++);
                    *(_AttributeBufferPtr++) = *(_base + len++);
                    *(_AttributeBufferPtr++) = *(_base + len++);
                    *(_AttributeBufferPtr++) = *(_base + len);
                }
                else
                {
                    *(_AttributeBufferPtr++) = DASH;
                }
            }
                #endregion
                break;

            //atr\z – список атрибутов (дан ниже)
            case 'z':
                #region
            {
                var index = wordIndex + crfAttribute.Position;
                *(_AttributeBufferPtr++) = (_PinnedWordsBufferPtrBase + index)->posTaggerInputType.ToCrfChar();
            }
                #endregion
                break;

            //y – искомое значение
            case 'y':
                #region
            {
                *(_AttributeBufferPtr++) = 'O';     //POSINPUTTYPE_OTHER == "O"
            }
                #endregion
                break;

                #if DEBUG
            default: throw (new InvalidDataException("Invalid column-name: '" + crfAttribute.AttributeName + "'"));
                #endif
            }
        }
Beispiel #3
0
        private void AppendAttrValue(int wordIndex, CRFAttribute crfAttribute)
        {
            switch (crfAttribute.AttributeName)
            {
            //w – слово или словосочетание
            case 'w':
            {
                /*
                 * символы ':' '\'
                 * - их комментировать в поле "w", "\:" и "\\"
                 */
                var index = wordIndex + crfAttribute.Position;
                var pw    = (_pinnedWordsBufferPtrBase + index);
                if (pw->posTaggerInputType == PosTaggerInputType.Col)
                {
                    *(_attributeBufferPtr++) = SLASH;
                    *(_attributeBufferPtr++) = COLON;
                }
                else
                {
                    char *_base = pw->basePtr;
                    switch (*_base)
                    {
                    case SLASH:
                        *(_attributeBufferPtr++) = SLASH;
                        *(_attributeBufferPtr++) = SLASH;
                        break;

                    default:
                        for (int i = 0, len = Math.Min(WORD_MAX_LENGTH, pw->length); i < len; i++)
                        {
                            *(_attributeBufferPtr++) = *(_base + i);
                        }
                        break;
                    }
                }
            }
            break;

            //g\a – первая буква с конца
            case 'a':
            {
                var index = wordIndex + crfAttribute.Position;
                var pw    = (_pinnedWordsBufferPtrBase + index);

                if (pw->posTaggerExtraWordType == PosTaggerExtraWordType.Punctuation)
                {
                    *(_attributeBufferPtr++) = DASH;
                    break;
                }

                var len = pw->length - 1;
                *(_attributeBufferPtr++) = *(pw->basePtr + len);
            }
            break;

            //ng\b – две буква с конца
            case 'b':
            {
                var index = wordIndex + crfAttribute.Position;
                var pw    = (_pinnedWordsBufferPtrBase + index);

                if (pw->posTaggerExtraWordType == PosTaggerExtraWordType.Punctuation)
                {
                    *(_attributeBufferPtr++) = DASH;
                    break;
                }

                var len = pw->length - 2;
                if (0 <= len)
                {
                    char *_base = pw->basePtr;
                    *(_attributeBufferPtr++) = *(_base + len++);
                    *(_attributeBufferPtr++) = *(_base + len);
                }
                else
                {
                    *(_attributeBufferPtr++) = DASH;
                }
            }
            break;

            //ing\c – три буква с конца
            case 'c':
            {
                var index = wordIndex + crfAttribute.Position;
                var pw    = (_pinnedWordsBufferPtrBase + index);

                if (pw->posTaggerExtraWordType == PosTaggerExtraWordType.Punctuation)
                {
                    *(_attributeBufferPtr++) = DASH;
                    break;
                }

                var len = pw->length - 3;
                if (0 <= len)
                {
                    char *_base = pw->basePtr;
                    *(_attributeBufferPtr++) = *(_base + len++);
                    *(_attributeBufferPtr++) = *(_base + len++);
                    *(_attributeBufferPtr++) = *(_base + len);
                }
                else
                {
                    *(_attributeBufferPtr++) = DASH;
                }
            }
            break;

            //ding\d – четыре буква с конца
            case 'd':
            {
                var index = wordIndex + crfAttribute.Position;
                var pw    = (_pinnedWordsBufferPtrBase + index);

                if (pw->posTaggerExtraWordType == PosTaggerExtraWordType.Punctuation)
                {
                    *(_attributeBufferPtr++) = DASH;
                    break;
                }

                var len = pw->length - 4;
                if (0 <= len)
                {
                    char *_base = pw->basePtr;
                    *(_attributeBufferPtr++) = *(_base + len++);
                    *(_attributeBufferPtr++) = *(_base + len++);
                    *(_attributeBufferPtr++) = *(_base + len++);
                    *(_attributeBufferPtr++) = *(_base + len);
                }
                else
                {
                    *(_attributeBufferPtr++) = DASH;
                }
            }
            break;

            //nding\e – пять букв с конца
            case 'e':
            {
                var index = wordIndex + crfAttribute.Position;
                var pw    = (_pinnedWordsBufferPtrBase + index);

                if (pw->posTaggerExtraWordType == PosTaggerExtraWordType.Punctuation)
                {
                    *(_attributeBufferPtr++) = DASH;
                    break;
                }

                var len = pw->length - 5;
                if (0 <= len)
                {
                    char *_base = pw->basePtr;
                    *(_attributeBufferPtr++) = *(_base + len++);
                    *(_attributeBufferPtr++) = *(_base + len++);
                    *(_attributeBufferPtr++) = *(_base + len++);
                    *(_attributeBufferPtr++) = *(_base + len++);
                    *(_attributeBufferPtr++) = *(_base + len);
                }
                else
                {
                    *(_attributeBufferPtr++) = DASH;
                }
            }
            break;

            //atr\z – список атрибутов (дан ниже)
            case 'z':
            {
                var index = wordIndex + crfAttribute.Position;
                *(_attributeBufferPtr++) = (_pinnedWordsBufferPtrBase + index)->posTaggerInputType.ToCrfChar();
            }
            break;

            //y – искомое значение
            case 'y':
            {
                *(_attributeBufferPtr++) = 'O';
            }
            break;

#if DEBUG
            default: throw (new InvalidDataException("Invalid column-name: '" + crfAttribute.AttributeName + "'"));
#endif
            }
        }
        private void AppendAttrValue(int wordIndex, CRFAttribute crfAttribute)
        {
            /*
             * w – слово
             * s – часть речи;
             * z – морфоатрибуты (для каждой части речи свои значения согласно таблице)
             * y – искомое значение.
             */

            switch (crfAttribute.AttributeName)
            {
            //w – слово
            case 'w':
                #region
            {
                /*
                 * символы ':' '\'
                 * - их комментировать в поле "w", "\:" и "\\"
                 */
                var index = wordIndex + crfAttribute.Position;
                var pw    = (_PinnedWordsBufferPtrBase + index);
                //':'
                if (pw->posTaggerInputType == PosTaggerInputType.Col)
                {
                    *(_AttributeBufferPtr++) = SLASH;
                    *(_AttributeBufferPtr++) = COLON;
                }
                else
                {
                    char *_base = pw->basePtr;
                    switch (*_base)
                    {
                    case SLASH:
                        *(_AttributeBufferPtr++) = SLASH;
                        *(_AttributeBufferPtr++) = SLASH;
                        break;

                    default:
                        //---System.Diagnostics.Debug.Assert( word.valueOriginal.Length <= WORD_MAX_LENGTH );
                        //---System.Diagnostics.Debug.Assert( word.length == word.valueOriginal.Length );
                        for (int i = 0, len = Math.Min(WORD_MAX_LENGTH, pw->length); i < len; i++)
                        {
                            *(_AttributeBufferPtr++) = *(_base + i);
                        }
                        #region commented

                        /*
                         * for ( int i = 0; i < WORD_MAX_LENGTH; i++ )
                         * {
                         *  var ch = *(_base + i);
                         *  if ( ch == '\0' )
                         *      break;
                         *(_AttributeBufferPtr++) = ch;
                         * }
                         */
                        #endregion
                        break;
                    }
                }
            }
                #endregion
                break;

            //s – часть речи;
            case 's':
                #region
            {
                var index = wordIndex + crfAttribute.Position;
                *(_AttributeBufferPtr++) = (_PinnedWordsBufferPtrBase + index)->posTaggerOutputType.ToCrfChar();
            }
                #endregion
                break;

            //z – морфоатрибуты (для каждой части речи свои значения согласно таблице)
            case 'z':
                #region
            {
                var index = wordIndex + crfAttribute.Position;
                var pw    = (_PinnedWordsBufferPtrBase + index);

                switch (pw->posTaggerOutputType)
                {
                case PosTaggerOutputType.Noun:
                    #region
                {
                    var ma = pw->morphoAttribute;
                    *(_AttributeBufferPtr++) = (char)MA.get_Case(ma);
                    *(_AttributeBufferPtr++) = (char)MA.get_Number(ma);
                    *(_AttributeBufferPtr++) = (char)MA.get_NounType(ma);
                }
                    #endregion
                    break;

                case PosTaggerOutputType.Verb:
                case PosTaggerOutputType.Infinitive:
                case PosTaggerOutputType.AdverbialParticiple:
                case PosTaggerOutputType.AuxiliaryVerb:
                case PosTaggerOutputType.Participle:
                    #region
                {
                    var ma = pw->morphoAttribute;
                    *(_AttributeBufferPtr++) = (char)MA.get_Case(ma);
                    *(_AttributeBufferPtr++) = (char)MA.get_Number(ma);
                    *(_AttributeBufferPtr++) = (char)MA.get_Mood(ma);
                    *(_AttributeBufferPtr++) = (char)MA.get_Voice(ma);
                    *(_AttributeBufferPtr++) = (char)MA.get_VerbTransitivity(ma);
                }
                    #endregion
                    break;

                case PosTaggerOutputType.Pronoun:
                case PosTaggerOutputType.AdjectivePronoun:
                case PosTaggerOutputType.PossessivePronoun:
                case PosTaggerOutputType.AdverbialPronoun:
                    #region
                {
                    var ma = pw->morphoAttribute;
                    *(_AttributeBufferPtr++) = (char)MA.get_Case(ma);
                    *(_AttributeBufferPtr++) = (char)MA.get_Number(ma);
                    *(_AttributeBufferPtr++) = (char)MA.get_Form(ma);
                    *(_AttributeBufferPtr++) = (char)MA.get_PronounType(ma);
                }
                    #endregion
                    break;

                case PosTaggerOutputType.Numeral:
                    #region
                {
                    *(_AttributeBufferPtr++) = (char)MA.get_Case(pw->morphoAttribute);
                }
                    #endregion
                    break;

                case PosTaggerOutputType.Adjective:
                    #region
                {
                    var ma = pw->morphoAttribute;
                    *(_AttributeBufferPtr++) = (char)MA.get_Case(ma);
                    *(_AttributeBufferPtr++) = (char)MA.get_Number(ma);
                    *(_AttributeBufferPtr++) = (char)MA.get_Form(ma);
                }
                    #endregion
                    break;

                case PosTaggerOutputType.Preposition:
                    #region
                {
                    *(_AttributeBufferPtr++) = (char)MA.get_Case(pw->morphoAttribute);
                }
                    #endregion
                    break;

                case PosTaggerOutputType.Conjunction:
                    #region
                {
                    *(_AttributeBufferPtr++) = (char)MA.get_ConjunctionType(pw->morphoAttribute);
                }
                    #endregion
                    break;

                default:
                    #region
                {
                    *(_AttributeBufferPtr++) = (char)MA.U_BYTE;
                }
                    #endregion
                    break;
                }
            }
                #endregion
                break;

            //y – искомое значение
            case 'y':
                #region
            {
                *(_AttributeBufferPtr++) = O;     //SINTAXINPUTTYPE_OTHER == "O"
            }
                #endregion
                break;

                #if DEBUG
            default: throw (new InvalidDataException("Invalid column-name: '" + crfAttribute.AttributeName + "'"));
                #endif
            }
        }
        private void AppendAttrValue(int wordIndex, CRFAttribute crfAttribute)
        {
            /*
             * s – часть речи;
             * z – морфоатрибуты (для каждой части речи свои значения согласно таблице)
             * y – искомое значение.
             */

            switch (crfAttribute.AttributeName)
            {
            //s – часть речи;
            case 's':
                #region
            {
                var index = wordIndex + crfAttribute.Position;
                *(_AttributeBufferPtr++) = (_PinnedWordsBufferPtrBase + index)->posTaggerOutputType.ToCrfByte();
            }
                #endregion
                break;

            //z – морфоатрибуты (для каждой части речи свои значения согласно таблице)
            case 'z':
                #region
            {
                var index = wordIndex + crfAttribute.Position;
                var pw    = (_PinnedWordsBufferPtrBase + index);

                switch (pw->posTaggerOutputType)
                {
                case PosTaggerOutputType.Noun:
                    #region
                {
                    var ma = pw->morphoAttribute;
                    *(_AttributeBufferPtr++) = MA.get_Case(ma);
                    *(_AttributeBufferPtr++) = MA.get_Number(ma);
                    *(_AttributeBufferPtr++) = MA.get_NounType(ma);
                }
                    #endregion
                    break;

                case PosTaggerOutputType.Verb:
                case PosTaggerOutputType.Infinitive:
                case PosTaggerOutputType.AdverbialParticiple:
                case PosTaggerOutputType.AuxiliaryVerb:
                case PosTaggerOutputType.Participle:
                    #region
                {
                    var ma = pw->morphoAttribute;
                    *(_AttributeBufferPtr++) = MA.get_Case(ma);
                    *(_AttributeBufferPtr++) = MA.get_Number(ma);
                    *(_AttributeBufferPtr++) = MA.get_Mood(ma);
                    *(_AttributeBufferPtr++) = MA.get_Voice(ma);
                    *(_AttributeBufferPtr++) = MA.get_VerbTransitivity(ma);
                }
                    #endregion
                    break;

                case PosTaggerOutputType.Pronoun:
                case PosTaggerOutputType.AdjectivePronoun:
                case PosTaggerOutputType.PossessivePronoun:
                case PosTaggerOutputType.AdverbialPronoun:
                    #region
                {
                    var ma = pw->morphoAttribute;
                    *(_AttributeBufferPtr++) = MA.get_Case(ma);
                    *(_AttributeBufferPtr++) = MA.get_Number(ma);
                    *(_AttributeBufferPtr++) = MA.get_Form(ma);
                    *(_AttributeBufferPtr++) = MA.get_PronounType(ma);
                }
                    #endregion
                    break;

                case PosTaggerOutputType.Numeral:
                    #region
                {
                    *(_AttributeBufferPtr++) = MA.get_Case(pw->morphoAttribute);
                }
                    #endregion
                    break;

                case PosTaggerOutputType.Adjective:
                    #region
                {
                    var ma = pw->morphoAttribute;
                    *(_AttributeBufferPtr++) = MA.get_Case(ma);
                    *(_AttributeBufferPtr++) = MA.get_Number(ma);
                    *(_AttributeBufferPtr++) = MA.get_Form(ma);
                }
                    #endregion
                    break;

                case PosTaggerOutputType.Preposition:
                    #region
                {
                    *(_AttributeBufferPtr++) = MA.get_Case(pw->morphoAttribute);
                }
                    #endregion
                    break;

                case PosTaggerOutputType.Conjunction:
                    #region
                {
                    *(_AttributeBufferPtr++) = MA.get_ConjunctionType(pw->morphoAttribute);
                }
                    #endregion
                    break;

                default:
                    #region
                {
                    *(_AttributeBufferPtr++) = MA.U_BYTE;
                }
                    #endregion
                    break;
                }
            }
                #endregion
                break;

            //y – искомое значение
            case 'y':
                #region
            {
                *(_AttributeBufferPtr++) = O;     //SINTAXINPUTTYPE_OTHER == "O"
            }
                #endregion
                break;

                #if DEBUG
            default: throw (new InvalidDataException("Invalid column-name: '" + crfAttribute.AttributeName + "'"));
                #endif
            }
        }
Beispiel #6
0
        /*private void Uninit()
         * {
         *  for ( var i = 0; i < _WordsCount; i++ )
         *  {
         *      (_PinnedWordsBufferPtrBase + i)->gcHandle.Free();
         *  }
         *  //_Words = null;
         * }*/

        private void AppendAttrValue(int wordIndex, CRFAttribute crfAttribute)
        {
            switch (crfAttribute.AttributeName)
            {
            case 'w':
                #region
            {
                /*
                 * символы ':' '\'
                 * - их комментировать в поле "w", "\:" и "\\"
                 */
                var index = wordIndex + crfAttribute.Position;
                var pw    = (_PinnedWordsBufferPtrBase + index);

                char *_base = pw->basePtr;
                switch (*_base)
                {
                case COLON:
                    *(_AttributeBufferPtr++) = SLASH;
                    *(_AttributeBufferPtr++) = COLON;
                    break;

                case SLASH:
                    *(_AttributeBufferPtr++) = SLASH;
                    *(_AttributeBufferPtr++) = SLASH;
                    break;

                default:
                    //---System.Diagnostics.Debug.Assert( word.valueOriginal.Length <= WORD_MAX_LENGTH, "!(word.valueOriginal.Length <= WORD_MAX_LENGTH)" );
                    //---System.Diagnostics.Debug.Assert( word.length == word.valueOriginal.Length, "!(word.length == word.valueOriginal.Length)" );
                    for (int i = 0, len = Math.Min(WORD_MAX_LENGTH, pw->length); i < len; i++)
                    {
                        *(_AttributeBufferPtr++) = *(_base + i);
                    }
                    #region commented

                    /*
                     * for ( int i = 0; i < WORD_MAX_LENGTH; i++ )
                     * {
                     *  var ch = *(_base + i);
                     *  if ( ch == '\0' )
                     *      break;
                     *(_AttributeBufferPtr++) = ch;
                     * }
                     */
                    #endregion
                    break;
                }
            }
                #endregion
                break;

            case 'c':
                #region
            {
                var index = wordIndex + crfAttribute.Position;
                *(_AttributeBufferPtr++) = (_PinnedWordsBufferPtrBase + index)->nerInputType.ToCrfChar();
            }
                #endregion
                break;

            case 'y':
                #region
            {
                *(_AttributeBufferPtr++) = 'O';     //NERINPUTTYPE_OTHER == "O"
            }
                #endregion
                break;

                #if DEBUG
            default: throw (new InvalidDataException("Invalid column-name: '" + crfAttribute.AttributeName + "'"));
                #endif
            }
        }