自然语言处理 |复数名词单数化和无限短语交换
让我们通过一个例子来理解这一点:
- 我们的孩子训练够吗?
- 我们的孩子训练够吗?
动词“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')]