with TEXT_IO; use TEXT_IO; with INFLECTIONS_PACKAGE; use INFLECTIONS_PACKAGE; procedure WEED(W : in out STRING; POFS : in PART_OF_SPEECH_TYPE) is -- In contrast to the Latin phase where the prioritization takes is at runtime -- for the English most of the work is done beforehand -- both the setting of a priority class for each entry in the scan of DICTLINE -- and the WEEDing/TRIMming done herein -- There may not be much reason to WEED -- If there are a hundred "the", does it matter. No one should input "the" -- But it is a matter of logic and secondary effects (special on "the") KILL : BOOLEAN := FALSE; begin --PUT_LINE("WEED " & W & '|'); -- if -- WORDS words -- W = "ACC" or -- W = "ABL" or -- W = "AD" or -- W = "BC" or -- W = "DAT" or -- W = "DEMONST" or -- W = "INDEF" or -- W = "INF" or -- W = "KLUDGE" or -- W = "NE" or -- W = "NW" or -- W = "NT" or -- W = "OT" or -- W = "PASS" or -- W = "SE" or -- W = "SW" or -- W = "St" -- -- then -- -- KILL := TRUE; -- end if; -- -- Articles -- W = "a" or -- W = "an" or -- W = "the" or -- Conjunctions if (POFS /= CONJ) and then (W = "and" or W = "or" or W = "but" or W = "if" ) then KILL := TRUE; end if; -- Prepositions if (POFS /= PREP) and then (W = "of" or W = "to" or W = "in" or W = "into" or W = "with" or W = "w" or W = "without" or W = "for" or W = "per" or W = "on" or W = "upon" or W = "by" or W = "from" or W = "between" or W = "at" or W = "towards" or W = "under" or W = "before" or W = "against" or W = "around" or W = "through" or W = "after" or W = "like" or W = "similar" or W = "than" or W = "as" ) then KILL := TRUE; end if; if (POFS /= N) and then (-- General nouns W = "person" or W = "man" or W = "men" or W = "woman" or W = "member" or W = "species" or W = "instrument" or W = "word" or W = "words" or --W = "shape" or W = "parts" or W = "title" or W = "office" or W = "thing" or W = "day" or W = "land" or W = "plant" or W = "plants" or W = "tree" or W = "fish" or W = "stone" or W = "stones" or W = "gem" or W = "vessel" or W = "pieces" or W = "animal" or W = "bird" or W = "measure" or W = "inhabitant" or W = "place" or W = "tribe" or W = "group" or W = "official" or W = "thing" or W = "things" or W = "something" or --W = "matter" or W = "law" ) then KILL := TRUE; end if; if W = "something" or W = "quality" or W = "heap" or W = "amount" or W = "money" or W = "part" or W = "front" or W = "preparation" or W = "purpose" or W = "bit" or W = "way" or W = "maker" or W = "material" or W = "action" or W = "act" or W = "form" or W = "point" or W = "right" or W = "order" or W = "area" or W = "rest" or W = "cover" or -- Common nouns W = "Rome" or W = "rome" or W = "praenomen" or W = "gens" or W = "offering" or W = "note" or W = "water" or W = "ear" or W = "end" or W = "ritual" or W = "rite" or W = "hair" or W = "time" or W = "charactistic" or W = "building" or W = "sea" or W = "ship" then KILL := TRUE; end if; if (POFS /= ADJ) and then (--Adjectives W = "some" or W = "several" or W = "another" or W = "male" or W = "legal" or W = "female" or W = "official" or W = "no" or W = "wild" or W = "dark" or W = "sacred" or W = "Roman" or W = "roman" or W = "precious" or W = "short" or W = "long" or W = "low" or W = "young" or W = "old" or W = "large" or W = "light" or W = "round" or W = "high" or W = "near" or W = "little" or W = "small" ) then KILL := TRUE; end if; if (POFS /= ADJ) and then (--More Adjectives W = "more" or W = "military" or W = "many" or W = "suitable" or W = "hot" or W = "used" or W = "joint" or W = "proper" or W = "great" or -- great-great uncle W = "full" or W = "sexual" or W = "public" or W = "white" or W = "secret" or W = "hard" or W = "good" or W = "fine" or W = "common" ) then KILL := TRUE; end if; if (POFS /= ADV) and then ( W = "up" or W = "out" or --W = "away" or W = "over" or W = "down" or W = "back" or W = "forth" or W = "foward" or W = "about" or W = "together" or W = "off" or --Adverbs (pure) W = "much" or W = "throughly" or W = "closly" or W = "well" or W = "very" or W = "not" or W = "too" or W = "also" or W = "when" or W = "where" or W = "then" or W = "there" or W = "so" ) then KILL := TRUE; end if; if (POFS /= PRON) and then (POFS /= PACK) and then ( -- Pronouns and indefinites W = "one" or W = "ones" or W = "he" or W = "any" or W = "anyone" or W = "anything" or W = "each" or W = "every" or W = "other" or W = "you" or W = "who" or W = "whatever" or W = "oneself" or W = "self" or W = "all" or W = "it" or W = "this" or W = "she" or W = "such" or W = "what" or W = "which" or W = "that" or W = "same" ) then KILL := TRUE; end if; if ( W = "kind" or W = "manner" or W = "variety" or -- Posessives W = "its" or W = "own" or W = "his" or W = "ones" or W = "one's" or W = "pertaining" or W = "belonging" or W = "containing" or W = "consisting" or W = "relating" or W = "resembling" or W = "abounding" or W = "concerned" or W = "producing" or W = "connected" or W = "made" or W = "used" or W = "having" ) then KILL := TRUE; end if; if (POFS /= V) and then (-- Verbs W = "take" or W = "make" or W = "go" or -- !! W = "bring" or W = "cut" or W = "put" or W = "set" or W = "grow" or W = "give" or W = "cause" or W = "turn" or W = "fall" or W = "hold" or W = "keep" or W = "construct" or W = "throw" or W = "lay" or W = "remove" or W = "produce" or W = "use" or W = "order" or W = "provide" or W = "being" or W = "making" or W = "lacking" ) then KILL := TRUE; end if; if -- Numbers -- W = "half" or -- W = "one" or -- W = "first" or -- W = "two" or -- W = "second" or -- W = "double" or -- W = "three" or -- W = "third" or -- W = "four" or -- W = "seven" or -- W = "ten" or -- W = "times" or -- Compounding verbs W = "have" or W = "has" or W = "had" or W = "was" or W = "be" or W = "become" or W = "can" or W = "do" or W = "may" or W = "must" or W = "let" or -- Supporting verbs W = "is" or W = "been" or --W = "attempt" or W = "begin" --or then KILL := TRUE; end if; -- if -- -- Abbreviations -- W = "abb" -- then -- KILL := TRUE; -- -- end if; -- -- -- - Kill abbreviations -- if W(W'LAST) = '.' then -- KILL := TRUE; -- end if; -- -- if KILL then for I in W'RANGE loop W(I) := '\'; end loop; end if; --PUT_LINE("WEEDed " & W & '|' & BOOLEAN'IMAGE(KILL)); end WEED;