#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» в верхнем левом углу ответа. Спасибо.