我在使用 Spacy 时遇到问题

问题描述 投票:0回答:1

导入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 个各位,我不明白这个问题

我希望输出能够提取数值及其属性

nlp spacy
1个回答
0
投票

您遇到的问题源于字典键基于

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}

© www.soinside.com 2019 - 2024. All rights reserved.