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