void WordFormTrain() { Obj *obj; ObjToLexEntry *ole1, *ole2; if (WordFormTrained) return; Dbg(DBGLEX, DBGDETAIL, "WordFormTrain starting"); for (obj = Objs; obj; obj = obj->next) { for (ole1 = obj->ole; ole1; ole1 = ole1->next) { if (WordFormSkipLink(ole1->features)) continue; if (WordFormSkipLe(ole1->le->features)) continue; for (ole2 = obj->ole; ole2; ole2 = ole2->next) { if (ole1 == ole2) continue; if (WordFormSkipLink(ole2->features)) continue; if (WordFormSkipLe(ole2->le->features)) continue; /* keep this test consistent with WORDFORM_MINSTEM */ if (LexEntryIsPhrase(ole1->le) || !MorphIsWord(ole1->le->srcphrase)) { continue; } if (LexEntryIsPhrase(ole2->le) || !MorphIsWord(ole2->le->srcphrase)) { continue; } if (ole1->le->srcphrase[0] == ole2->le->srcphrase[0] && ole1->le->srcphrase[1] == ole2->le->srcphrase[1] && ole1->le->srcphrase[2] == ole2->le->srcphrase[2]) { WordFormTrain1(ole1, ole2); } } } } WordFormTrained = 1; Dbg(DBGLEX, DBGDETAIL, "WordFormTrain done"); }
LexEntry *ObjToAbbrev(Obj *obj, int force, Discourse *dc) { int pos; ObjToLexEntry *ole; if (!obj) return(NULL); for (ole = obj->ole; ole; ole = ole->next) { if (F_NULL != FeatureGet(ole->features, FT_PARUNIV)) continue; if (DC(dc).lang != FeatureGet(ole->le->features, FT_LANG)) continue; pos = FeatureGet(ole->le->features, FT_POS); if (pos != F_NOUN && pos != F_ADJECTIVE) continue; if (F_LITERARY == FeatureGet(ole->features, FT_STYLE) && !MorphIsWord(ole->le->srcphrase)) { return(ole->le); } } if (force) { if ((ole = ObjToLexEntryGet1(obj, NULL, "NA", F_NULL, F_NULL, NULL, dc))) { return(ole->le); } } return(NULL); }