現在、複数のJSONファイルになっている記事データからtext部分のみを取り出し、記事に含まれている全単語が何個の記事に出現するかを調べています。
Python
1articles = [] 2 wordset = set() # 出現単語セット 3 4 for line in fileinput.input(JSON_FILE): 5 wordcounter = Counter() 6 json_obj = json.loads(line) 7 json_obj1 = json_obj['text'] 8 for s in json_obj1: 9 tokens = t.tokenize(s) 10 base_forms = [tk.base_form for tk in tokens] 11 wordset.update(base_forms) 12 wordcounter.update(base_forms) 13 unique_arr = np.unique(base_forms) 14 l.append(unique_arr)
こちらはプログラムの一部になります。最初のfor文で、JSON_FILEから1記事毎読み取り、その中のTEXTのみ取り出します。
次のfor文で記事毎の単語を分解します。ここで、wordsetには全記事の単語、リストlには1記事文の単語が代入されています。
Python
1wordset = Counter(wordset) 2for W in l: 3 4 wordset.update(W) 5 6wordset_sorted = sorted(wordset.items(), key=lambda x:x[1]) 7 8print(wordset)
最後にwordsetとlを比較して、出現回数を調べています。
しかし、上記のプログラム
Python
1for s in json_obj1:
の部分で、sに代入されているデータが1記事毎のデータではなく、','で区切られた状態になってしまっていました。下記に出力結果の一部を示しています。
json_obj1をprintした一部↓
['コーエーテクモゲームスは、9月27日(Steam版は10月16日)に発売を予定しているプレイステーション 4/Nintendo Switch用タクティカルアクション「無双 OROCHI3」の最新情報を公開した。', '今回は、新キャラクター「ペルセウス」のキャラクター紹介動画が公開された。CVは下野 紘さんが務める。他にも、ストーリーのキーとなるキャラクターが特別な姿へ変化する「神格化」について、「関銀屏」が対象となることが明らかになった。さらに、神の力を得たキーアイテム「神器」2種が公開された。', 'オリュンポスの英雄。神であるゼウスと、人であるダナエーの間に生まれた半神。メドゥーサ殺しを成し遂げ、英雄として崇められるようになった。ゼウスによる人間界への介入を憂い、世界の混乱を防ぐために立ち上がる。', 'ストーリーのキーとなる8名は、神の力を身に宿した姿へ変化する「神格化」を遂げる。今回新たに「関銀屏(CV:三上枝織)」の神格化が決定した。', '大変器量が良く、護身術のつもりで習った武芸に才能を発揮する。とてつもない怪力だが、本人は気づいていない。', '守護神ヘルメスの持つ、翼の生えた魔法の靴。身につけた者は風を追い越す速度を得る。', '仙人が創り出した神秘の宝のひとつ。大地を揺るがし山を吹き飛ばす力を持つ。', '開催中の店頭体験会の追加日程が決定した。試遊した人には「『無双OROCHI3』特製缶バッジ」がランダム配布される。数には限りがあり、なくなり次第終了となる。', '【店頭体験会 追加日程】', '東京都池袋にある飲食店「KOEI TECMO CAFE & DINING」とのコラボレーションが9月上旬に開催される。「無双OROCHI3」にちなんだ店内装飾や、限定メニューが楽しめる。詳細な期間や予約方法などは後日公開される予定。', '©コーエーテクモゲームス All rights reserved.']
この状態でfor文を用いてsに代入すると
【店頭体験会 追加日程】 東京都池袋にある飲食店「KOEI TECMO CAFE & DINING」とのコラボレーションが9月上旬に開催される。「無双OROCHI3」にちなんだ店内装飾や、限定メニューが楽しめる。詳細な期間や予約方法などは後日公開される予定。 ©コーエーテクモゲームス All rights reserved.
~~のように','で区切られてしまいます。~~json_obj1の出力結果で、','で区切られている部分に分割されsに代入されてしまっています。
この状態では1記事毎で出現単語を調べることができません。**(現状では、1記事単位ではなく','で区切られた1文単位で出現単語を調べてしまっている)**どのように変更すればよろしいでしょうか?
strip関数を用いて、','を削除を試してみましたが、sに代入する時に1文字単位で分解されてしまいました。
追記
sの問題点:上記のjson_obj1を出力した結果の','を区切りに読み込まれてしまっている。目的物としては、1記事単位で読み込んでほしい。上記の画像を例とすると、
コーエーテクモゲームスは、9月27日(Steam版は10月16日)に発売を予定しているプレイステーション 4/Nintendo Switch用タクティカルアクション「無双 OROCHI3」の最新情報を公開した。今回は、新キャラクター「ペルセウス」のキャラクター紹介動画が公開された。CVは下野 紘さんが務める。他にも、ストーリーのキーとなるキャラクターが特別な姿へ変化する「神格化」について、「関銀屏」が対象となることが明らかになった。さらに、神の力を得たキーアイテム「神器」2種が公開された。オリュンポスの英雄。神であるゼウスと、人であるダナエーの間に生まれた半神。メドゥーサ殺しを成し遂げ、英雄として崇められるようになった。ゼウスによる人間界への介入を憂い、世界の混乱を防ぐために立ち上がる。ストーリーのキーとなる8名は、神の力を身に宿した姿へ変化する「神格化」を遂げる。今回新たに「関銀屏(CV:三上枝織)」の神格化が決定した。大変器量が良く、護身術のつもりで習った武芸に才能を発揮する。とてつもない怪力だが、本人は気づいていない。"守護神ヘルメスの持つ、翼の生えた魔法の靴。身につけた者は風を追い越す速度を得る。仙人が創り出した神秘の宝のひとつ。大地を揺るがし山を吹き飛ばす力を持つ。"開催中の店頭体験会の追加日程が決定した。試遊した人には「『無双OROCHI3』特製缶バッジ」がランダム配布される。数には限りがあり、なくなり次第終了となる。【店頭体験会 追加日程】東京都池袋にある飲食店「KOEI TECMO CAFE & DINING」とのコラボレーションが9月上旬に開催される。「無双OROCHI3」にちなんだ店内装飾や、限定メニューが楽しめる。詳細な期間や予約方法などは後日公開される予定。©コーエーテクモゲームス All rights reserved.
このように表示されることを目指しています。
こちらは、現段階のプログラムの出力結果です。
記事数は710記事のため、それを超えてカウントされているものが多々あるためこのような結果となっていると推測し、調べていると、最初の質問のとおり s にはいっている文字列が1記事単位となっていないため、上記のような数値が表示されているのではないかという考えに至りました。
以上で補足とさせていただきます。また、回答するにあたって不明な点などがございましたら連絡いただけると幸いです。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/11/29 12:32
2019/11/29 12:47 編集
2019/11/29 12:56 編集
2019/11/29 13:30
2019/11/29 15:34
2019/11/30 01:14 編集
2019/11/30 03:47