Open In App

NLP | Singularizing Plural Nouns and Swapping Infinite Phrases

Improve
Improve
Like Article
Like
Save
Share
Report

Let’s understand this with an example :

  1. Is our child training enough?
  2. Are our children training enough?

The verb ‘is’ can only be used with singular nouns. For plural nouns, we use ‘are’. This problem is very common in the real world and we can correct this mistake by creating verb correction mappings that are used depending on whether there’s a plural or singular noun in the chunk. 

Code #1 : singularize_plural_noun() class 

Python3




def singularize_plural_noun(chunk):
     
    nnsidx = first_chunk_index(chunk, tag_equals('NNS'))
     
    if nnsidx is not None and
    nnsidx + 1 < len(chunk) and
    chunk[nnsidx + 1][1][:2] == 'NN':
         
        noun, nnstag = chunk[nnsidx]
        chunk[nnsidx] = (noun.rstrip('s'), nnstag.rstrip('S'))
         
    return chunk


  Code #2 : Singularizing Plurals 

Python3




singularize_plural_noun([('recipes', 'NNS'), ('book', 'NN')])


Output :

[('recipe', 'NN'), ('book', 'NN')]

The code above looks for the tag NNS to look for Plural Noun. After founding it, if the next word is a noun (determined by making sure the tag starts with NN), then we depluralize the plural noun by removing ‘s’ from the right side of both the tag and the word. Swapping Infinite Phrases An infinitive phrase is of the form A of B, such as ‘world of movies’. One can transform this into ‘movies world’ and it still holds the same meaning. 

Code #3 : Let’s understand the swap_infinitive_phrase() class 

Python3




def swap_infinitive_phrase(chunk):
    def inpred(wt):
        word, tag = wt
        return tag == 'IN' and word != 'like'
   
    inidx = first_chunk_index(chunk, inpred)
     
    if inidx is None:
        return chunk
     
    nnidx = first_chunk_index(chunk,
                              tag_startswith('NN'),
                              start = inidx, step =-1) or 0
                               
    return chunk[:nnidx] + chunk[inidx + 1:] + chunk[nnidx:inidx]


  Code #4 : Let’s evaluate swap_infinitive_phrase 

Python3




from transforms import swap_infinitive_phrase
 
swap_infinitive_phrase([('book', 'NN'),
                        ('of', 'IN'), ('recipes', 'NNS')])


Output :

[('recipes', 'NNS'), ('book', 'NN')]


Last Updated : 08 Aug, 2022
Like Article
Save Article
Previous
Next
Share your thoughts in the comments
Similar Reads