|
|
1.1 ! root 1: #include "names.h" ! 2: #include "conp.h" ! 3: #define isadv(c) (c == ADV || c == ADJ_ADV) ! 4: #define isadj(c) (c == ADJ || c == NOUN_ADJ || c == ADJ_ADV || c == UNK) ! 5: #define notnoun(c) (c != NOUN && c != UNK && c != NOUN_VERB && c != NV_PL && c != PNOUN) ! 6: #define issing(c) (c == UNK || c == NOUN_VERB || c == NOUN || c == NOM || c == NOUN_ADJ) ! 7: #define isnoun(c) (c == NOUN || c == NOUN_VERB || c == NV_PL || c == UNK || c == PNOUN) ! 8: #define nounnom(c) (c == NOUN || c == NOM) ! 9: char lastc,nextc; ! 10: int savsub; ! 11: scan(si,ce,command) /*scan a phrase */ ! 12: int si; ! 13: char ce; ! 14: { ! 15: int savi; ! 16: char c; ! 17: i=si; ! 18: if(command == 1)subty = PLURAL; ! 19: else subty = 0; ! 20: /* added NOUN_ADJ to test - dreg from grigg but probably fix*/ ! 21: if(sent[i].cc==ADJ_ADV && sent[i+1].cc != NOUN && sent[i+1].cc != UNK ! 22: && sent[i+1].cc != ADJ && sent[i+1].cc != NOUN_ADJ) ! 23: sent[i++].cc = ADV; ! 24: done=0; ! 25: verb = 0; ! 26: verb=getv(i,ce); /*get verb if obvious*/ ! 27: if(command == 0)j=getnoun(i,ce); /*get subject*/ ! 28: else j = si; ! 29: if(i != j || ((i==j) && sent[i].cc == NOUN)){ ! 30: i = j+1; ! 31: } ! 32: for(;((c=sent[i].cc) != ce) && (c != END) && (c != '\0');i++){ ! 33: nextc=sent[i+1].cc; ! 34: if(i>0){ ! 35: lastc=sent[i-1].cc; ! 36: if(lastc==BE)be=1; ! 37: else{ ! 38: if(lastc != ADV)be=0; ! 39: } ! 40: } ! 41: else lastc=0; ! 42: if(verb==1)question=0; ! 43: switch(c){ ! 44: case '"': ! 45: if(nextc==ED || nextc == MVERB){ ! 46: verb=1; ! 47: sent[++i].cc=VERB; ! 48: subty=SING; ! 49: continue; ! 50: } ! 51: subty=0; ! 52: verb=getv(++i,ce); ! 53: i=getnoun(i,ce); ! 54: continue; ! 55: case MVERB: ! 56: sent[i].cc = VERB; ! 57: if(i < nsleng*.5){ ! 58: verb = getv(++i,ce); ! 59: i = getnoun(i,ce); ! 60: continue; ! 61: } ! 62: continue; ! 63: case ART: ! 64: case ADJ: ! 65: case POS: ! 66: case ING: ! 67: aflg=1; ! 68: i=getnoun(i,ce); ! 69: aflg=0; ! 70: continue; ! 71: case PREP: ! 72: if(nextc == ce){ ! 73: sent[i].cc=ADV; ! 74: goto sdone; ! 75: } ! 76: prep=1; ! 77: i=getnoun(++i,ce); ! 78: prep=0; ! 79: continue; ! 80: case VERB_ADJ: ! 81: if(verb==0){ ! 82: sent[i].cc=VERB; ! 83: verb=1; ! 84: continue; ! 85: } ! 86: case NOUN_ADJ: ! 87: if(be==1){ ! 88: sent[i].cc=ADJ; ! 89: continue; ! 90: } ! 91: case PRONP_ADJ: ! 92: case PRONS_ADJ: ! 93: i=getnoun(i,ce); ! 94: continue; ! 95: case NOUN_ADV: ! 96: if(verb == 1 && iverb == i+1){ ! 97: sent[i].cc = NOUN; ! 98: } ! 99: else { ! 100: sent[i].cc = ADV; ! 101: } ! 102: continue; ! 103: case ADJ_ADV: ! 104: if(be == 1){ ! 105: if (isadj(nextc)) { ! 106: sent[i].cc = ADV; ! 107: continue; ! 108: } ! 109: if(nextc == ',' && isadv(sent[i+2].cc)) { ! 110: sent[i++].cc = ADV; ! 111: sent[++i].cc = ADV; ! 112: comma--; ! 113: continue; ! 114: } ! 115: sent[i].cc = ADJ; ! 116: continue; ! 117: } ! 118: if(lastc == NOUN && (nextc == ',' || nextc == END)){ ! 119: sent[i].cc=ADJ; ! 120: continue; ! 121: } ! 122: if(notnoun(nextc)){ ! 123: sent[i].cc=ADV; ! 124: continue; ! 125: } ! 126: sent[i].cc=ADJ; ! 127: continue; ! 128: case WHO: ! 129: i=who(i,ce); ! 130: continue; ! 131: case PRONP: ! 132: subty=PLURAL; ! 133: continue; ! 134: case NOUN: ! 135: if(nextc==NOUN){ ! 136: sent[i].cc=ADJ; ! 137: continue; ! 138: } ! 139: case PRONS: ! 140: subty=SING; ! 141: continue; ! 142: case PNOUN: ! 143: sent[i].cc = NOUN; ! 144: if(subty == 0)subty=PLURAL; ! 145: continue; ! 146: case CONJ: ! 147: if(nextc==UNK || nextc == NOUN_VERB || nextc == NV_PL){ ! 148: if(lastc == ADJ)sent[++i].cc = ADJ; ! 149: else sent[++i].cc = VERB; ! 150: } ! 151: if(nextc == ED){ ! 152: sent[++i].cc = VERB; ! 153: } ! 154: continue; ! 155: case AUXP: ! 156: case AUXS: ! 157: case BES: ! 158: case BEP: ! 159: case AUXV: ! 160: case AUX: ! 161: case HAS: ! 162: case HAVE: ! 163: case HAD: ! 164: verb=getv(i,ce); ! 165: continue; ! 166: case ADV: ! 167: case AUXX: ! 168: case VERB: ! 169: case BE: ! 170: case INTER: ! 171: continue; ! 172: case THAT: ! 173: if(nextc==SUBCONJ){ ! 174: sent[i].cc=PRONP; ! 175: goto subc; ! 176: } ! 177: verb=getv(i+1,ce); ! 178: j = i+1; ! 179: while(isadv(sent[j].cc)) { ! 180: j++; ! 181: } ! 182: nextc = sent[j].cc; ! 183: if((verb==1 && iverb== j) || nextc==ED || nextc == VERB_ADJ){ ! 184: sent[i].cc=PRONP; ! 185: while(i+1 < j)sent[++i].cc = ADV; ! 186: } ! 187: else if(verb==0 && nextc==NV_PL && ((lastc==NOUN ! 188: && issing(sent[i-1].ic)) || lastc == ',')) { ! 189: sent[i].cc=PRONP; ! 190: subty=SING; ! 191: while(i+1 < j)sent[++i].cc = ADV; ! 192: } ! 193: else if(verb==0 && (nextc==UNK || nextc==NOUN_VERB) && (lastc==NOUN ! 194: && sent[i-1].ic==NV_PL)){ ! 195: subty=PLURAL; ! 196: sent[i].cc=PRONP; ! 197: while(i+1 < j)sent[++i].cc = ADV; ! 198: } ! 199: else { ! 200: if(i == 0)sent[i].cc=ADJ; ! 201: else sent[i].cc=SUBCONJ; ! 202: j=i; ! 203: subty=0; ! 204: i=getnoun(i+1,ce); ! 205: if(done)sent[j].cc=ADJ; ! 206: } ! 207: continue; ! 208: case ',': ! 209: if(nextc != CONJ){ /*parenthetical*/ ! 210: continue; ! 211: } ! 212: i++; ! 213: comma--; ! 214: if(sent[i+1].cc == ED || sent[i+1].cc == MVERB){ ! 215: sent[++i].cc = VERB; ! 216: continue; ! 217: } ! 218: if(command == 1){ ! 219: verb = getv(++i,ce); ! 220: continue; ! 221: } ! 222: case SUBCONJ: ! 223: subc: ! 224: savi = i; ! 225: if(nextc==END||(lastc==',' && nextc==',')){ ! 226: sent[i].cc=ADV; ! 227: continue; ! 228: } ! 229: subty=0; ! 230: ce=','; ! 231: verb=getv(++i,ce); ! 232: if(sent[savi+1].cc == VERB || sent[savi+1].cc == AUXX) ! 233: if(sent[savi].cc == SUBCONJ)sent[savi].cc = ADV; ! 234: i=getnoun(i,ce); ! 235: continue; ! 236: case PREP_ADV: ! 237: if(sent[i+2].cc==PREP_ADV &&(sent[i+1].cc != NOUN && sent[i+1].cc != NOUN_VERB ! 238: && sent[i+1].cc != NV_PL && sent[i+1].cc != PNOUN)){ ! 239: sent[i].cc=ADV; ! 240: sent[i+2].cc=CONJ; ! 241: continue; ! 242: } ! 243: sav=i++; ! 244: savsub = subty; ! 245: pverb=getv(i,ce); ! 246: if((pverb==1 && iverb == i) || sent[i].cc== ED){ ! 247: sent[sav].cc=PRONP; ! 248: sent[i].cc=VERB; ! 249: continue; ! 250: } ! 251: i=getnoun(i,ce); ! 252: if(done==1){ ! 253: sent[sav].cc=ADV; ! 254: goto sdone; ! 255: } ! 256: if(pverb==1 && iverb == i+1){ ! 257: sent[sav].cc=SUBCONJ; ! 258: ce=','; ! 259: continue; ! 260: } ! 261: switch(sent[i+1].cc){ ! 262: case UNK: ! 263: case NV_PL: ! 264: case NOUN_VERB: ! 265: case ED: ! 266: sent[sav].cc=SUBCONJ; ! 267: verb=0; ! 268: ce=','; ! 269: continue; ! 270: default: ! 271: sent[sav].cc=PREP; ! 272: subty = savsub; ! 273: continue; ! 274: } ! 275: case TO: ! 276: savi = i; ! 277: sent[i++].cc=VERB; ! 278: sw: ! 279: switch(nextc){ ! 280: case UNK: ! 281: case AUXS: ! 282: case VERB_ADJ: ! 283: case NOUN_VERB: ! 284: case VERB: ! 285: case MVERB: ! 286: sent[i].cc=VERB; ! 287: continue; ! 288: case HAVE: ! 289: sent[i].cc = VERB; ! 290: if(sent[i+1].cc == ED){ ! 291: sent[++i].cc = VERB; ! 292: continue; ! 293: } ! 294: if(sent[i+1].cc == ADV)i++; ! 295: if(sent[i+1].cc != BE)continue; ! 296: i++; ! 297: case BE: ! 298: sent[i].cc=VERB; ! 299: if(sent[i+1].cc == ADV)i++; ! 300: if(sent[i+1].cc == ED || sent[i+1].cc == ING){ ! 301: sent[++i].cc = VERB; ! 302: } ! 303: else if(sent[i+1].cc == UNK){ ! 304: sent[++i].cc = ADJ; ! 305: } ! 306: continue; ! 307: case ADV: ! 308: nextc = sent[++i].cc; ! 309: goto sw; ! 310: default: ! 311: sent[savi].cc = PREP; ! 312: prep=1; ! 313: i=getnoun(i,ce); ! 314: prep=0; ! 315: continue; ! 316: } ! 317: case NV_PL: ! 318: if(subty==0){ ! 319: i=getnoun(i,ce); ! 320: subty=PLURAL; ! 321: } ! 322: else if(verb== 0){ /*need verb*/ ! 323: sent[i].cc=VERB; ! 324: verb=1; ! 325: } ! 326: else{ ! 327: i=getnoun(i,ce); ! 328: } ! 329: continue; ! 330: case UNK: ! 331: case NOUN_VERB: ! 332: if(verb==1){ ! 333: if(be==1 && nextc != WHO){ ! 334: sent[i].cc=ADJ; ! 335: continue; ! 336: } ! 337: i=getnoun(i,ce); ! 338: } ! 339: else if(nextc==NV_PL && isnoun(sent[i+2].cc)) { ! 340: sent[i].cc=NOUN; ! 341: if(sent[i-1].cc == NOUN){ ! 342: sent[i-1].cc = ADJ; ! 343: } ! 344: subty=SING; ! 345: continue; ! 346: } ! 347: else if(subty==0){ ! 348: i=getnoun(i,ce); ! 349: continue; ! 350: } ! 351: else { /* desparation */ ! 352: sent[i].cc=VERB; ! 353: verb=1; ! 354: } ! 355: continue; ! 356: case ED: ! 357: if(verb == 0){ ! 358: sent[i].cc=VERB; ! 359: verb=1; ! 360: } ! 361: else if(sent[i-1].cc == BE){ ! 362: sent[i].cc = VERB; ! 363: } ! 364: else{ ! 365: i=getnoun(i,ce); ! 366: } ! 367: continue; ! 368: default: printf("got a %c %o on %sat %d\n",sent[i].cc,sent[i].cc,sent[i].sp,i); ! 369: } ! 370: } ! 371: sdone: ! 372: if(sent[i].cc==END && sent[i].ic != ';')return(-1); ! 373: else { ! 374: if(sent[i].ic == ';')sent[i].cc=';'; ! 375: else comma--; ! 376: return(i); ! 377: } ! 378: } ! 379: getv(si,ce) ! 380: int si; ! 381: char ce; ! 382: { ! 383: int conj; ! 384: char c; ! 385: int ik; ! 386: must=0; ! 387: bflg=0; ! 388: hflg=0; ! 389: verbty=0; ! 390: for(j=si;((c=sent[j].cc) != ce) && (c != END); j++){ ! 391: iverb=j; ! 392: switch(c){ ! 393: case ED: ! 394: continue; ! 395: case HAS: ! 396: hflg=1; ! 397: verbty=SING; ! 398: sent[j].cc=AUXX; ! 399: goto next; ! 400: case HAVE: ! 401: if(sent[j-1].cc==TO){ ! 402: continue; ! 403: } ! 404: case HAD: ! 405: hflg=1; ! 406: verbty=PLURAL; ! 407: sent[j].cc=AUXX; ! 408: goto next; ! 409: case BE: ! 410: if(sent[j].ic != BE){ ! 411: return(1); ! 412: } ! 413: continue; ! 414: case VERB: ! 415: if(sent[j-1].cc==TO){ ! 416: continue; ! 417: } ! 418: return(1); ! 419: case AUXX: ! 420: return(1); ! 421: case AUXP: ! 422: must=1; ! 423: verbty=PLURAL; ! 424: sent[j].cc=AUXX; ! 425: goto next; ! 426: case AUXS: ! 427: if(sent[j-1].cc==TO){ ! 428: continue; ! 429: } ! 430: verbty=SING; ! 431: sent[j].cc=AUXX; ! 432: goto next; ! 433: case AUX: ! 434: case AUXV: ! 435: must=1; ! 436: sent[j].cc=AUXX; ! 437: next: ! 438: if(sent[j-1].cc == CONJ && verb == 0)conj = 0; ! 439: else conj = 1; ! 440: if(question==1){ ! 441: j=getnoun(j+1,ce); ! 442: question=0; ! 443: } ! 444: getv2(ce); ! 445: if(sent[j].cc == AUXX){ ! 446: sent[j].cc = VERB; ! 447: } ! 448: if((sent[j].cc!=VERB && sent[j].cc!=BE) && sent[iverb].cc==AUXX){ ! 449: sent[iverb].cc=VERB; ! 450: for(ik=iverb+1;ik<=j;ik++){ ! 451: if(sent[ik].ic == NOM)sent[ik].cc=NOUN; ! 452: else sent[ik].cc=sent[ik].ic; ! 453: } ! 454: } ! 455: return(conj); ! 456: case BES: ! 457: verbty=SING; ! 458: bflg=1; ! 459: sent[j].cc=BE; ! 460: goto next; ! 461: case BEP: ! 462: verbty=PLURAL; ! 463: bflg=1; ! 464: sent[j].cc=BE; ! 465: goto next; ! 466: case SUBCONJ: ! 467: if(sent[j-1].cc== ',' && sent[j+1].cc == ','){ ! 468: continue; ! 469: } ! 470: case THAT: ! 471: case WHO: ! 472: goto vdone; ! 473: case ',': if(comma==1 && sent[j+1].cc==CONJ){ ! 474: goto vdone; ! 475: } ! 476: } ! 477: } ! 478: vdone: ! 479: return(0); ! 480: } ! 481: getv2(ce) ! 482: char ce; ! 483: { ! 484: int vflg; ! 485: char c; ! 486: vflg=0; ! 487: while(((c=sent[++j].cc) != ce) && (c != END)){ ! 488: switch(c){ ! 489: case NOUN_ADV: ! 490: case ADJ_ADV: ! 491: if(bflg == 0 || sent[j+1].cc == ED || sent[j+1].cc == ING){ ! 492: sent[j].cc = ADV; ! 493: } ! 494: else{ ! 495: j -= 1; ! 496: return; ! 497: } ! 498: case ADV: ! 499: continue; ! 500: case SUBCONJ: ! 501: if(sent[j+1].cc == ED || sent[j+1].cc == ING || sent[j+1].cc == ADV || ! 502: sent[j+1].cc == ADJ_ADV)sent[j].cc = ADV; ! 503: else return; ! 504: continue; ! 505: case VERB: ! 506: return; ! 507: case VERB_ADJ: ! 508: case ED: ! 509: sent[j].cc=VERB; ! 510: return; ! 511: case BE: ! 512: must=0; ! 513: bflg=1; ! 514: continue; ! 515: case ING: ! 516: if(bflg == 1){ ! 517: sent[j].cc = VERB; ! 518: } ! 519: else { ! 520: j -= 1; ! 521: } ! 522: return; ! 523: case NOUN_VERB: ! 524: case UNK: ! 525: if(bflg==1 || vflg==1 || hflg==1){ ! 526: j -= 1; ! 527: return; ! 528: } ! 529: sent[j].cc=VERB; ! 530: return; ! 531: case PRONP_ADJ: ! 532: case PRONS_ADJ: ! 533: c=sent[j+1].cc; ! 534: if(c==ED||c==ING||c==BE||must==1){ ! 535: sent[j].cc = ADV; ! 536: } ! 537: else{ ! 538: j -= 1; ! 539: return; ! 540: } ! 541: continue; ! 542: case AUXV: ! 543: case AUX: ! 544: case AUXP: ! 545: case AUXS: ! 546: case HAD: ! 547: case HAVE: ! 548: case HAS: ! 549: must=0; ! 550: vflg=1; ! 551: sent[j].cc=AUXX; ! 552: continue; ! 553: default: ! 554: j -= 1; ! 555: return; ! 556: } ! 557: } ! 558: j -= 1; ! 559: } ! 560: getnoun(k,ce) ! 561: int k,ce; ! 562: { ! 563: char c; ! 564: int st,t,nextst; ! 565: int rep; ! 566: int t1,tt; ! 567: st=k; ! 568: rep=0; ! 569: b: ! 570: nextst=sent[st+1].cc; ! 571: switch(sent[st].cc){ ! 572: case END: ! 573: done=1; ! 574: break; ! 575: case ',': ! 576: if(ce==','){ ! 577: done=1; ! 578: break; ! 579: } ! 580: else { ! 581: goto getdef; ! 582: } ! 583: case '"': ! 584: if(aflg == 1){ ! 585: st++; ! 586: goto b; ! 587: } ! 588: break; ! 589: case NOUN: ! 590: switch(nextst){ ! 591: case UNK: ! 592: case NOUN_VERB: ! 593: if(verb==1){ ! 594: goto nn; ! 595: } ! 596: if(subty != PLURAL){ ! 597: goto nn; ! 598: } ! 599: break; ! 600: case NV_PL: ! 601: if(verb==1){ ! 602: goto nn; ! 603: } ! 604: if(subty == PLURAL){ ! 605: goto nn; ! 606: } ! 607: break; ! 608: case PNOUN: ! 609: case NOUN_ADJ: ! 610: case POS: ! 611: case NOUN: ! 612: nn: ! 613: sent[st].cc=ADJ; ! 614: goto b; ! 615: } ! 616: if(prep==0)subty=SING; ! 617: break; ! 618: case PNOUN: ! 619: sent[st].cc = NOUN; ! 620: if(prep == 0)subty=PLURAL; ! 621: break; ! 622: case ADV: ! 623: st++; ! 624: goto b; ! 625: case WHO: ! 626: st=who(st,ce); ! 627: st++; ! 628: goto b; ! 629: case ADJ_ADV: ! 630: case VERB_ADJ: ! 631: case ED: ! 632: sent[st++].cc=ADJ; ! 633: goto b; ! 634: case ING: ! 635: if(isnoun(nextst)){ ! 636: sent[st++].cc=ADJ; ! 637: goto b; ! 638: } ! 639: sent[st].cc=NOUN; ! 640: if(prep==0)subty=SING; ! 641: break; ! 642: case ART: ! 643: case POS: ! 644: if(st != k){ ! 645: goto getdef; ! 646: } ! 647: case ADJ: ! 648: st++; ! 649: goto b; ! 650: case PRONP: ! 651: if(prep==0)subty=PLURAL; ! 652: ! 653: break; ! 654: case PRONS: ! 655: if(prep==0)subty=SING; ! 656: break; ! 657: case NOUN_VERB: ! 658: if((nextst==NOUN|| nextst==PNOUN)||(verb==1 && (nextst== NV_PL|| nextst==NOUN_VERB) )){ ! 659: sent[st].cc=ADJ; ! 660: goto b; ! 661: } ! 662: case NV_PL: ! 663: sent[st].cc=NOUN; ! 664: if(prep==0){ ! 665: if(sent[st].ic==NV_PL)subty=PLURAL; ! 666: else subty=SING; ! 667: } ! 668: if(sent[st-1].cc == NOUN && nounnom(sent[st-1].ic)) { ! 669: sent[st-1].cc = ADJ; ! 670: } ! 671: break; ! 672: case PRONP_ADJ: ! 673: switch(nextst){ ! 674: case PNOUN: ! 675: case NOUN_ADJ: ! 676: case NV_PL: ! 677: case ADJ_ADV: ! 678: case PRONS_ADJ: ! 679: case ADJ: ! 680: case ING: ! 681: sent[st++].cc=ADJ; ! 682: goto b; ! 683: case NOUN_VERB: ! 684: case UNK: ! 685: case ED: ! 686: if(verb == 0){ ! 687: goto def; ! 688: } ! 689: else{ ! 690: sent[st++].cc=ADJ; ! 691: goto b; ! 692: } ! 693: case NOUN: ! 694: sent[st++].cc=ADJ; ! 695: if(prep==0)subty=SING; ! 696: break; ! 697: case SUBCONJ: sent[st++].cc=PRONP; /* more than .. */ ! 698: sent[st++].cc=CONJ; ! 699: if(verb==0)verb=getv(st,ce); ! 700: goto b; ! 701: case '"': ! 702: sent[st++].cc = ADJ; ! 703: st++; ! 704: goto b; ! 705: default: ! 706: def: ! 707: sent[st].cc=PRONP; ! 708: if(prep==0)subty=PLURAL; ! 709: ! 710: break; ! 711: } ! 712: break; ! 713: case PRONS_ADJ: ! 714: if(aflg == 1 && nextst != END && nextst != ART){ ! 715: sent[st++].cc=ADJ; ! 716: goto b; ! 717: } ! 718: switch(nextst){ ! 719: case '"': ! 720: sent[st++].cc = ADJ; ! 721: st++; ! 722: goto b; ! 723: case PNOUN: ! 724: case ING: ! 725: case UNK: ! 726: case NOUN_VERB: ! 727: case NOUN_ADJ: ! 728: case ADJ_ADV: ! 729: case ADJ: ! 730: sent[st++].cc=ADJ; ! 731: goto b; ! 732: case NOUN: ! 733: sent[st++].cc=ADJ; ! 734: if(prep==0)subty=SING; ! 735: break; ! 736: case PRONS_ADJ: ! 737: sent[st++].cc=ADJ; ! 738: sent[st].cc=PRONP; ! 739: if(prep==0)subty=SING; ! 740: break; ! 741: case NV_PL: ! 742: if(verb==1){ ! 743: sent[st++].cc=ADJ; ! 744: sent[st].cc=NOUN; ! 745: if(prep==0)subty=PLURAL; ! 746: ! 747: break; ! 748: } ! 749: sent[st].cc=PRONP; ! 750: if(prep==0)subty=SING; ! 751: break; ! 752: default: ! 753: sent[st].cc=PRONP; ! 754: if(prep==0)subty=SING; ! 755: ! 756: break; ! 757: } ! 758: break; ! 759: case NOUN_ADJ: ! 760: if(nextst==NOUN||nextst==ADJ||nextst == NOUN_ADJ||nextst==PRONS_ADJ||nextst==PRONP_ADJ||nextst==PNOUN){ ! 761: sent[st++].cc=ADJ; ! 762: goto b; ! 763: } ! 764: if(nextst!=UNK && nextst != NOUN_VERB && nextst != NV_PL){ ! 765: sent[st].cc=NOUN; ! 766: if(prep==0)subty=SING; ! 767: break; ! 768: } ! 769: if(verb==1 || sent[st+2].cc==ED){ ! 770: sent[st++].cc=ADJ; ! 771: goto b; ! 772: } ! 773: sent[st].cc=NOUN; ! 774: if(prep==0)subty=SING; ! 775: break; ! 776: case UNK: ! 777: if(nextst != UNK){ ! 778: if(nextst == ',' && rep==0){ ! 779: c=sent[st+2].cc; ! 780: if((c==UNK||c==ADJ||c==NOUN_ADJ||c==ING) && isnoun(sent[st+3].cc)){ ! 781: comma--; ! 782: sent[st].cc=ADJ; ! 783: sent[st+2].cc=ADJ; ! 784: sent[st+3].cc=NOUN; ! 785: if(prep==0){ ! 786: if(sent[st+3].ic==NV_PL)subty=PLURAL; ! 787: else subty=SING; ! 788: } ! 789: return(st+3); ! 790: } ! 791: else { ! 792: sent[st].cc=NOUN; ! 793: if(prep==0)subty=SING; ! 794: break; ! 795: } ! 796: } ! 797: if(nextst==NOUN||nextst==ING ||nextst==NOUN_ADJ|| sent[st-1].cc==ADV ! 798: || nextst==ADJ || nextst==PNOUN){ ! 799: sent[st++].cc=ADJ; ! 800: goto b; ! 801: } ! 802: if((nextst==NV_PL || nextst==NOUN_VERB) &&(verb==1 ||(verb==0 && (sent[st+2].cc==UNK ! 803: || sent[st+2].cc==NOUN_VERB || sent[st+2].cc==ED||sent[st+2].cc==VERB_ADJ)))){ ! 804: sent[st++].cc=ADJ; ! 805: sent[st].cc=NOUN; ! 806: if(prep == 0)subty=PLURAL; ! 807: break; ! 808: } ! 809: if(nextst == CONJ && isadv(sent[st+2].cc)){ ! 810: sent[st].cc=ADJ; ! 811: goto b; ! 812: } ! 813: sent[st].cc=NOUN; ! 814: if(prep==0)subty=SING; ! 815: ! 816: break; ! 817: } ! 818: for(t=st+1;sent[t].cc== UNK;t++); ! 819: if(verb==0 && prep == 0){ /* UUU. */ ! 820: if(prep==0)subty=SING; ! 821: if(sent[t].cc==NV_PL|| sent[t].cc == PNOUN){ /* UUZ.*/ ! 822: if(sent[t+1].cc==UNK || sent[t+1].cc==NOUN_VERB){ /* UUZU */ ! 823: sent[t+1].cc=VERB; ! 824: verb=1; ! 825: sent[t].cc=NOUN; ! 826: t1=t; ! 827: } ! 828: else if(sent[t].cc == NV_PL){ /* UUZ. */ ! 829: sent[t].cc=VERB; ! 830: verb=1; ! 831: sent[t-1].cc=NOUN; ! 832: t1=t-1; ! 833: } ! 834: else { ! 835: sent[t].cc = NOUN; ! 836: t1 = t; ! 837: } ! 838: } ! 839: else{ /* UU. */ ! 840: if(sent[t].cc!= ED){ ! 841: sent[t-1].cc=VERB; ! 842: verb=1; ! 843: sent[t-2].cc=NOUN; ! 844: t1=t-2; ! 845: t--; ! 846: } ! 847: else { ! 848: sent[--t].cc=NOUN; ! 849: t1=t; ! 850: } ! 851: } ! 852: } ! 853: else{ ! 854: if(sent[t].cc==NOUN_VERB|| sent[t].cc==NOUN|| sent[t].cc==NV_PL|| sent[t].cc==PNOUN){ ! 855: sent[t].cc=NOUN; ! 856: if(prep==0)subty=PLURAL; ! 857: t1=t; ! 858: } ! 859: else{ ! 860: sent[--t].cc=NOUN; ! 861: if(prep==0)subty=SING; ! 862: t1=t; ! 863: } ! 864: } ! 865: for(tt=st;tt<t1;tt++)sent[tt].cc=ADJ; ! 866: st=t; ! 867: break; ! 868: } ! 869: getdef: ! 870: if(sent[st].cc == CONJ && sent[st-1].cc == ADJ){ ! 871: st++; ! 872: goto b; ! 873: } ! 874: if(sent[st-1].cc==PREP && ( sent[st].cc == THAT || sent[st].cc == SUBCONJ)){ ! 875: prep=0; ! 876: return(--st); ! 877: } ! 878: if(sent[st].cc != NOUN && sent[st].cc != PRONP && sent[st].cc != PRONS){ ! 879: st--; ! 880: if(sent[st].cc==ADJ && sent[st].ic==ING){ ! 881: sent[st].cc=NOUN; ! 882: if(prep==0)subty=SING; ! 883: } ! 884: else if(sent[st].cc == PREP){ ! 885: sent[st].cc = ADV; ! 886: } ! 887: prep=0; ! 888: return(st); ! 889: } ! 890: if(done==1){ ! 891: prep=0; ! 892: return(st); ! 893: } ! 894: if(sent[st+1].cc== ','){ ! 895: if(sent[st+2].cc==CONJ){ ! 896: if(rep==0){ ! 897: prep=0; ! 898: return(st); ! 899: } ! 900: else{ ! 901: st+=3; ! 902: comma--; ! 903: if(prep==0)subty=PLURAL; ! 904: prep=1; ! 905: goto b; ! 906: } ! 907: } ! 908: if(comma==1){ ! 909: prep=0; ! 910: return(st); ! 911: } ! 912: ! 913: switch(sent[st+2].cc){ ! 914: case PREP: ! 915: case SUBCONJ: ! 916: case PRONS: ! 917: case PRONP: ! 918: prep=0; ! 919: return(st); ! 920: default: rep++; ! 921: comma--; ! 922: st+=2; ! 923: if(prep==0)subty=PLURAL; ! 924: prep=1; ! 925: goto b; ! 926: } ! 927: } ! 928: if(sent[st+1].cc==CONJ && sent[st+2].cc != ED){ ! 929: st+=2; ! 930: if(prep==0)subty=PLURAL; ! 931: prep=1; ! 932: goto b; ! 933: } ! 934: prep=0; ! 935: return(st); ! 936: } ! 937: who(kk,ce) ! 938: int kk,ce; ! 939: { ! 940: char c; ! 941: sent[kk].cc=PRONP; ! 942: c=sent[kk+1].cc; ! 943: while(isadv(c)){ ! 944: sent[++kk].cc = ADV; ! 945: c = sent[kk+1].cc; ! 946: } ! 947: if(c==UNK||c==NOUN_VERB||c==VERB_ADJ||c==ED|| c==NV_PL||c==MVERB){ ! 948: sent[++kk].cc=VERB; ! 949: if(verb == 0)verb = getv(kk+1,ce); ! 950: return(kk); ! 951: } ! 952: w: switch(sent[++kk].cc){ ! 953: case AUXX: ! 954: case ADV: ! 955: case BE: ! 956: case VERB: ! 957: goto w; ! 958: default: ! 959: verb=getv(kk,ce); ! 960: return(--kk); ! 961: } ! 962: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.