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 } }