1

I want to return two different value from my function how can i rewrite my code to return the two in two different variable.

So I get this error :


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)

here the code

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)

kely789456123
  • 605
  • 1
  • 6
  • 21
  • 1
    This is likely a duplicate of https://stackoverflow.com/questions/354883/how-do-i-return-multiple-values-from-a-function. – AMC Feb 13 '20 at 20:49

2 Answers2

3

In this line,

fea1, fea2 = build_feature_matrix_S(sentences)

python is expecting 2 variables to be returned, a tuple, and both of your return statements in the function build_feature_matrix_S() doesn't do that, returning more than 2.

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

    return feature_freq

OR

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

            return feature_tfidf

and hence the error.

gsb22
  • 2,112
  • 2
  • 10
  • 25
2

In your if, else statement you only return 1 variable. You can return two variables from a function like so:

return var1, var2

Thus your function can be written to something like this:

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
Daniel
  • 3,228
  • 1
  • 7
  • 23