1 /*- 2 * %sccs.include.proprietary.c% 3 */ 4 5 #ifndef lint 6 static char sccsid[] = "@(#)outp.c 4.3 (Berkeley) 04/17/91"; 7 #endif /* not lint */ 8 9 #include <stdio.h> 10 #include <ctype.h> 11 #include "style.h" 12 #include "names.h" 13 #include "conp.h" 14 char *names[] = { 15 "noun", "verb", "interjection", "adjective", "adverb", "conjunction", "possessive", 16 "pronoun", "article", "preposition", "auxiliary", "tobe", "", "subordinate conjunction", "expletive" 17 }; 18 extern int barebones; 19 outp(){ 20 struct ss *st; 21 char *ssp; 22 char *spart, ff; 23 int index, lverbc; 24 int nn, sc, f, kk,comp, begsc; 25 int conjf, verbf,lpas,bflg,lexp,olvb; 26 int nom; 27 int infinf, ovflg; 28 int lvowel,nlet; 29 int imper; 30 float rd; 31 extern FILE *deb; 32 extern int nosave; 33 34 if(barebones){ 35 for(sentp=sent;sentp->cc != END;sentp++) 36 printf("%s %c %c\n",sentp->sp,sentp->ic,sentp->cc); 37 printf("%s %c %c\n",sentp->sp,sentp->ic,sentp->cc); 38 return; 39 } 40 if(topic){ 41 for(sentp=sent;sentp->cc != END;sentp++){ 42 if(sentp->cc==ADJ && (sentp+1)->cc==NOUN){ 43 printf("%s ",sentp->sp); 44 sentp++; 45 printf("%s\n",sentp->sp); 46 } 47 else if(sentp->cc==NOUN)printf("%s\n",sentp->sp); 48 } 49 return; 50 } 51 if(style){ 52 nn = kk = 0; 53 for(sentp=sent;sentp->cc != END;sentp++){ 54 if(sentp->cc != ',' && sentp->cc != '"')nn++; 55 if(sentp->cc == VERB || sentp->cc == BE || sentp->cc == AUX)kk++; 56 } 57 if(nn < 4 && kk == 0)return; 58 } 59 60 imper = lexp = lpas = index = lverbc = nom = 0; 61 conjf = verbf = kk = nn = sc = comp = begsc = 0; 62 bflg = olvb = infinf = ovflg = 0; 63 nlet = 0; 64 f = 1; 65 sentp=sent; 66 while(sentp->cc != END){ 67 /* printf("%c:",sentp->ic); */ 68 if(sentp->cc == ';')comp++; 69 else { 70 if((sentp->cc != ',') && (sentp->cc != '"')){ 71 if(*sentp->sp != 'x'){ 72 nn++; 73 nlet += sentp->leng; 74 } 75 kk++; 76 } 77 } 78 switch(sentp->cc){ 79 case NOUN: 80 spart ="noun"; 81 if(f)index=0; 82 if((sentp->ic==NOM)||(sentp->ic==PNOUN && islower(*(sentp->sp)))){ 83 sentp->ic = NOM; 84 nom++; 85 if(nosave && (deb != NULL)) /* SAVE NOM */ 86 fprintf(deb,"%s\n",sentp->sp); 87 } 88 if(*sentp->sp != 'x'){ 89 noun++; 90 numnonf++; 91 letnonf += sentp->leng; 92 } 93 bflg = infinf = ovflg = 0; 94 break; 95 case VERB: 96 spart = "verb"; 97 if(f)index=1; 98 if(sentp->ic==TO){ 99 infin++; 100 infinf=1; 101 lverbc++; 102 } 103 else { 104 if(f)imper=1; 105 if(ovflg == 0 && infinf == 0){ 106 ovflg = 1; 107 lverbc++; 108 olvb++; 109 } 110 numnonf++; 111 letnonf += sentp->leng; 112 if(infinf == 0){ 113 if(verbf == 0)verbf++; 114 else if(conjf)comp++; 115 } 116 if(bflg && sentp->ic == ED){lpas++; ++passive;} 117 } 118 break; 119 case INTER: 120 spart = "interj"; 121 if(f)index=2; 122 bflg = infinf = ovflg = 0; 123 break; 124 case ADJ: 125 spart = "adj"; 126 if(f)index=3; 127 adj++; 128 numnonf++; 129 if(sentp->ic == NOM){ 130 nom++; 131 if(nosave && (deb != NULL)) /* SAVE NOM */ 132 fprintf(deb,"%s\n",sentp->sp); 133 } 134 letnonf += sentp->leng; 135 bflg = infinf = ovflg = 0; 136 break; 137 case ADV: 138 spart = "adv"; 139 if(f)index=4; 140 adv++; 141 numnonf++; 142 letnonf += sentp->leng; 143 break; 144 case CONJ: 145 spart = "conj"; 146 conjc++; 147 if(f)index=5; 148 if(infinf && (sentp+1)->cc == VERB); 149 else { 150 if(verbf)conjf++; 151 bflg = infinf = ovflg = 0; 152 } 153 break; 154 case POS: 155 spart = "pos"; 156 if(f)index=6; 157 bflg = infinf = ovflg = 0; 158 break; 159 case PRONS: 160 case PRONP: 161 spart = "pron"; 162 pron++; 163 if(f){ 164 index=7; 165 if((sentp+1)->cc == BE){ 166 if(sentp->leng == 5 && *(sentp->sp) == 't' && *((sentp->sp)+3)=='r'){index=14;lexp=1;} 167 else if(sentp->leng ==2&& *(sentp->sp) == 'i' ){index=14;lexp=1;} 168 } 169 } 170 bflg = infinf = ovflg = 0; 171 if(sentp->ic == THAT || sentp->ic == WHO)sc++; 172 break; 173 case ART: 174 spart = "art"; 175 if(f)index=8; 176 bflg = infinf = ovflg = 0; 177 break; 178 case PREP: 179 spart = "prep"; 180 if(f)index=9; 181 prepc++; 182 bflg = infinf = ovflg = 0; 183 break; 184 case AUXX: 185 spart = "aux"; 186 if(ovflg == 0 && infinf == 0){ 187 ovflg = 1; 188 lverbc++; 189 olvb++; 190 aux++; 191 } 192 if(f)index=10; 193 break; 194 case BE: 195 if(ovflg == 0 && infinf == 0){ 196 ovflg = 1; 197 lverbc++; 198 olvb++; 199 } 200 spart = "be"; 201 if(f)index=11; 202 tobe++; 203 bflg = 1; 204 if(verbf == 0)verbf++; 205 else if(conjf)comp++; 206 break; 207 case SUBCONJ: 208 spart = "subcj"; 209 if(f){ 210 index=13; 211 begsc++; 212 } 213 sc++; 214 if((sentp-1)->cc != CONJ) 215 verbf = conjf = 0; 216 bflg = infinf = ovflg = 0; 217 break; 218 default: 219 if(sentp->cc == ','){ 220 if(begsc)conjf=verbf=0; 221 } 222 spart = sentp->sp; 223 } 224 if(part){ 225 printf("%s %s\n",spart,sentp->sp); 226 } 227 if(style){ 228 ssp=sentp->sp; 229 lvowel = 0; 230 while(*ssp != '\0'){ 231 if(*ssp >= '0' && *ssp <= '9'){ 232 lvowel=0; 233 break; 234 } 235 switch(*(ssp++)){ 236 case 'a': 237 case 'e': 238 case 'i': 239 case 'o': 240 case 'u': 241 case 'y': 242 case 'A': 243 case 'E': 244 case 'I': 245 case 'O': 246 case 'U': 247 case 'Y': 248 lvowel++; 249 continue; 250 } 251 } 252 if(lvowel != 0){ 253 vowel += lvowel; 254 twds++; 255 } 256 } 257 if(f){ 258 ff=sentp->cc; 259 f=0; 260 } 261 sentp++; 262 } 263 if(part){ 264 printf(". %s\n",sentp->sp); 265 if(sentno < MAXPAR && nn > 0) 266 leng[sentno++] = nn; 267 } 268 if(nn == 0)return; 269 numsent++; 270 numlet += nlet; 271 tverbc += lverbc; 272 verbc += olvb; 273 if(*(sentp->sp) == '?'){ 274 if(sc > 0)sc -= 1; 275 qcount++; 276 } 277 else if(*(sentp->sp) == '/')icount++; 278 else if(imper)icount++; 279 if(rstyle||pstyle)rd = 4.71*((float)(nlet)/(float)(nn))+.5*(float)(nn)-21.43; 280 if(pstyle || 281 (rstyle&& rd>=rthresh)||(lstyle&&nn >= lthresh)||(pastyle&&lpas)||(estyle&&lexp) 282 || (nstyle && (nom > 1 || (nom && lpas)))|| (Nstyle && nom)){ 283 if(!part){ 284 for(st=sent, kk=0;st->cc != END;st++){ 285 if(st->ic == NOM) 286 printf("*%s* ",st->sp); 287 else printf("%s ",st->sp); 288 if(kk++ >= 15){ 289 kk=0; 290 printf("\n"); 291 } 292 } 293 } 294 kk=1; 295 } 296 else kk=0; 297 if(pstyle || kk){ 298 if(!part)printf("%s\n",sentp->sp); 299 printf(" sentence length: %d ",nn); 300 if(sc == 0){ 301 if(comp == 0)printf("SIMPLE "); 302 else printf("COMPOUND "); 303 } 304 else if(comp == 0)printf("COMPLEX "); 305 else printf("COMPOUND-COMPLEX "); 306 if(index==14)printf(":expletive:"); 307 if(lpas)printf(":passive:"); 308 if(rstyle||pstyle)printf(" readability %4.2f ",rd); 309 printf(": begins with %s\n\n",names[index]); 310 } 311 if(index < 15)beg[index]++; 312 if(nn > maxsent){ 313 maxsent=nn; 314 maxindex=numsent; 315 } 316 if(nn < minsent ){ 317 minsent = nn; 318 minindex=numsent; 319 } 320 numwds += nn; 321 if(nn > 49)nn=49; 322 sleng[nn]++; 323 if(sc == 0){ 324 if(comp == 0)simple++; 325 else compound++; 326 } 327 else if(comp == 0)complex++; 328 else compdx++; 329 } 330