0

各辞書には 1 つのツイートに関する情報が含まれている辞書を使用して、ツイートを複数の json ファイルに保存しました。各ディクショナリ内に、ユーザー ID (key="uid")、ツイート ID (key="id")、テキスト (key="txt")、およびタイムスタンプ (key="ts") を個別のキーとして保存しました。

ここで、json ファイルから辞書を読み込み、(ツイート ID に基づいて) 冗長なツイートを削除し、結果の冗長でないツイートを 1 つの大きな json ファイルに保存します。

json ファイルの 1 つに含まれるデータの例を以下に示します。

{"id": 1234, "txt":"text here 123", "ts":"Wed, 03 Apr 2013 12:03:28 +0000", "uid":12345}
{"id": 2345, "txt":"more text here", "ts":"Tue, 02 Apr 2013 16:50:20 +0000", "uid":23456}
{"id": 1234, "txt":"text here 123", "ts":"Wed, 03 Apr 2013 12:03:28 +0000", "uid":12345}

この例では、1 番目と 3 番目のツイートは冗長です。したがって、3 番目のツイートを削除したいと思います。

私がこれまでに持っているコードは以下のとおりです。Python での (限られた) 経験と Web 上の他の例に基づいてコードを作成したため、動作しません。次のエラーが表示されます: JSONDecodeError: Extra data: line 1 column 192 - line 1 column 10166 (char 192 - 10166)

少なくとも、ディレクトリ内のファイルを調べて冗長なツイートを削除するという点では、正しい方向に進んでいると思います。しかし、私の問題はjsonファイルを適切にロードして読み取ることにあると思います。ヘルプ、支援、またはガイダンスをいただければ幸いです。

(いいえ、私は課題のためにこれを行っている学生ではありません。研究のために Twitter データを分析することを望んでいる大学院生です。)

import string
import glob
import os
import simplejson as json

listoftweets = {} #to store all of the tweet ids

os.chdir("/mydir") #directory containing the json files with tweets

for f in glob.glob("*.json"):

    t = open(f,"r") #loading the json with tweets
    f1 = open(alltweets,"a") #open the json file to store all tweets

    for line in t:
        data = json.loads(line)
        tid = data['tweetid']

        if not listoftweets.has_key(tid): #if this isn't a redundant tweet
            json.dump(data,f1) #dump into the json file
            listoftweets[tid] = 0 #add this tweet id to the list

    t.close()
    f1.close()

編集

コードを少し修正しました。あたかも元のデータが新しい行の各ツイートに保存されていないように見えます.Gary Fixlerに感謝します. 問題が修正されたので、別のエラーが発生しています: Traceback
...
loaded C:\Python27\lib\site-packages\simplejson__init__.py 451
decode C:\Python27\lib\site-packages\simplejson\decoder. py 409
JSONDecodeError: 余分なデータ: 行 1 列 233 - 行 2 列 1 (文字 233 - 456)

その他のメモ: Wesley Baugh に感謝します。提案された変更をできるだけ多く実装しました。

また、一度にすべてを読み込むにはツイートが多すぎます。ツイートは 3 か月間継続して収集されました。

更新されたコードは以下のとおりです

listoftweets = {}
listoffiles = []

os.chdir("/mydir")

for f in glob.glob("*.json"):
    listoffiles.append(str(f))

t2 = open("cadillaccue_newline.json",'a')

for files in listoffiles:
    t = open(files,'r')
    for line in t:
        text = line
        text = text.replace('}{','}\n{')
        t2.write(text)
    t.close()

t2.close()


t = open("cadillaccue_newline.json",'r')
f1 = open("cadillaccue_alltweets.json",'a')

for line in t:
    data = json.loads(line)
    tid = data['id']

    if tid not in listoftweets:
        json.dump(data,f1)
        listoftweets[tid] = 0

t.close()
f1.close()
4

0 に答える 0