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