2017-01-07 3 views
0

ich ein Problem mit dieser Linie haben:definierte Funktion bekam ein unerwartetes Stichwort Argument

processed = process(cleaned, lemmatizer=nltk.stem.wordnet.WordNetLemmatizer()); 

Warum ist das Unerwartete Stichwort Argument auftauchen?

Error: TypeError: process() got an unexpected keyword argument 'lemmatizer' 

Hier ist mein Code:

def process(text, filters=nltk.corpus.stopwords.words('english')): 
""" Normalizes case and handles punctuation 
Inputs: 
    text: str: raw text 
    lemmatizer: an instance of a class implementing the lemmatize() method 
       (the default argument is of type nltk.stem.wordnet.WordNetLemmatizer) 
Outputs: 
    list(str): tokenized text 
""" 
lemmatizer=nltk.stem.wordnet.WordNetLemmatizer() 
word_list = nltk.word_tokenize(text); 

lemma_list = []; 
for i in word_list: 
    if i not in filters: 
     try: 
      lemma = lemmatizer.lemmatize(i); 
      lemma_list.append(str(lemma)); 
     except: 
      pass 
return " ".join(lemma_list) 


if __name__ == '__main__': 
#construct filter for processor 
file = open("accountant.txt").read().lower() 
filters = set(nltk.word_tokenize(file)) 
filters.update(nltk.corpus.stopwords.words('english')) 
filters = list(filters) 

#webcrawling 
webContent = [] 
dataJobs = pd.read_csv("test.csv"); 
webContent = [] 
for i in dataJobs["url"]: 
    content = webCrawl(i); 
    webContent.append(content); 

#clean the crawled text 
cleaned_list = [] 
for j in webContent: 
     cleaned = extractUseful(j); 
     processed = process(cleaned, lemmatizer=nltk.stem.wordnet.WordNetLemmatizer()); 
     cleaned_list.append(processed) 

#save to csv 
contents = pd.DataFrame({ "Content":webContent, "Cleaned": cleaned_list}) 
contents.to_csv("testwebcrawled.csv") 


dataJobs[['jd']]= cleaned_list 
dataJobs.to_csv("test_v2_crawled.csv") 
+0

Bitte [Bearbeiten] Ihre Frage Ihre Vertiefung zu korrigieren und den ** Volltext hinzuzufügen ** von Fehlern oder Rückverfolgung. Außerdem hat Python kein Zeilenendezeichen, alle Semikolons ';' sind völlig unnötig. – MattDMo

Antwort

0

Sie nur ein filters Schlüsselwort-Argument definieren, in der Funktionssignatur für process (die def process(...) Linie). Wenn die Lemmatizer ist, was Sie als Filter Versuch zu passieren beabsichtigen:

processed = process(cleaned, filter=nltk.stem.wordnet.WordNetLemmatizer()) 

Wenn Sie auch eine Lemmatizer passieren zu können, wollen, sollten Sie Ihre Funktion Signatur etwas wie folgt ändern:

def process(text, 
      filters=nltk.corpus.stopwords.words('english'), 
      lemmatizer=nltk.stem.wordnet.WordNetLemmatizer()): 

Beachten Sie, dass Sie nur die = und den Inhalt benötigen, der in Ihrer Funktionssignatur folgt, wenn die Werte nach = als Standardargumente für diese Parameter übergeben werden sollen. Ansonsten können Sie einfach tun:

def process(text, filter, lemmatizer): 
    ... 

Und nennen Sie es mögen:

processed = process(cleaned, 
        filter=nltk.corpus.stopwords.words('english'), 
        lemmatizer=nltk.stem.wordnet.WordNetLemmatizer()) 
Verwandte Themen