Ошибка при распаковке слишком большого количества значений (ожидается2) - PullRequest
1 голос
/ 13 февраля 2020

Я хочу вернуть два разных значения из моей функции, как я могу переписать свой код, чтобы вернуть два в двух разных переменных.

Итак, я получаю эту ошибку:


Traceback (most recent call last):
  File "features.py", line 300, in <module>
    fea1, fea2 = build_feature_matrix_S(sentences)
ValueError: too many values to unpack (expected 2)

здесь код

def build_feature_matrix_S(documents):

    feature_type = ['frequency','tfdif']
    #feature_type = feature_type.lower().strip()

    for f in feature_type:

        if feature_type == 'frequency':
            vectorizer_freq = CountVectorizer(tokenizer = tokenize_lemmatize_spacy, binary=False, min_df=5, ngram_range=(1, 2))
            feature_matrix_freq = vectorizer_freq.fit_transform(documents)
            feature_freq = pd.DataFrame(feature_matrix_freq.todense(), columns = vectorizer_freq.get_feature_names())

            return feature_freq

        else:

            vectorizer_tfidf = TfidfVectorizer(tokenizer = tokenize_lemmatize_spacy, min_df=5, ngram_range=(1, 2))
            feature_matrix_tfidf = vectorizer_tfidf.fit_transform(documents)
            feature_tfidf = pd.DataFrame(feature_matrix_tfidf.todense(), columns = vectorizer_tfidf.get_feature_names())

            return feature_tfidf

fea1, fea2 = build_feature_matrix_S(sentences)

print(fea1, fea2)

Ответы [ 2 ]

3 голосов
/ 13 февраля 2020

В этой строке

fea1, fea2 = build_feature_matrix_S(sentences)

python ожидает, что будут возвращены 2 переменные, кортеж, и оба ваших оператора возврата в функции build_feature_matrix_S () этого не делают, возвращая больше чем 2.

    feature_freq = pd.DataFrame(feature_matrix_freq.todense(), columns = vectorizer_freq.get_feature_names())

    return feature_freq

ИЛИ

            feature_tfidf = pd.DataFrame(feature_matrix_tfidf.todense(), columns = vectorizer_tfidf.get_feature_names())

            return feature_tfidf

и, следовательно, ошибка.

2 голосов
/ 13 февраля 2020

В вашем операторе if, else вы возвращаете только 1 переменную. Вы можете вернуть две переменные из функции следующим образом:

return var1, var2

Таким образом, ваша функция может быть записана примерно так:

def build_feature_matrix_S(documents):

    # part 1:
    vectorizer_freq = CountVectorizer(tokenizer = tokenize_lemmatize_spacy, binary=False, min_df=5, ngram_range=(1, 2))
    feature_matrix_freq = vectorizer_freq.fit_transform(documents)
    feature_freq = pd.DataFrame(feature_matrix_freq.todense(), columns = vectorizer_freq.get_feature_names())

    # part 2:
    vectorizer_tfidf = TfidfVectorizer(tokenizer = tokenize_lemmatize_spacy, min_df=5, ngram_range=(1, 2))
    feature_matrix_tfidf = vectorizer_tfidf.fit_transform(documents)
    feature_tfidf = pd.DataFrame(feature_matrix_tfidf.todense(), columns = vectorizer_tfidf.get_feature_names())

    return feature_freq, feature_tfidf
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...