リアルタイムで収集したツイートから、url, 返信, RTを除去した後に重複行を削除したものを表示しようとしたら、このようなエラーが表示されてしましました。
エラーの該当箇所をprint(corpus)に戻すと、以下の写真のように、重複要素を持つ二次元配列の形をした重複行が出力される事を確認済みです。
写真
解決に向けてお知恵をお貸しいただけますと幸いです。宜しくお願いします。
エラー
Traceback (most recent call last): File "honban.py", line 140, in <module> stream.sample() File "/Users/macuser/Workspaces/jxpress/trendword/.direnv/python-3.7.3/lib/python3.7/site-packages/tweepy/streaming.py", line 449, in sample self._start(is_async) File "/Users/macuser/Workspaces/jxpress/trendword/.direnv/python-3.7.3/lib/python3.7/site-packages/tweepy/streaming.py", line 389, in _start self._run() File "/Users/macuser/Workspaces/jxpress/trendword/.direnv/python-3.7.3/lib/python3.7/site-packages/tweepy/streaming.py", line 320, in _run six.reraise(*exc_info) File "/Users/macuser/Workspaces/jxpress/trendword/.direnv/python-3.7.3/lib/python3.7/site-packages/six.py", line 693, in reraise raise value File "/Users/macuser/Workspaces/jxpress/trendword/.direnv/python-3.7.3/lib/python3.7/site-packages/tweepy/streaming.py", line 289, in _run self._read_loop(resp) File "/Users/macuser/Workspaces/jxpress/trendword/.direnv/python-3.7.3/lib/python3.7/site-packages/tweepy/streaming.py", line 351, in _read_loop self._data(next_status_obj) File "/Users/macuser/Workspaces/jxpress/trendword/.direnv/python-3.7.3/lib/python3.7/site-packages/tweepy/streaming.py", line 323, in _data if self.listener.on_data(data) is False: File "/Users/macuser/Workspaces/jxpress/trendword/.direnv/python-3.7.3/lib/python3.7/site-packages/tweepy/streaming.py", line 54, in on_data if self.on_status(status) is False: File "honban.py", line 99, in on_status corpus = set(corpus) TypeError: unhashable type: 'list'
コード
renshu.py
1#上記省略 2 def on_status(self, status): 3 text = str(status.text) 4 5 #日本語ツイートをファイルに書き込んでいる + ツイートの数を表示 6 if status.lang == "ja": 7 with open("testd.txt", "a", encoding="utf-8") as f: 8 f.write(text) 9 with codecs.open("testd.txt", "r", "utf-8") as f: 10 num_lines = sum(1 for line in open("testd.txt"))#総文書数 11 corpus = f.read().split("\n") 12 13 texts=[] 14 for i in corpus: 15 texts.append(re.sub(r"http\S+", "", i)) 16 texts.append(re.sub(r"@(\w+) ", "", i)) 17 texts.append(re.sub(r"(^RT.*)", "", i, flags=re.MULTILINE | re.DOTALL)) 18 emoji_pattern = re.compile("[" 19 u"\U0001F600-\U0001F64F" 20 u"\U0001F300-\U0001F5FF" 21 u"\U0001F680-\U0001F6FF" 22 u"\U0001F1E0-\U0001F1FF" 23 "]+", flags=re.UNICODE) 24 texts.append(emoji_pattern.sub("", i)) 25 texts.append(i) 26 texts = list(set(texts)) 27 28 mecab = MeCab('-d /usr/local/lib/mecab/dic/mecab-ipadic-neologd') 29 30 rm_list = ["RT","https","co"] 31 32 stop_words = [] 33 path = 'stop_words.txt' 34 with open(path) as g: 35 stop_words = g.readlines() 36 37 docs = [] 38 for txt in texts: 39 words = mecab.parse(txt, as_nodes=True) 40 doc = [] 41 for w in words: 42 if w.feature.split(",")[0] == "名詞": 43 if len(w.surface) >= 3: 44 if w.surface not in rm_list: 45 doc.append(w.surface) 46 docs.append(doc) 47 corpus = docs 48 corpus = set(corpus) 49 50 #重複した単語の削除 51 nouns = [] 52 for line in corpus: 53 if line not in nouns: 54 nouns.append(line) 55 print(nouns) 56#下記省略
補足情報(FW/ツールのバージョンなど)
iOS 10.14.6, Python 3.7.4, Atom
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/09/05 05:10