自然语言处理 |动词形式更正
让我们通过一个例子来理解这一点:
- 我们的孩子训练够吗?
- 我们的孩子训练够吗?
动词“is”只能与单数名词一起使用。对于复数名词,我们使用“are”。这个问题在现实世界中很常见,我们可以通过创建动词校正映射来纠正这个错误,该映射取决于块中是否存在复数或单数名词。
代码 #1:定义动词校正映射
# singular to plural mapping
plural_verb_forms = {
('is', 'VBZ'): ('are', 'VBP'),
('was', 'VBD'): ('were', 'VBD')
}
# plural to singular mapping
singular_verb_forms = {
('are', 'VBP'): ('is', 'VBZ'),
('were', 'VBD'): ('was', 'VBD')
}
我们正在使用 first_chunk_index() 方法在块中搜索第一个标记词的位置。这个方法有一个参数“pred”,它接受一个(单词,标签)元组并返回 True 或 False。
代码 #2:first_chunk_index()
def first_chunk_index(chunk, pred, start = 0, step = 1):
l = len(chunk)
end = l if step > 0 else -1
for i in range(start, end, step):
if pred(chunk[i]):
return i
return None
如果 (word, tag) 参数中的标签以给定的标签前缀开头,则下面代码中的谓词函数将返回 True。否则,假的。
代码#3:
def tag_startswith(prefix):
def f(wt):
return wt[1].startswith(prefix)
return f
代码#4:让我们更正动词形式
from transforms import correct_verbs
print ("Corrected verb forms : \n",
correct_verbs([('is', 'VBZ'), ('our', 'PRP$'),
('children', 'NNS'), ('learning', 'VBG')]))
输出 :
Corrected verb forms :
[('are', 'VBP'), ('our', 'PRP$'), ('children', 'NNS'), ('learning',
'VBG')]