2016-07-28 13 views
-1

я определил класс для обработки блоков твитов, чтобы я мог управлять им немного легчекласса не функционируют методы правильно

class twitter_block(object): 

def __init__(self): 
    self.tweets = [] 
    self.df = pd.DataFrame() 

    self.tag = '' 
def load(self, data): 

    self.tweets = [x for x in data] 

затем определил метод как часть трубопровода:

def clean(self): 

    HTTP_PATTERN = '^https?:\/\/.*[\r\n]*' 
    AT_PATTERN = '@\w+ ?' 

    # tke away links 
    self.tweets = [re.sub(HTTP_PATTERN, '', str(x), flags=re.MULTILINE) for x in self.tweets] 
    # take away @ signs 
    self.tweets = [re.sub(AT_PATTERN,'',str(x)) for x in self.tweets] 

но когда я это называю:

tweet = load_data('The_Donald.json') 
block = twitter_block(tag='donald') 
block.load(data=tweet) 
block.clean() 
block.print() 

он возвращает 1504 твитов, которые я загрузил в объект блока так же, как и раньше, без clea ни ссылок, ни чего-либо. Хотя, на самом деле это удалить @ знаки ... но этот метод,

def smilecheck(self): 
    #save a tweet if there is a smiley there 
    smiley_pattern = '^(:\(|:\))+$' 
    for tweet in self.tweets: 

     if re.match(smiley_pattern, str(tweet)): 
      pass 
     else: 
      self.tweets.remove(tweet) 

не удаляет твиты без смайликов, возвращает 1504 твитов, так же, как я вставил ... либо помощь, ребята? Я уверен, что это проблема с тем, как я приближаюсь объекты

+2

Это ваш фактический отступа или вы не смогли правильно транскрибировать его? Пожалуйста, тщательно отформатируйте свой отступ, потому что плохо сшитый код Python - это нонсенс. – khelwood

ответ

0

Я считаю, что проблема в том, что вы используете re.match() вместо re.search()

Где вы хотите найти твиты, которые содержат смайлик в любом месте твита, re.match() выполняет поиск только с начала строки.

См python -- re.match vs re.search

+0

re.search, кажется, дает мне меньше твитов (704 против 1504), но в них нет смайликов по какой-то причине – entercaspa

+0

Попробуйте переместить «pass» в инструкцию else, а затем переместите «self.tweets.remove (tweet)» в если утверждение. – Luke

+0

выход все еще не содержит смайликов, и он просто возвращает твиты странным образом – entercaspa

 Смежные вопросы

  • Нет связанных вопросов^_^