NLP |单数复数名词和交换无限短语
让我们用一个例子来理解这一点:
- 我们的孩子训练够了吗?
- 我们的孩子训练够了吗?
动词“is”只能与单数名词连用。对于复数名词,我们用“是”。这个问题在现实世界中非常常见,我们可以通过创建动词纠正映射来纠正这个错误,该映射的使用取决于词块中的名词是复数还是单数。
代码#1:奇点_复数_名词()类
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,如“电影世界”。On 可以将它转换为“电影世界”,它仍然具有相同的含义。
代码#3:我们来了解一下 swap_infinitive_短语()类
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_短语
from transforms import swap_infinitive_phrase
swap_infinitive_phrase([('book', 'NN'),
('of', 'IN'), ('recipes', 'NNS')])
输出:
[('recipes', 'NNS'), ('book', 'NN')]