Я новичок в Python и Pyspark.Я работаю с кодом, который работает на pyspark, который строит модель tfidfs.Однако при вызове метода ngrams известной библиотеки шаблонов возникает UnboundLocalError.
Это макет данных text
, который (id ,list[text])
извлекается с помощью text.map(lambda x: (x["_id"], (x["span"], x["text"]))).groupByKey().map(lambda x: (x[0], list(x[1]))
:
[(u'en.wikipedia.org/wiki/Woodville_South,_South_Australia',
[u'Campbell was born in Myrtle Bank.']),
(u'en.wikipedia.org/wiki/Picket_(military)',
[u'The film dealt with the story .',
u"Members of the Union force."]),
(u'en.wikipedia.org/wiki/320th_Troop_Carrier_Squadron',
[u" The 1st Air Transport."])]
Этокак отформатированы idfs:
Out[23]:
[{'_id': u'1,800', 'idf': 7.245417283738939},
{'_id': u'Poetry', 'idf': 5.399590593240608},
{'_id': u'Bloodworth', 'idf': 7.938564464298884},
{'_id': u'Mullally', 'idf': 7.938564464298884}]
Вот часть кода, с которым я работаю:
corpus = text\
.mapValues(lambda v: ngrams(v, self.max_ngram))\ """the ngrams method call """
.flatMap(lambda (target, tokens): (((target, t), 1) for t in tokens))\
.reduceByKey(add)\
.map(lambda ((target, token), count): (token, (target, count)))\
Это метод библиотеки Pattern в text.py
:
def ngrams(string, n=3, punctuation=PUNCTUATION, continuous=False):
""" Returns a list of n-grams (tuples of n successive words) from the given string.
Alternatively, you can supply a Text or Sentence object.
With continuous=False, n-grams will not run over sentence markers (i.e., .!?).
Punctuation marks are stripped from words.
"""
def strip_punctuation(s, punctuation=set(punctuation)):
return [w for w in s if (isinstance(w, Word) and w.string or w) not in punctuation]
if n <= 0:
return []
if isinstance(string, basestring):
s = [strip_punctuation(s.split(" ")) for s in tokenize(string)]
if isinstance(string, Sentence):
s = [strip_punctuation(string)]
if isinstance(string, Text):
s = [strip_punctuation(s) for s in string]
if continuous:
s = [sum(s, [])]
g = []
for s in s: """ ERROR triggered here """
#s = [None] + s + [None]
g.extend([tuple(s[i:i+n]) for i in range(len(s)-n+1)])
return g
Это след сообщения об ошибке:
python2.7/site-packages/sift/util.py", line 8, in ngrams
for n in en.ngrams(text, n=i+1, **pattern_args):
python2.7/site-packages/pattern/text/__init__.py", line 83, in ngrams
for s in s:
UnboundLocalError: local variable 's' referenced before assignment
Я знаю, что означает ошибка. Я попытался отредактировать метод библиотеки, однако ошибка остается, поэтому, возможно, я ее не совсем исправил илигде-нибудь еще.Как я могу устранить эту ошибку?
Я использую Python 2.7 и pyspark 2.3.0.
Любая помощь или руководство будут высоко оценены.
Большое спасибо,