一旦は動いたコードなのに、JSONDecodeError
が出て翻訳がでなくなりましたorz
試したこと
freqdist_list = freqdist.most_common(100)
のmost_common(100)
の数を100にしてみる。(一旦は動いたけど、結局動かなくなる)- 負担がかかるのではと思い
time.sleep(5)
を入れても状況変わらず。。。
どうぞよろしくお願いします:(
エラー文
commandline
1ayumka@yukiya:~/PycharmProjects/26and1$ python 26and1.py 2Traceback (most recent call last): 3 File "26and1.py", line 44, in <module> 4 show_word() # csvScraping.py 5 File "/home/ayumka/PycharmProjects/26and1/csvScraping.py", line 15, in show_word 6 ru_ja = translator.translate(ru, 'ja') 7 File "/usr/local/lib/python3.6/dist-packages/googletrans/client.py", line 172, in translate 8 data = self._translate(text, dest, src) 9 File "/usr/local/lib/python3.6/dist-packages/googletrans/client.py", line 81, in _translate 10 data = utils.format_json(r.text) 11 File "/usr/local/lib/python3.6/dist-packages/googletrans/utils.py", line 62, in format_json 12 converted = legacy_format_json(original) 13 File "/usr/local/lib/python3.6/dist-packages/googletrans/utils.py", line 54, in legacy_format_json 14 converted = json.loads(text) 15 File "/usr/lib/python3.6/json/__init__.py", line 354, in loads 16 return _default_decoder.decode(s) 17 File "/usr/lib/python3.6/json/decoder.py", line 339, in decode 18 obj, end = self.raw_decode(s, idx=_w(s, 0).end()) 19 File "/usr/lib/python3.6/json/decoder.py", line 357, in raw_decode 20 raise JSONDecodeError("Expecting value", s, err.value) from None 21json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0) 22
該当コード
python
1# 26and1.py 2# -*- coding: utf-8 -*- 3from nltk import FreqDist 4import pymorphy2 5import csv 6import re 7 8import del_words 9from csvScraping import show_word 10 11downloadtxt = open('26and1.txt', 'r') 12texts = downloadtxt.read() 13texts = re.sub('[.,?!()\'—]', ' ', texts) 14texts = texts.split() 15 16analyzer = pymorphy2.MorphAnalyzer() 17 18lemma_list = [] 19for text in texts: 20 lemma = analyzer.parse(text)[0].normal_form 21 lemma_list.append(lemma) 22 23lemma_list = list(filter(lambda d: d not in (str(del_words.del_w)), lemma_list)) 24freqdist = FreqDist(lemma_list) 25freqdist_list = freqdist.most_common(100) 26 27with open('26and1.csv', 'w') as file: 28 writer = csv.writer(file, lineterminator = '\n') 29 writer.writerow(['Ру','Ном']) 30 for n in range(0, len(freqdist_list)): 31 writer.writerows([freqdist_list[n]]) 32pass 33 34show_word() # csvScraping.py 35
python
1# csvScraping.py 2import pandas as pd 3from googletrans import Translator 4import time 5import warnings 6warnings.filterwarnings('ignore') 7# https://pypi.org/project/yandex-translater/ を使うか? 8 9def show_word(): 10 csv_input = pd.read_csv('26and1.csv', sep=",") 11 csv_input['Яп'] = '' 12 13 for index, row in csv_input.iterrows(): 14 ru = csv_input.iloc[index, 0] 15 translator = Translator() 16 ru_ja = translator.translate(ru, 'ja') 17 ja = ru_ja.text 18 csv_input['Яп'][index] = ja 19 time.sleep(5) 20 21 csv_input.to_csv('26and1.csv', index=False) 22
とりあえず手作業も挟んで解決xD
tiitoiさんの推測どおり、googletransを使っています。最初は300語だったので、それが一日に積み重なって1万5,000語超える。。。確かに50回のトライはしたかもorz でも「ひとつのテキストで15000」という部分が納得できない(・_・) そこは信頼すべきでないか。。。
The maximum character limit on a single text is 15k
とりあえず現行のpythonの翻訳ライブラリ系はほぼgoogleを使っている、またロシアで主流のЯндексも課金制のようなので、以下のやり方に切り替えました。
26and1.py
でロシア語の文章でよく使われる単語を頻出順に登場回数も含めてCSVに出力- 手動で出力したCSVをlibreofficeで開く (OSがLinux Mintのため)
- 手動でロシア語の部分をコピー
- 手動でЯндекс.Переводчикにペーストし、翻訳。
- 翻訳結果をコピーしてテキストファイルに保存。
- テキストファイルの中身を
26and1.csv
に追記
python
1# 26and1.py 2# -*- coding: utf-8 -*- 3from nltk import FreqDist 4import pymorphy2 5import csv 6import re 7 8import del_words 9 10downloadtxt = open('26and1.txt', 'r') 11texts = downloadtxt.read() 12texts = re.sub('[.,?!()\'—]', ' ', texts) 13texts = texts.split() 14 15analyzer = pymorphy2.MorphAnalyzer() 16 17lemma_list = [] 18for text in texts: 19 lemma = analyzer.parse(text)[0].normal_form 20 lemma_list.append(lemma) 21 22lemma_list = list(filter(lambda d: d not in (str(del_words.del_w)), lemma_list)) 23freqdist = FreqDist(lemma_list) 24freqdist_list = freqdist.most_common(600) 25 26with open('26and1.csv', 'w') as file: 27 writer = csv.writer(file, lineterminator = '\n') 28 writer.writerow(['Ру','Ном']) 29 for n in range(0, len(freqdist_list)): 30 writer.writerows([freqdist_list[n]]) 31pass
Яндекс.Переводчик出力結果
(26and1_600JP.txt)
python
1# addJP.py 2import pandas as pd 3import warnings 4warnings.filterwarnings('ignore') 5 6jp = open('26and1_600JP.txt', 'r') 7jp_w = jp.read() 8jp_w = jp_w.split() 9 10csv_input = pd.read_csv('26and1.csv', sep=",") 11csv_input['Яп'] = '' 12 13for index, row in csv_input.iterrows(): 14 csv_input['Яп'][index] = jp_w[index] 15 16csv_input.to_csv('26and1.csv', index=False)
addJP.py出力結果
しかしмочьは英語のcan相当だから「缶」ではなく「できる」なんだよな。。。そこはご愛嬌か^^; неяも多分訳が違って「彼女」みたいな感じだったと思う。。。そこは人力で修正^^ または最初からGoogle翻訳を使うか。
回答1件
あなたの回答
tips
プレビュー