как добавить перехват ошибок в эту функцию токенизации

#python #indexing #tokenize

#python #индексирование #токенизировать

Вопрос:

Я пытаюсь использовать split () для поиска хэштегов и пользователей в твитах.

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

One version of a layout I never put live. This was from sometime in January. http://t.co/PppHGmRa

Я использую этот код:

 def get_tweet_meta(tweet_text, tweet_id, auth):
     api = auth
     words = tweet_text.split(" ")
     hashtags = []
     at_user = []
     meta = {}
     print tweet_text
     for word in words:
         print word
         print word[0]
         if word[0] is '#':
             hashtags.append(word)
         if word[0] is '@':
             at_user.append(word)

      print hashtags
      print at_user
  

Я перехожу к in в твите и получаю ошибку, которая, как я думаю, связана с дополнительными пробелами.

 in
i

Traceback (most recent call last):
  File "twitterBot3.py", line 111, in <module>
    get_tweet_meta(value, key, auth)
  File "twitterBot3.py", line 86, in get_tweet_meta
    print word[0]
IndexError: string index out of range
  

Код работает с нормализованным текстовым блоком, но выдает ошибки здесь, есть идеи. Спасибо

Комментарии:

1. Никогда не используйте is для проверки равенства строк. Используйте == вместо этого.

2. изменено, но все еще выдает ошибку

Ответ №1:

Вы разбиваете на отдельные пробелы; это может привести к пустым результатам везде, где в строке больше одного пробела.

Используйте str.split() без аргумента для разделения на произвольные пробелы и удаления начальных и конечных пробелов:

 >>> s = ' spaces  in odd    places  '
>>> s.split(' ')
['', 'spaces', '', 'in', 'odd', '', '', '', 'places', '', '']
>>> s.split()
['spaces', 'in', 'odd', 'places']
  

word[0] затем в пустой строке возникает IndexError .

Вы никогда не должны использовать is для проверки на равенство; используйте == для этого. is проверяет идентификацию объекта. Любая строка или целое число, с которыми это действительно работает, является частным случаем, когда реализация интерпретатора решила оптимизировать некоторый аспект (память, доступ к словарю и т.д.) Путем повторного использования объектов внутри.

Комментарии:

1. @KyleSponable если ответ решил ваш вопрос, пожалуйста, примите его, нажав на «V» в верхнем левом углу ответа. Спасибо.