导入spacy
nlp = spacy.blank('en')
句子 =“从 7 名男性和 6 名女性中,选出 5 人组成一个委员会,这样委员会中至少有 3 名男性。有多少种方法可以完成?”
单词=句子.split()
doc = nlp(句子)
代币 = []
对于 i,枚举中的标记(doc): if (token.is_digit 或 token.like_num) and (i > 0): tokens.append(doc[i:i+2].text)
tokens = [i.split() for i in tokens]
值 = [] 属性=[]
对于代币中的代币: 值.append(令牌[0]) 属性.append(令牌[1])
对于 zip 中的 i、j(属性、值): print(i, j) - 我运行了这段代码,通常它显示所有值,但是当我将其转换为字典时,它不显示问题中的 7 个男人,只显示 3 个男人、6 个女人和 5 个各位,我不明白这个问题
我希望输出能够提取数值及其属性
您遇到的问题源于字典键基于
attributes
列表的事实。理想情况下,字典键应该是唯一的,以避免歧义; Python 不会强制执行此操作,而是会使用已存在的键覆盖值。
例如:
my_dict = {}
my_dict['apple'] = 1
my_dict['banana'] = 2
my_dict['apple'] = 3 # Overwrites previous value
听起来您的代码按预期工作;否则;但是当你从列表转换为字典时,键“men”首先设置为7,然后覆盖为3。
解决这个问题的一个想法可能是使用
zip_longest
模块中的 itertools
函数。这是一个例子:
from itertools import zip_longest
#...your existing code...
for i, j in zip_longest(attributes, values, fillvalue=None):
my_dict[i] = j
print(my_dict)
输出现在应该是:
{'men': 7, 'women': 6, 'persons': 'five', 'men': 3}