AttributeError: 'list' object has no attribute 'lower'

Token Type typetoken at gmail.com
Sat Sep 8 13:13:21 EDT 2012


On page 77 of the book natural language processing with Python, we have such an exercise: The polysemy of a word is the number of senses it has. Using WordNet, we can determine that the noun doghas seven senses with len(wn.synsets('dog', 'n')).
Compute the average polysemy of nouns, verbs, adjectives, and adverbs according
to WordNet.http://nltk.googlecode.com/svn/trunk/doc/book/ch02.html

I wrote the following function to solve it. However, it pops up "AttributeError: 'list' object has no attribute 'lower'". Quite confused, I supposed [synset.lemma_names for synset in synset_list] has made all the lemma into a list, hasn't it?

>>> def average_polysemy(pos):
	synset_list = list(wn.all_synsets(pos))
	lemma_list = [synset.lemma_names for synset in synset_list]
	sense_number = 0
	for lemma in lemma_list:
		sense_number_new = len(wn.synsets(lemma, pos))
		sense_number = sense_number + sense_number_new
	return sense_number/len(synset_list)

>>> average_polysemy('n')

Traceback (most recent call last):
  File "<pyshell#54>", line 1, in <module>
    average_polysemy('n')
  File "<pyshell#53>", line 6, in average_polysemy
    sense_number_new = len(wn.synsets(lemma, pos))
  File "C:\Python27\lib\site-packages\nltk\corpus\reader\wordnet.py", line 1191, in synsets
    lemma = lemma.lower()
AttributeError: 'list' object has no attribute 'lower'

Thanks for your tips




More information about the Python-list mailing list