Issue
I have a tagged file in the format token/tag and I try a function that returns a tuple with words from a (word,tag) list.
def text_from_tagged_ngram(ngram):
if type(ngram) == tuple:
return ngram[0]
return " ".join(zip(*ngram)[0]) # zip(*ngram)[0] returns a tuple with words from a (word,tag) list
In python 2.7 it worked well, but in python 3.4 it gives an error on the last line which says TypeError: 'zip' object is not subscriptable
.
Why did it stop working? How can I fix this?
Several other things changed from Python 2 to Python 3 in a parallel manner; see How to use filter, map, and reduce in Python 3.
Solution
In Python 2, zip
returned a list. In Python 3, zip
returns an iterable object. But you can make it into a list just by calling list
, as in:
list(zip(...))
In this case, that would be:
list(zip(*ngram))
With a list, you can use indexing:
items = list(zip(*ngram))
...
items[0]
etc.
But if you only need the first element, then you don't strictly need a list. You could just use next
.
In this case, that would be:
next(zip(*ngram))
Answered By - khelwood
0 comments:
Post a Comment
Note: Only a member of this blog may post a comment.