1

I'm getting a syntax error following along side a tutorial. It feels like a Python 3 getcha. Thank you in advance!

def lda_description(review_text, min_topic_freq=0.05):
"""
accept the original text of a review and (1) parse it with spaCy,
(2) apply text pre-processing steps, (3) create a bag-of-words
representation, (4) create an LDA representation, and
(5) print a sorted list of the top topics in the LDA representation
"""

# parse the review text with spaCy
parsed_review = nlp(review_text)

# lemmatize the text and remove punctuation and whitespace
unigram_review = [token.lemma_ for token in parsed_review
                  if not punct_space(token)]

# apply the first-order and secord-order phrase models
bigram_review = bigram_model[unigram_review]
trigram_review = trigram_model[bigram_review]

# remove any remaining stopwords
trigram_review = [term for term in trigram_review
                  if not term in spacy.en.STOPWORDS]

# create a bag-of-words representation
review_bow = trigram_dictionary.doc2bow(trigram_review)

# create an LDA representation
review_lda = lda[review_bow]

# sort with the most highly related topics first
review_lda = sorted(review_lda, key=lambda (topic_number, freq): -freq)

for topic_number, freq in review_lda:
    if freq < min_topic_freq:
        break

    # print the most highly related topic names and frequencies
    print ('{:25} {}'.format(topic_names[topic_number],)
                            round(freq, 3))

The Error that pops up is this:

  File "<ipython-input-62-745b97e51bcb>", line 31
review_lda = sorted(review_lda, key=lambda (topic_number, freq): -freq)
                                           ^

SyntaxError: invalid syntax

vaultah
  • 44,105
  • 12
  • 114
  • 143
M4cJunk13
  • 419
  • 8
  • 22
  • 1
    Possible duplicate of [Understanding lambda in python and using it to pass multiple arguments](https://stackoverflow.com/questions/10345278/understanding-lambda-in-python-and-using-it-to-pass-multiple-arguments) – sascha Sep 09 '17 at 01:52
  • It's not a duplicate of the linked question. This one has to do with the removal of [Tuple Parameter Unpacking](https://www.python.org/dev/peps/pep-3113/). – skrx Sep 09 '17 at 03:19
  • Possible duplicate of [Nested arguments not compiling](https://stackoverflow.com/questions/10607293/nested-arguments-not-compiling) – vaultah Sep 23 '17 at 01:24

1 Answers1

4

In Python 3 you can't use tuple parameter unpacking anymore. You could rewrite the lambda in this way:

review_lda = sorted(review_lda, key=lambda topic_and_freq: -topic_and_freq[1])
skrx
  • 19,980
  • 5
  • 34
  • 48