function getWordOfType(relationshipType) {
   if (relationshipType in wordDict) {
     // console.log('got word of type:', relationshipType);
     var words = wordDict[relationshipType];
     var validWords = words.filter(doesNotContainBase).filter(iscool);
     if (validWords.length > 0) {
       picked = probable.pickFromArray(validWords);
       picked = canonicalizer.getSingularAndPluralForms(picked)[0];
       return true;
     }
   }
   return false;
 }
Example #2
0
  function collectivize(noun, done) {
    var forms = canonicalizer.getSingularAndPluralForms(noun);
    var plural = forms[1];
    var singular = forms[0];
    var collectiveNoun;
    var resultIndex = 0;
    var results;

    filters = createCandidateWordFilters({
      singularFormOfRoot: singular,
      pluralFormOfRoot: plural
    });

    google('"of ' + plural + '"', combResults);

    function combResults(error, next, searchResults) {
      if (error) {
        done(error);
      }
      else {
        results = searchResults;
        async.map(searchResults, parseResults, scoreCandidates);
      }
    }

    function parseResults(result, done) {
      var candidates = {};
      resultIndex += 1;
      // console.log(result.link);

      if (!notFalsePositiveURL(result.link) ||
        !searchResultIsNotFromADictionary(result)) {

        // console.log('Filtering result from:', result.link);
        done();
        return;
      }

      var q = queue();

      var categorizedResult = categorizeByPrecedingOf(result);
      q.defer(
        getNounCandidates, wordnok, categorizedResult.wordsNotPrecedingOf
      );
      q.defer(getNounCandidates, wordnok, categorizedResult.wordsPrecedingOf);

      q.await(sumUp);

      function sumUp(error, reportNotPrecedingOf, reportPrecedingOf) {
        if (error) {
          done(error);
        }
        else {
          candidates.nouns = reportNotPrecedingOf;
          candidates.beforeOfNouns = reportPrecedingOf;
          applyFiltersToCandidates(candidates);
          done(null, candidates);
        }
      }
    }

    function applyFiltersToCandidates(candidates) {
      for (var key in candidates) {
        candidates[key].fromTitle = filters.applyAllFiltersToWords(
          candidates[key].fromTitle
        );
        candidates[key].fromDesc = filters.applyAllFiltersToWords(
          candidates[key].fromDesc
        );
      }
    }

    function scoreCandidates(error, results) {
      // console.log('Scoring:',JSON.stringify(results, null, '  '));
      rateCandidates(results, wordnok, pickCandidatesFromResults);
    }

    function pickCandidatesFromResults(error, scoresForCandidates) {
      var sortedCandidatesForScores = _.invert(scoresForCandidates);
      done(error, sortedCandidatesForScores);
    }
  }
 function saveBase(word, done) {
   baseWord = canonicalizer.getSingularAndPluralForms(word)[0];
   callNextTick(done, null, baseWord);
 }