Я пытаюсь обрабатывать некоторые твиты с помощью Python, и я пытаюсь сделать подсчет слов из самых популярных слов, содержащихся в 7 разных твитах. У меня есть файл настройки, каждый твит объект JSON на своей собственной линии, и когда я пытаюсь распечатать каждый твит с помощью следующих, она прекрасно работает:Python - только чтение последней строки файла в определенных обстоятельствах
with open(fname, 'r') as f:
for line in f:
tweet = json.loads(line) # load it as Python dict
print(json.dumps(tweet, indent=4))
Однако, когда я пытаюсь сделать что-то похожее в моем подсчете слов, оно либо читает последнюю строку файла 7 раз, либо только последнюю строку файла один раз. Я использую следующий код, удаление стоп-слов из результатов:
with open(fname, 'r', encoding='utf8') as f:
count_all = Counter()
# Create a list with all the terms
terms_stop = [term for term in tokens if term not in stop]
for line in f:
# Update the counter
count_all.update(terms_stop)
# Print the first 5 most frequent words
print(count_all.most_common(5))
выше производит 5 случайных слов из последнего твита, и количество каждого из них составляет 7 - это означает, что она по существу читать последний твит 7 раз вместо того, чтобы читать каждый из 7 твитов один раз.
Следующий код предназначен для того, чтобы увидеть, какие слова чаще всего группируются вместе. Он производит 5 случайно сгруппированных слов из последнего твита, при этом счетчик всего 1, что означает, что он только читает последний твит (один раз) и ни один из других твитов.
with open(fname, 'r', encoding='utf8') as f:
count_all = Counter()
# Create a list with all the terms
terms_stop = [term for term in tokens if term not in stop]
# Import Bigrams to group words together
terms_bigram = bigrams(terms_stop)
for line in f:
# Update the counter
count_all.update(terms_bigram)
# Print the first 5 most frequent words
print(count_all.most_common(5))
Формат моего файла JSON выглядит следующим образом:
{"created_at":"Tue Oct 25 11:24:54 +0000 2016","id":4444444444,.....}
{"created_at":..... }
{etc}
Помощь будет наиболее ценится! Большое спасибо заранее.
ОБНОВЛЕНИЕ: Не знаю, как я пропустил его, но спасибо за помощь всем! Я забыл включить 'line' в мой цикл for. Вот рабочий код:
with open(fname, 'r', encoding='utf8') as f:
count_all = Counter()
for line in f:
tweet = json.loads(line)
tokens = preprocess(tweet['text'])
# Create a list with all the terms
terms_stop = [term for term in tokens if term not in stop]
# Update the counter
count_all.update(terms_stop)
# Print the first 5 most frequent words
print(count_all.most_common(5))
Мне просто пришлось объединить токенизатор со словом.
Правильно ли отпечаток? – cdarke