2016-12-04 6 views
1

Ich versuche this spinner zu verwenden, um Strings neu zu schreiben.TypeError: Objekt 'instancemethod' ist nicht iterierbar (Content Spinner)

wenn ich versuche, exakt das gleiche Code wie in der Readme-Datei auszuführen:

bot.py:

108: from spinner import spinner 
109: s = spinner() 
110: spintax = s.getSpintax('Everything in moderation, including moderation.') 
111: spun = s.spin(spintax) 
112: print spintax, spun 

Wenn ich dies tun, es gibt:

Traceback (most recent call last): 
    File "C:\Python27\Scripts\Reddit\bot.py", line 110, in <module> 
    spintax = s.getSpintax('Everything in moderation, including moderation.') 
    File "C:\Python27\Scripts\Reddit\spinner.py", line 56, in getSpintax 
    n, syn = self.getSynonyms(stem) 
    File "C:\Python27\Scripts\Reddit\spinner.py", line 36, in getSynonyms 
    for lemma in syn.lemmas: 
TypeError: 'instancemethod' object is not iterable 

die relevanten Code für diese Fehlermeldung ist:

spinner.py:

32: def getSynonyms(self, word): 
    33: # include the original word 
    34:  synonyms = [word] 
    35:  for syn in wordnet.synsets(word): 
    36:   for lemma in syn.lemmas: 
    37:    if lemma.name != word: 
    38:    # since wordnet lemma.name will include _ for spaces, we'll replace these with spaces 
    39:     w, n = re.subn("_", " ", lemma.name) 
    40:     synonyms.append(w) 
    41:  s = list(set(synonyms)) 
    42:  return len(s), s 
    43: 
    44: # transform text into spintax with the folowing steps 
    45: # 1. split the text to sentences 
    46: # 2. loop through the sentences and tokenize it 
    47: # 3. loop thorugh each token, find its stem and assemble all the synonyms of it into the spintax 
    48: def getSpintax(self, text): 
    49:  sentences = self.splitToSentences(text) 
    50:  stemmer = PorterStemmer() 
    51:  spintax = "" 
    52:  for sentence in sentences: 
    53:   tokens = regexp_tokenize(sentence, "[\w']+") 
    54:   for token in tokens: 
    55:    stem = stemmer.stem(token) 
    56:    n, syn = self.getSynonyms(stem) 
    57:    spintax += "{" 
    58:    spintax += token 
    59:    spintax += "|" 
    60:    for x in range(n): 
    61:     spintax += syn[x] 
    62:     if x < n-1: 
    63:      spintax += "|" 
    64:     else: 
    65:      spintax += "} " 
    66:  return spintax 

Ich habe versucht, sowohl in Python 3 und 2

Ich bin nicht vertraut mit spinner.py, da ich es aus dem Internet nur packte, ich brauche nur etwas, den Text für mich kostenlos spinnen . Auch was bedeutet die folgende Zeile tun:

synonyms = [word] 

wenn jemand einen anderen Text spinner empfehle ich verwenden kann ich bereit wäre, etwas anderes zu versuchen, aber ich versuchte, einen Haufen und dieser war die einfachste Ich möchte nur eine Textzeile oder Datei eingeben und sie basierend auf Synonymen/etc. Neu schreiben lassen. Dies scheint die beste Option zu sein, um das zu tun, ich weiß einfach nicht wirklich, was mit dem Code falsch läuft.

+2

Versuchen: 'für Lemma in syn.lemmas()' - man beachte die Klammern –

Antwort

1

@ Hai-Vu ist richtig. Sie müssen die getSynonyms Funktion ändern:

#  get all synonyms of a word from the wordnet database 
    def getSynonyms(self, word): 
#   include the original word 
     synonyms = [word] 
     for syn in wordnet.synsets(word): 
      for lemma in syn.lemmas(): 
       if lemma.name() != word: 
#      since wordnet lemma.name will include _ for spaces, we'll replace these with spaces 
        w, n = re.subn("_", " ", lemma.name()) 
        synonyms.append(w) 
     s = list(set(synonyms)) 
     return len(s), s 
+0

dies funktioniert, ich die Hilfe zu schätzen wissen. Können Sie mir sagen, was die Zeile "synonyms = [word]" macht? Ich bin mir nicht wirklich sicher, wie ich das nachschlagen soll, ist es so, als würde man die "Wort" -Variable als Liste oder etwas anderes ausgeben? – Lightja

+0

erstellt es Synonyme als Liste. Und legt den Inhalt des Wortes in diese Liste. –

Verwandte Themen