TypeError:' instancemethod'对象不可迭代(内容微调器)

时间:2016-12-04 05:47:47

标签: python

我尝试使用this spinner重写字符串。

当我尝试运行与自述文件中完全相同的代码时:

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

当我这样做时,它会返回:

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

该错误消息的相关代码是:

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

我在Python 3和2中都试过了

我不熟悉spinner.py,因为我刚从互联网上抓起它,我只需要一些能为我免费旋转文字的东西。此外,以下行做了什么:

synonyms = [word]

如果有人可以推荐一些其他自由文本微调器,我可以使用我愿意尝试别的东西,但我尝试了一堆,这个是最直接的,我只是想传递一行文字,或文件,并根据同义词等重写。这似乎是我做这件事的最佳选择,我只是不知道代码出了什么问题。

1 个答案:

答案 0 :(得分:1)

@ hai-vu是对的。您需要将getSynonyms函数更改为:

#     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