How to solve TypeError: iteration over a 0-d array and TypeError: cannot use a string pattern on a bytes-like object

How to solve TypeError: iteration over a 0-d array and TypeError: cannot use a string pattern on a bytes-like object

我正在尝试对我的数据应用预处理步骤。我有 6 个函数来预处理数据,我在预处理函数中调用这些函数。当我用例句一一尝试这些功能时,它起作用了。

data = "AN example 1 Sentence !!"

def preprocess(data):
    data = convert_lower_case(data)
    # data = convert_number(data)
    # data = remove_punctuation(data)
    # data = remove_stopwords(data)
    # data = stem_words(data)
    # data = lemmatize_word(data)
    return data

processed_text = []
processed_text.append(word_tokenize(str(preprocess(data))))
print(processed_text)

但是当我注释掉另一个函数时,它会报错。当我一一注释掉功能时,它给出了不同的错误。

这些是错误:

AttributeError: 'numpy.ndarray' object has no attribute 'split'

TypeError: iteration over a 0-d array

TypeError: cannot use a string pattern on a bytes-like object

这些功能单独工作但不能一起工作的原因可能是什么?我该如何解决这个问题并使用这些函数来预处理我的数据?

提前致谢。

我用过的函数:

def convert_lower_case(data):
    return np.char.lower(data)

def remove_stopwords(text):
    stop_words = set(stopwords.words("english"))
    word_tokens = word_tokenize(text)
    filtered_text = [word for word in word_tokens if word not in stop_words]
    return filtered_text

def remove_punctuation(data):
    punctuationfree="".join([i for i in data if i not in string.punctuation])
    return punctuationfree

def stem_words(data):
    stemmer = PorterStemmer()
    word_tokens = word_tokenize(data)
    stems = [stemmer.stem(word) for word in word_tokens]
    return stems

def convert_number(data):
    temp_str = data.split()
    new_string = []
    for word in temp_str:
        if word.isdigit():
            temp = p.number_to_words(word)
            new_string.append(temp)
        else:
            new_string.append(word)
    temp_str = ' '.join(new_string)
    return temp_str

def lemmatize_word(text):
    lemmatizer = WordNetLemmatizer()
    word_tokens = word_tokenize(text)
    lemmas = [lemmatizer.lemmatize(word, pos ='v') for word in word_tokens]
    return lemmas

可以确定的第一个问题是您的 convert_lower_case return 与它接受的东西不同 - 如果处理得当 可以 完全没问题.但是你一直把你的 data 当作一个字符串,它不再是在 data = convert_lower_case(data)

之后

“但是当我打印它时它看起来像一个字符串”- 是的,但它 不是 一个字符串。你可以看到,如果你这样做:

def convert_lower_case(data):
    print(type(data))
    new_data = np.char.lower(data)
    print(type(new_data))
    return new_data

输出:

<class 'str'>
<class 'numpy.ndarray'>

老实说,你在这里有点重新发明轮子,因为 Python 已经有 built-in .lower() 函数,它将 return 你一个实际的 string 类型大写字母变为小写字母。 其他功能可能会出现类似问题。