Words.frink

View or download Words.frink in plain text format


/** This class contains methods for words and parts of speech.

    The wordlist files are part of the Moby wordlist project, available at:
    http://icon.shef.ac.uk/Moby/

    You will need to adjust the MobyPath variable to match your system.
*/


class Words
{
   /** A root URL where the Moby wordlists reside */
   class var MobyPath = "file:/home/fletch/prog/mobydict/"
   
   /** A set of nouns. */
   class var nouns = new set

   /** A set of plurals. */
   class var plurals = new set

   /** A set of noun phrases. */
   class var nounPhrases = new set

   /** A set of verbs. */
   class var verbs = new set

   /** A set of adjectives. */
   class var adjectives = new set

   /** A set of adverbs. */
   class var adverbs = new set

   /** A set of conjunctions. */
   class var conjunctions = new set

   /** A set of prepositions. */
   class var prepositions = new set

   /** A set of interjections. */
   class var interjections = new set

   /** A set of pronouns. */
   class var pronouns = new set

   /** A set of definite and indefinite articles. */
   class var articles = new set

   /** A set of definite articles. */
   class var definiteArticles = new set

   /** A set of indefinite articles. (There appear to be none in the wordlist)
   */

   class var indefiniteArticles = new set

   /** A set of nominatives. (There appear to be none in the wordlist) */
   class var nominatives = new set

   /** A set of all words.  This triggers initialization of all wordlists. */
   class var words = Words.initAll[]

   /** This triggers initialization of wordlists and returns a set of all
      words. */

   class initAll[] :=
   {
      // This will contain a set of all words.
      all = new set
      pos = url[MobyPath, "mpos/partsofspeech.txt"]
      for line = lines[pos, "ISO_8859_1"]  // Encodings are sorta random
      {
         if [word, parts] = line =~ %r/(.+)×(.+)/
         {
            all.put[word]

            // Noun?  Including plural or noun phrase
            if parts =~ %r/[Nph]/
               nouns.put[word]

            // Plural?
            if parts =~ %r/[p]/
               plurals.put[word]

            // Noun phrases?
            if parts =~ %r/[h]/
               nounPhrases.put[word]

            // Any type of verb? (verb, transitive, intransitive)
            if parts =~ %r/[Vti]/
               verbs.put[word]

            // Adjective?
            if parts =~ %r/[A]/
               adjectives.put[word]
            
            // Adverb?
            if parts =~ %r/[v]/
               adverbs.put[word]

            // Conjunction?
            if parts =~ %r/[C]/
               conjunctions.put[word]

            // Preposition?
            if parts =~ %r/[P]/
               prepositions.put[word]

            // Interjection?
            if parts =~ %r/[!]/
               interjections.put[word]

            // Pronoun?
            if parts =~ %r/[r]/
               pronouns.put[word]

            // Definite articles?
            if parts =~ %r/[D]/
            {
               definiteArticles.put[word]
               articles.put[word]
            }

            // Indefinite articles?  (there appear to be none)
            if parts =~ %r/[I]/
            {
               indefiniteArticles.put[word]
               articles.put[word]
            }

            // Nominative?  (there appear to be none)
            if parts =~ %r/[o]/
               nominatives.put[word]
         }
      }

      return all
   }

   /** Returns true if the word is in the wordlist. */
   class isKnown[str] := words.contains[str]

   /** Returns true if the string contains a noun. */
   class isNoun[str] :=
   {
      return nouns.contains[str] or (right[str, 1] == "s" and nouns.contains[left[str, -1]])
   }

   /** Returns true if the string contains a verb. */
   class isVerb[str] := verbs.contains[str]

   /** Returns true if the string contains a adjective. */
   class isAdjective[str] := adjectives.contains[str]

   /** Returns true if the string contains a adverb. */
   class isAdverb[str] := adverbs.contains[str]

   /** Returns true if the string contains a conjunction. */
   class isConjunction[str] := conjunctions.contains[str]

   /** Returns true if the string contains a preposition. */
   class isPreposition[str] := prepositions.contains[str]

   /** Returns true if the string contains a interjection. */
   class isInterjection[str] := interjections.contains[str]

   /** Returns true if the string contains a pronoun. */
   class isPronoun[str] := pronouns.contains[str]

   /** Returns true if the string contains a article. */
   class isArticle[str] := articles.contains[str]
}


View or download Words.frink in plain text format


This is a program written in the programming language Frink.
For more information, view the Frink Documentation or see More Sample Frink Programs.

Alan Eliasen was born 17934 days, 0 hours, 24 minutes ago.