Assignment 1: Princeton WordNet

Deadline: 24 September, 23.59 CET

How to report the assignment

  • The completed assignment file assign1.py should be mailed to markus.forsberg@gu.se, with an appropriate subject line. Remember to write your full names in the mail, and as a header in the assignment file (as a doc string).
  • Requirements

    Description

    In this assignment we will work with the Princeton WordNet.

    1. Read NLTK book chapter 2.5 about Princeton WordNet, and test the examples.

      Note 1: the focus of this assignment is on the synonymy relation with its corresponding concept synset (Senses and Synonyms in chapter 2.5). But have a look at the other relations.

      Note 2: WordNet is an extremely rich lexical-semantic resource that we could spend a whole course on. Here we use it to make things a bit more interesting.

    2. Create a file assign1.py containing the code below. (replace NAME with your full names). Define all procedures and functions in this file.

      """Assignment 1: WordNet (deadline: 2010-09-24)
      Name 1: NAME
      Name 2: NAME
      """
      from nltk.corpus import wordnet as wn
      import random
      
    3. Define a procedure print_synsets(word) that given word, lookups up the synsets of word and prints, for every synset, its lemma_names, definition, and examples (if there is no examples, print no examples). If word is missing from WordNet, print no synsets.

      Hint: before you start, think through what needs to be done, and define help functions where appropriate.

      Hint 2: use string formatting

      The output of print_synsets is exemplified below.

      >>> import assign1
      
      >>> assign1.print_synsets('house')
      synset 1: {house}
        def: "a dwelling that serves as living quarters for one or more families"
        example: "he has a house on Cape Cod"
        example: "she felt she had to get out of the house"
      
      synset 2: {firm, house, business_firm}
        def: "the members of a business organization that owns or operates one or more establishments"
        example: "he worked for a brokerage house"
      
      synset 3: {house}
        def: "the members of a religious community living together"
        no examples
      
      synset 4: {house}
        def: "the audience gathered together in a theatre or cinema"
        example: "the house applauded"
        example: "he counted the house"
      
      synset 5: {house}
        def: "an official assembly having legislative powers"
        example: "a bicameral legislature has two houses"
      
      synset 6: {house}
        def: "aristocratic family line"
        example: "the House of York"
      
      synset 7: {house}
        def: "play in which children take the roles of father or mother or children and pretend to interact like adults"
        example: "the children were playing house"
      
      synset 8: {sign_of_the_zodiac, star_sign, sign, mansion, house, planetary_house}
        def: "(astrology) one of 12 equal areas into which the zodiac is divided"
        no examples
      
      synset 9: {house}
        def: "the management of a gambling house or casino"
        example: "the house gets a percentage of every bet"
      
      synset 10: {family, household, house, home, menage}
        def: "a social unit living together"
        example: "he moved his family to Virginia"
        example: "It was a good Christian household"
        example: "I waited until the whole house was asleep"
        example: "the teacher asked how many people made up his home"
      
      synset 11: {theater, theatre, house}
        def: "a building where theatrical performances or motion-picture shows can be presented"
        example: "the house was full"
      
      synset 12: {house}
        def: "a building in which something is sheltered or located"
        example: "they had a large carriage house"
      
      synset 13: {house}
        def: "contain or cover"
        example: "This box houses the gears"
      
      synset 14: {house, put_up, domiciliate}
        def: "provide housing for"
        example: "The immigrants were housed in a new development outside the town"
      
      >>> assign1.print_synsets('qrsx')
      no synsets
      
    4. Define a function synonyms(word) that returns a set of lemma_names of the synsets of word.

      The output of synonyms is exemplified below.

      >>> assign1.synonyms('house')
      set(['firm', 'put_up', 'theater', 'family', 'planetary_house', 
      'menage', 'house', 'household', 'theatre', 'star_sign', 
      'sign_of_the_zodiac', 'sign', 'domiciliate', 'mansion', 
      'home', 'business_firm'])
      
      >>> assign1.synonyms('computer')
      set(['data_processor', 'computing_machine', 'information_processing_system', 
      'calculator', 'computing_device', 'estimator', 'electronic_computer', 
      'computer', 'figurer', 'reckoner'])
      >>> assign1.synonyms('qrsx')
      set([])
      
    5. Define a function random_pick(lst) that randomly selects an element from a list.

      Hint: use random.randint in module random. Try out random.randint(1,10) (execute it a couple of times).

      The output of random_pick is exemplified below.

      >>> assign1.random_pick(['a','b','c','d','e'])
      'e'
      
      >>> assign1.random_pick(['a','b','c','d','e'])
      'b'
      
      >>> assign1.random_pick(['a','b','c','d','e'])
      'c'
      
    6. Define a function random_synonym(word) that randomly generate one of the synonyms of word, except word itself, unless it is the only word.

      If word is not in WordNet, then the function returns *word* (a star in the beginning and end of word).

      Hint: use synonyms and random_pick.

      The output of random_synonym is exemplified below.

      >>> assign1.random_synonym('house')
      'household'
      
      >>> assign1.random_synonym('house')
      'menage'
      
      >>> assign1.random_synonym('computer')
      'computing_machine'
      
      >>> assign1.random_synonym('xqrs')
      '*xqrs*'
      
    7. Define a function synonymify(sentence) that apply random_synonym to every word in sentence.

      The output of synonymify is exemplified below.

      >>> assign1.synonymify('bill sits in front a computer in his house')
      'bank_note ride Indiana front_man adenine reckoner inward *his* sign'
      
      >>> assign1.synonymify('bill sits in front a computer in his house')
      'account pose Hoosier_State look ampere figurer inch *his* star_sign'
      
      >>> assign1.synonymify('bill sits in front a computer in his house')
      'flier sit_down indium breast angstrom_unit computing_device inch *his* domiciliate'
      
    8. To think about: the output of synonymify is rather strange. Do you have any ideas on how to improve the function so the meaning of sentence is preserved?