Chris16
Chris16

Reputation: 1

Python Error"TypeError: coercing to Unicode: need string or buffer, list found"

The purpose of this code is to make a program that searches a persons name (on Wikipedia, specifically) and uses keywords to come up with reasons why that person is significant. I'm having issues with this specific line "if fact_amount < 5 and (terms in sentence.lower()):" because I get this error ("TypeError: coercing to Unicode: need string or buffer, list found") If you could offer some guidance it would be greatly appreciated, thank you.

    import requests
    import nltk
    import re

    #You will need to install requests and nltk
    terms = ['pronounced'
    'was a significant'
    'major/considerable influence'
    'one of the (X) most important'
    'major figure'
    'earliest'
    'known as'
    'father of' 
    'best known for' 
    'was a major']
names = ["Nelson Mandela","Bill Gates","Steve Jobs","Lebron James"]
#List of people that you need to get info from
for name in names:
print name
print '==============='
#Goes to the wikipedia page of the person
r = requests.get('http://en.wikipedia.org/wiki/%s' % (name))
#Parses the raw html into text
raw = nltk.clean_html(r.text)
#Tries to split each sentence.
#sort of buggy though
#For example St. Mary will split after St.
sentences = re.split('[?!.][\s]*',raw)
fact_amount = 0
for sentence in sentences:
    #I noticed that important things came after 'he was' and 'she was'
    #Seems to work for my sample list
    #Also there may be buggy sentences, so I return 5 instead of 3
    if fact_amount < 5 and (terms in sentence.lower()):
        #remove the reference notation that wikipedia has
        #ex [ 33 ]
        sentence = re.sub('[ [0-9]+ ]', '', sentence)
        #removes newlines
        sentence = re.sub('\n', '', sentence)
        #removes trailing and leading whitespace
        sentence = sentence.strip()
         fact_amount += 1
        #sentence is formatted. Print it out
        print sentence + '.'
 print

Upvotes: 0

Views: 4157

Answers (2)

jfs
jfs

Reputation: 414905

you might mean if any(t in sentence_lower for t in terms), to check whether any terms from terms list is in the sentence string.

Upvotes: 2

thefourtheye
thefourtheye

Reputation: 239693

You should be checking it the other way

sentence.lower() in terms

terms is list and sentence.lower() is a string. You can check if a particular string is there in a list, but you cannot check if a list is there in a string.

Upvotes: 2

Related Questions