首页 > 解决方案 > Python:从输入中猜测性别

问题描述

所以,我使用 python 包“gender-guesser”根据他们的名字来检测人的性别。但是,我想从没有人名的句子中识别性别。

假设我有以下句子:

“在你之前有一个 14 岁的男性,他从床上起来并有某种晕厥发作。”

这句话只是一个例子,只有男性这个词,没有人名。但是,输入可以包含其他词,如男孩、女孩、女士、变性人、男人、女人、男人、未知等。

这是我目前正在尝试做的,但对于我想要的最终结果可能不正确:

#original string
wordlist=tokens
# using split() function

# total no of words
male_count=0
female_count=0

for i in range(len(wordlist)):
  if wordlist[i]==('male' or 'boy' or 'guy' or 'man'):
    print(i)
    male_count= male_count+1
  
  else: 
    if wordlist[i]==('female' or 'girl' or 'lady' or 'woman'):
      female_count= female_count+1

有没有更好的方法来识别性别?

标签: pythonnlpstanford-nlp

解决方案


几个改进的方法:

  1. 而不是if wordlist[i]==('male' or 'boy' or 'guy' or 'man'),您可以检查 if wordlist[i] in ['male', 'boy', 'guy', 'man']。同样适用于女性。
  2. 没什么大不了的,但您可以创建一个as ,而不是list(即 ['male', 'boy', 'guy', 'man']),同样适用于女性。setset(['male', 'boy', 'guy', 'man'])
  3. 不需要else.
  4. 你可以用whicha += 1代替a = a + 1which 做同样的工作。
  5. 您不需要遍历range(len(wordlist)). 你可以迭代word_list

因此,您的代码可以进行如下清理:

male_count = 0
female_count = 0

male_categories = set(['male', 'boy', 'guy', 'man'])
female_categories = set(['female', 'girl', 'lady', 'woman'])
for word in wordlist:
    if word in male_categories:
        male_count += 1
    if word in female_categories:
        female_count += 1

也有不同的方法可以做到这一点,例如counting males + boys + guy + man在列表中只有一两行。但我认为这是一个更好的开始,也更容易理解。


推荐阅读