Ejemplo n.º 1
0
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");
}
Ejemplo n.º 2
0
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);
}