【发布时间】:2015-12-02 13:09:31
【问题描述】:
对于一个项目,我想测量文本中“以人为本”单词的数量。我打算用 WordNet 来做这件事。我从未使用过它,我不太确定如何完成这项任务。我想使用 WordNet 来计算属于某些同义词集的词的数量,例如 sysnets ‘human’ 和 ‘person’。
我想出了以下(简单的)代码:
word = 'girlfriend'
word_synsets = wn.synsets(word)[0]
hypernyms = word_synsets.hypernym_paths()[0]
for element in hypernyms:
print element
结果:
Synset('entity.n.01')
Synset('physical_entity.n.01')
Synset('causal_agent.n.01')
Synset('person.n.01')
Synset('friend.n.01')
Synset('girlfriend.n.01')
我的第一个问题是,如何正确迭代上位词?在上面的代码中,它可以很好地打印它们。但是,当使用“if”语句时,例如:
count_humancenteredness = 0
for element in hypernyms:
if element == 'person':
print 'found person hypernym'
count_humancenteredness +=1
我得到'AttributeError:'str'对象没有属性'_name''。当一个词确实属于“人”或“人”同义词集时,我可以使用什么方法来迭代我的词的上位词并执行一个动作(例如增加人类中心性的计数)。
其次,这是一种有效的方法吗?我假设遍历多个文本并遍历每个名词的上位词将需要相当长的时间。也许还有另一种方法可以使用 WordNet 更有效地执行我的任务。
感谢您的帮助!
【问题讨论】: