这是一个具有两个函数的类,试图使用类中返回NameError消息的函数。我在后处理函数上调用了tokenize函数,在我的代码行上看起来像“self.data ['review_text']。progress_map(tokenize)”但它返回了一个名称错误消息。
class preprocess():
df = data
def tokenize(tweet):
try:
token = unicodedata.normalize("NFKD",
tweet).encode("ascii",
"ignore").decode("utf8") # converts 'ueber' to 'uber'
token = re.sub('\ |\?|\.|\!|\/|\;|\:|\<|\>|\+|\$|\*|\)|\
(|\&|\=|\%|\-|\'|\"|\%{', ' ', token)# Lets pass only
meaningful characters
if '\n\n' in token:# remove header
token = token[token.index('\n\n'):]
token = re.sub(r'([^a-zA-Z0-9 \-\_%])', '', tweet)# Lets
pass
only meaningful characters
token = re.sub(r'((\.\s*){2,})', '', token)# removes
multiple
dots with optional whitespaces in between
token = re.sub(r'(\s{2,})', ' ', token) # Removes multiple
whitespaces
token = token.lower()# lower cases everything
#token = re.sub(r'(?<=\s)[\w?!%,.;:\/]{1,3}(?=\s|\Z)', '',
token)# removes tokens shorter than minLen
token = re.sub(r'\b(?!(\D\S*|[12][0-9]{3})\b)\S+\b', '',
token) # removes all digits except digits that represent
years
token = re.sub(r'<.*?>', '', token)# remove html
token = re.sub(r'[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-
9-.]+', '', token)# remove email addresses
token = re.sub(r'["\']', '', token )# remove quotes
token = token.replace('\n', ' ')# replace newlines
tokens = tokenizer.tokenize(token)
return tokens
except:
return 'NC'
def postprocess(self):
self.data = self.df.head(58)
self.data['tokens'] =
self.data['review_text'].progress_map(tokenize) ## progress_map
is a variant of the map function plus a progress bar. Handy to
monitor DataFrame creations.
self.data = self.data[self.data.tokens != 'NC']
self.data.reset_index(inplace=True)
self.data.drop('index', inplace=True, axis=1)
self.data.drop(['review_text'],inplace=True, axis=1)
return self.data
我正在调用这个函数
hei = preprocess()
数据= hei.postprocess()
错误消息:
NameError Traceback (most recent call
last)
<ipython-input-48-0806f2cc8d73> in <module>()
1 hei = preprocess()
----> 2 data=hei.postprocess()
3
<ipython-input-47-57d07abbfeec> in postprocess(self)
30 def postprocess(self):
31 self.data = self.df.head(58)
---> 32 self.data['tokens'] =
self.data['review_text'].progress_map(tokenize) ## progress_map is a
variant of the map function plus a progress bar. Handy to monitor
DataFrame creations.
33 self.data = self.data[self.data.tokens != 'NC']
34 self.data.reset_index(inplace=True)
NameError:名称'tokenize'未定义
答案 0 :(得分:1)
我不确定你在哪里遇到错误(你没有提到它)但我认为它在这里:
train_vecs_w2v = np.concatenate([buildWordVector(z, n_dim) for z in tqdm(map(lambda x: x.words, x_train))])
你就像那样调用buildWordVector - 这似乎是问题,因为函数buildWordVector是一个类,应该这样调用:
classinstance=wordvector()
classinstance.buildWordVector(args)
你应该试试。希望我帮助(如果仍然有疑问,评论)
示例(不完整代码时不完美):
c=wordvector()
train_vecs_w2v = np.concentrate([c.buildWordVector(z, n_dim) for z in tqdm(map(lambda x: x.words, x_train))])
编辑: 你说你需要帮助从类的另一个函数运行类的函数。假设你有一个类似的课程:
class testClass():
def spam(self):
print('eggs')
所以说你想在调用spam()的类中创建一个函数foo()。你必须确保在定义spam()时,它(以及调用它的函数)具有魔法自变量(垃圾邮件(自我))。然后,要从另一个函数调用它,你所要做的就是self.spam(),它将被调用。这就是我所说的:
class testClass():
def spam(self):
print('eggs')
def foo(self):
self.spam()
另外,参数:
class testClass():
def spam(self,text):
print(text)
def foo(self):
self.spam('eggs')
所以,这就是你如何做到的。但是,由于这种神奇的自变量,你必须以不同的方式调用类中的函数 - 首先创建一个testClass()的实例。怎么做:
假设你已经上课了。首先,创建一个类的实例。
testClassInstance = testClass()
然后使用 testClassInstance调用函数,如下所示:
testClassInstance.foo()
result: eggs
所以这就是你如何做到的,希望你理解。如果仍有疑问,请发表评论。