TypeError:“发电机”对象不可调用。尝试迭代字符串数据时

时间:2019-02-27 22:59:42

标签: python string loops nlp iteration

美好的一天

我的目标是创建一个接受文本data的函数,该文本为字符串,并将其转换为小写字母。我希望稍后再通过传递数据来应用该功能。

但是,当我调用/应用该函数并尝试在其中传递数据时,我一直输出此错误。

  

TypeError:“生成器”对象不可调用

我做了进一步的研究,我只是想知道映射是否引起了这个问题?

是否有任何方法可以使此功能以最有效的方式工作。

以下是我的代码:

def preprocess_text(text):
    """ The function takes a parameter which is a string.
    The function should then return the processed text
    """  
    # Iterating over each case in the data and lower casing the text
    edit_text = ''.join(map(((t.lower().strip()) for t in text), text))

    return edit_text

然后测试功能是否有效:

# test function by passing in data. 
""" This is when then the error occurs!""" 
text_processed = preprocess_text(data) 

我非常感谢您提供帮助,以帮助您了解问题所在以及正确的解决方法。 提前加油!

2 个答案:

答案 0 :(得分:2)

该错误出在您的map函数中,我认为您不了解它如何正常工作。它有2个参数:

  • function_to_apply:接收可迭代的每个元素并返回一个值。
  • list_of_inputs:数据列表(示例中为您的文本)

您的第一个参数不是函数,只是一个列表,因此可以通过以下方式更改它:

''.join(map(lambda t: t.lower().strip(), text))

匿名lambda函数的参数t与for t in text中的每个文本相对应。希望该示例阐明其工作原理!

答案 1 :(得分:1)

您执行的map函数似乎有点错误。根据文档,它应该是:

map(callable, iterable)

但是要传递一个生成器表达式,而不是调用它:

(t.lower().strip()) for t in text)

由于列表理解。 Map将函数(可调用)作为第一个参数。因此,您可以使用:

def preprocess_text(text):
edit_text = ''.join(map(lambda t: t.lower().strip(), text))
return edit_text