我有一句话=“嗨,我的车号是H 11231,我的卡号是11122”。我标记了该句子,然后POS标记了标记化的句子。我想获取车号,我创建了一个循环来检查索引是否在数字上(11231)。然后在1个元组的前后检查其标签NNP(代表1个字母)
import nltk
sentence = 'hi there, my car number is H 11231, and my card number is 11122'
tokenizedSent = nltk.word_tokenize(sentence)
tagged = nltk.pos_tag(tokenizedSent)
print(tagged)
output = []
print(tagged)
for i in tagged:
if i[1] == 'CD':
output.append(i[0])
elif i[1] == 'NNP':
output.append(i[0])
该句子有两个数字,分别是11231和11122。但是,其中只有一个是被NNP标记为之前的汽车编号
答案 0 :(得分:0)
您的解决方案遍历标签的集合,并且仅使用CD和NNP标签。
您只想要数字。
第一件事:获取数字:
IndexTag = namedtuple('IndexTag', ['tag', 'index'])
numbers = []
for i, tag in enumerate(tagged):
if tag[1] == 'number':
numbers.append(IndexTag(tag, i))
现在您有了电话号码,就可以检查“上一个标签是NNP”:
car_ids = []
for number in numbers:
if number.index > 0 and tagged[number.index - 1][1] == 'NNP':
car_ids.append(number)