我想测量文本中“以人为中心”的词汇量,用于一个项目。我计划使用WordNet来完成这个任务。我从未使用过它,也不太确定如何着手解决这个问题。我想使用WordNet来计算属于某些同义词集的单词数量,例如“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' object has no attribute '_name''。我该使用哪个方法来遍历单词的上位词(hypernyms)并在单词确实属于“人”或“人类”同义词集时执行某些操作(例如增加人类中心性计数)。
其次,这是否是有效的方法?我假设在多个文本上迭代并遍历每个名词的上位词将需要相当长的时间...也许有另一种方法可以更有效地使用WordNet来执行我的任务。
谢谢您的帮助!