📜  自然语言处理 |复数名词单数化和无限短语交换

📅  最后修改于: 2022-05-13 01:54:31.491000             🧑  作者: Mango

自然语言处理 |复数名词单数化和无限短语交换

让我们通过一个例子来理解这一点:

  1. 我们的孩子训练够吗?
  2. 我们的孩子训练够吗?

动词“is”只能与单数名词一起使用。对于复数名词,我们使用“are”。这个问题在现实世界中很常见,我们可以通过创建动词校正映射来纠正这个错误,该映射取决于块中是否存在复数或单数名词。

代码 #1:singularize_plural_noun() 类

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


代码#2:单数化复数

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

输出 :

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

上面的代码查找标签 NNS 以查找复数名词。在创建之后,如果下一个词是名词(通过确保标签以 NN 开头来确定),那么我们通过从标签和单词的右侧删除“s”来去除复数名词。

交换无限短语
不定式短语的形式为 A 的 B ,例如“电影世界”。 On 可以将其转换为“电影世界”,它仍然具有相同的含义。

代码 #3:让我们了解 swap_infinitive_phrase() 类

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]


代码 #4:让我们评估 swap_infinitive_phrase

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

输出 :

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