|
|
1.1 root 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: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.