У меня есть 2 файла, первый — это список твитов. А второй — это список стандартных слов, который выглядит так:
acoustics
acquaint
acquaintable
tbc....
Я хочу перебрать список твитов и напечатать слова, которых нет в стандартном списке слов.
Вот что я пробовал:
dk = open('wordslist.txt','r')
dlist = []
for x in dk.readlines():
dlist.append(x.replace('\n',''))
dlist
length = len(tokenized_tweets)
for i in range(length):
print(tokenized_tweets[i])
for x in range(len(tokenized_tweets)):
if x[0] not in dlist:
print(tokenized_tweets[x])
и я получил эту ошибку: 'int' object is not subscriptable
в первом цикле я хотел узнать диапазон его твитов, а затем использовать его для второго цикла
Просто используйте это, вы упускаете возможность писать range
for x in range(len(tokenized_tweets)):
if x[0] not in dlist:
print(tokenized_tweets[x])
попробовал, но все равно выдает сообщение об ошибке "объект int не подлежит подписке"
попробуй использовать if x not in dlist:
Прочитайте и следуйте сообщению об ошибке, тогда вы поймете, в чем проблема.
В трассировке вы увидите стрелку, указывающую на строку for x in (len(tokenized_tweets)):
. Сообщение об ошибке гласит: 'int' object is not iterable
. Какова ваша итерируемость в этом цикле for
? (len(tokenized_tweets))
Это действительно итерируемый объект? Нет, это int
. Вывод len()
всегда будет int
(если вы не перезапишете его).
Вы должны передать длину tokenized_tweetes
объекту range()
. Это итерируемый.
Поскольку вы находите слова для каждого твита, сделайте из своих слов set
. Проверка членства в наборе выполняется намного быстрее, чем в списке. (О (1) > О (п))
Он также удаляет дубликаты, если они есть.
with open("wordslist.txt") as f:
words_list = {word.removesuffix("\n") for word in f}
with open("tweets.txt") as g:
for tweete in g:
for word in tweete.split():
if word not in words_list:
print(word)
Я попытался изменить его на это: «для x в диапазоне (len (tokenized_tweets)): если x [0] не в dlist: print (tokenized_tweets [x])», но это все еще дает мне ошибку: объект «int» не подписка" Можете ли вы подробнее рассказать о наборе?
@ZulfiA, если присмотреться, теперь это другое исключение. Это говорит о "подписке". Вы не можете сделать x[0]
, когда x
является int
. Так же, как сказать: 4[0]
Я попытался преобразовать целое число в строку, выполнив: data = str(tokenized_tweets). но все равно не работает и выдает ту же ошибку
@ZulfiA Я обновил ответ решением. Это то, что вы ищете?
да это то что я ищу! Спасибо большое за вашу помощь! Есть ли способ разделить вывод построчно, как в списке классов? и есть ли повторяющиеся слова, если я использую этот код?
@ZulfiA Пожалуйста, примите это и задайте другой вопрос, поскольку эти вопросы не связаны с вашей реальной проблемой.
Подсказка: вы использовали функцию
range
в первом циклеfor
, но не во втором. Почему?