/**************************************************************************/ // Внести в словарь переводов род и одушевленность русских существительных // /**************************************************************************/ # include # include # include # include # include typedef int (fSORTFUNC)(const void *val1,const void *val2); struct t_Struct1 { char *Word,*Gender ; }; t_Slowo3 Perevod ; t_Slowo2 *SlowoF,*SlowoT ; short *i_FormatT ; // соответствие часть речи -> SlowoT short *i_FormatF ; // соответствие часть речи -> SlowoF t_Core Core ; char **Str ; t_Struct1 *Word ; long N,n_Word ; /************************************************************************/ int wordcmp3( const void *A, const void *B ) { return strcmp( ((t_Struct1 *)A)->Word,((t_Struct1 *)B)->Word ); } /***************************************************************************/ long FileToWord( char *File, char ***_Str ) { long i,j,L ; char *m,**ss ; L=file_to_mass( File, &m ); for( i=0 ; i>1; // Compare to val. if((cmp_res=cmpfunc(Object,(char *)Data+cur*Size)) == 0) return cur; if( cmp_res > 0) bottom=cur+1 ; else top=cur-1; } return -1; // Not found. } /**************************************************************************/ // вставить параметры в один словарь /**************************************************************************/ int main1( char *FileGrammar, char *FileSrc, char *FileDst ) { char r ; short i_sub,i_gender,i_dusha ; long i,i1,i_word,N1 ; // --------- начало ------------------------------ r=Grammar.make_all( FileGrammar ); if( r<0 ) return r ; Perevod.read( FileSrc,&Grammar.format1()[0] ); // --------- найти нужные параметры ------------- for( i=0 ; ii_struct!=i_sub ) continue ; // -------- вычислить параметр рода и души ------ t_Form Param =S->Word[0].Param.form() ; char a,b,a1,b1 ; a=Param.value[i_gender] ; b=Param.value[i_dusha] ; if( 0<=a && 0<=b ) continue ; // ------- найти в словаре Зализняка ------------- t_Struct1 W ; W.Word=S->Word[0].str ; i_word=Qfind( Word,n_Word,sizeof(t_Struct1),wordcmp3,&W ); if( i_word<0 ) continue ; // ------- вычислить параметры ------------------- a1=b1=-1 ; if( 0==strcmp( Word[i_word].Gender,"м" ) ) { a1=0 ; b1=0 ; } if( 0==strcmp( Word[i_word].Gender,"мо" ) ) { a1=0 ; b1=1 ; } if( 0==strcmp( Word[i_word].Gender,"ж " ) ) { a1=1 ; b1=0 ; } if( 0==strcmp( Word[i_word].Gender,"жо" ) ) { a1=1 ; b1=1 ; } if( 0==strcmp( Word[i_word].Gender,"с " ) ) { a1=2 ; b1=0 ; } if( 0==strcmp( Word[i_word].Gender,"со" ) ) { a1=2 ; b1=1 ; } if( 0==strcmp( Word[i_word].Gender,"мн" ) ) { a1=3 ; b1=0 ; } if( 0==strcmp( Word[i_word].Gender,"мо-жо")){ a1=0 ; b1=1 ; } // ------- присвоить параметры -------------------- if( a<0 ) Param.value[i_gender]=a1 ; if( b<0 ) Param.value[i_dusha] =b1 ; S->Word[0].Param=Param ; } } // --------- конец ------------------------------ Perevod.print( FileDst ); return 0 ; } /****************************************************************************/ // /****************************************************************************/ int main( void ) { char r ; long i ; char *FileGrammar, *FileSrc, *FileDst ; // --------- прочесть файл ---------------------- N=FileToWord( "../../dicts/z_knowlege/russkij/ru_sub_gender",&Str ); for( i=0 ; i