Commit | Line | Data |
---|---|---|
2958d0fe | 1 | #ifndef lint |
280efb10 | 2 | static char sccsid[] = "@(#)outp.c 4.2 (Berkeley) 82/11/06"; |
2958d0fe RH |
3 | #endif not lint |
4 | ||
280efb10 RH |
5 | #include <stdio.h> |
6 | #include <ctype.h> | |
2958d0fe RH |
7 | #include "style.h" |
8 | #include "names.h" | |
9 | #include "conp.h" | |
10 | char *names[] = { | |
11 | "noun", "verb", "interjection", "adjective", "adverb", "conjunction", "possessive", | |
280efb10 | 12 | "pronoun", "article", "preposition", "auxiliary", "tobe", "", "subordinate conjunction", "expletive" |
2958d0fe | 13 | }; |
280efb10 | 14 | extern int barebones; |
2958d0fe RH |
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; | |
280efb10 | 22 | int nom; |
2958d0fe RH |
23 | int infinf, ovflg; |
24 | int lvowel,nlet; | |
25 | int imper; | |
26 | float rd; | |
280efb10 RH |
27 | extern FILE *deb; |
28 | extern int nosave; | |
2958d0fe | 29 | |
280efb10 RH |
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 | } | |
2958d0fe RH |
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 | ||
280efb10 | 56 | imper = lexp = lpas = index = lverbc = nom = 0; |
2958d0fe RH |
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; | |
280efb10 RH |
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 | } | |
2958d0fe RH |
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 | } | |
280efb10 | 112 | if(bflg && sentp->ic == ED){lpas++; ++passive;} |
2958d0fe RH |
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++; | |
280efb10 RH |
125 | if(sentp->ic == NOM){ |
126 | nom++; | |
127 | if(nosave && (deb != NULL)) /* SAVE NOM */ | |
128 | fprintf(deb,"%s\n",sentp->sp); | |
129 | } | |
2958d0fe RH |
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 | } | |
2958d0fe RH |
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){ | |
280efb10 RH |
260 | printf(". %s\n",sentp->sp); |
261 | if(sentno < MAXPAR && nn > 0) | |
262 | leng[sentno++] = nn; | |
2958d0fe | 263 | } |
280efb10 | 264 | if(nn == 0)return; |
2958d0fe RH |
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; | |
280efb10 RH |
276 | if(pstyle || |
277 | (rstyle&& rd>=rthresh)||(lstyle&&nn >= lthresh)||(pastyle&&lpas)||(estyle&&lexp) | |
278 | || (nstyle && (nom > 1 || (nom && lpas)))|| (Nstyle && nom)){ | |
2958d0fe RH |
279 | if(!part){ |
280 | for(st=sent, kk=0;st->cc != END;st++){ | |
280efb10 RH |
281 | if(st->ic == NOM) |
282 | printf("*%s* ",st->sp); | |
283 | else printf("%s ",st->sp); | |
2958d0fe RH |
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 | } |