🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Google API

Googleは多種多様なAPIを提供していて、その多くはウェブ開発者向けのAPIです。それらのAPIは消費者に人気なGoogleのサービス(Google Maps, Google Earth, AdSense, Adwords, Google Apps,YouTube等)に基づいています。

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

PDF

PDF(Portable Document Format)とはISOによって国際標準として制定されている電子ドキュメント用の拡張子です。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

Q&A

1回答

1780閲覧

Python Jsonエラーの対策が知りたいです

watchdogs

総合スコア54

Google API

Googleは多種多様なAPIを提供していて、その多くはウェブ開発者向けのAPIです。それらのAPIは消費者に人気なGoogleのサービス(Google Maps, Google Earth, AdSense, Adwords, Google Apps,YouTube等)に基づいています。

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

PDF

PDF(Portable Document Format)とはISOによって国際標準として制定されている電子ドキュメント用の拡張子です。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

0グッド

0クリップ

投稿2021/02/06 01:48

編集2021/02/06 02:05

PDFの翻訳ツールを下記のサイトを参考にスクリプトを動かしています。

しかしながら、下記のエラーが出てしまい
どの様に対応したら良いかわかりません。
対応を教えていただけると助かります。

よろしくお願い致します。

<参考にしたサイト>
https://qiita.com/kimisyo/items/916f58ac6571815851ff?utm_campaign=popular_items&utm_medium=feed&utm_source=popular_items

<エラー内容>
1/35 is proccessing
Traceback (most recent call last):
File "translate.py", line 151, in <module>
main()
File "translate.py", line 147, in main
f_trans.write(translate(input))
File "translate.py", line 124, in translate
return r_post.json()["text"]
File "/Users/User/anaconda3/lib/python3.6/site-packages/requests/models.py", line 900, in json
return complexjson.loads(self.text, **kwargs)
File "/Users/User/anaconda3/lib/python3.6/json/init.py", line 354, in loads
return _default_decoder.decode(s)
File "/Users/User/anaconda3/lib/python3.6/json/decoder.py", line 339, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "/Users/User/anaconda3/lib/python3.6/json/decoder.py", line 357, in raw_decode
raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)

Python

1 2import argparse 3import requests 4from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter 5from pdfminer.converter import TextConverter 6from pdfminer.layout import LAParams 7from pdfminer.pdfpage import PDFPage 8from io import StringIO 9import re 10import os 11 12 13def is_float(n): 14 try: 15 float(n) 16 except ValueError: 17 return False 18 else: 19 return True 20 21 22def get_text_from_pdf(pdfname, limit=1000): 23 # PDFファイル名が未指定の場合は、空文字列を返して終了 24 if (pdfname == ''): 25 return '' 26 else: 27 # 処理するPDFファイルを開く/開けなければ 28 try: 29 fp = open(pdfname, 'rb') 30 except: 31 return '' 32 33 # PDFからテキストの抽出 34 rsrcmgr = PDFResourceManager() 35 out_fp = StringIO() 36 la_params = LAParams() 37 la_params.detect_vertical = True 38 device = TextConverter(rsrcmgr, out_fp, codec='utf-8', laparams=la_params) 39 interpreter = PDFPageInterpreter(rsrcmgr, device) 40 for page in PDFPage.get_pages(fp, pagenos=None, maxpages=0, password=None, caching=True, check_extractable=True): 41 interpreter.process_page(page) 42 text = out_fp.getvalue() 43 fp.close() 44 device.close() 45 out_fp.close() 46 47 # 改行で分割する 48 lines = text.splitlines() 49 50 outputs = [] 51 output = "" 52 53 # 除去するutf8文字 54 replace_strs = [b'\x00'] 55 56 is_blank_line = False 57 58 # 分割した行でループ 59 for line in lines: 60 61 # byte文字列に変換 62 line_utf8 = line.encode('utf-8') 63 64 # 余分な文字を除去する 65 for replace_str in replace_strs: 66 line_utf8 = line_utf8.replace(replace_str, b'') 67 68 # strに戻す 69 line = line_utf8.decode() 70 71 # 連続する空白を一つにする 72 line = re.sub("[ ]+", " ", line) 73 74 # 前後の空白を除く 75 line = line.strip() 76 #print("aft:[" + line + "]") 77 78 # 空行は無視 79 if len(line) == 0: 80 is_blank_line = True 81 continue 82 83 # 数字だけの行は無視 84 if is_float(line): 85 continue 86 87 # 1単語しかなく、末尾がピリオドで終わらないものは無視 88 if line.split(" ").count == 1 and not line.endswith("."): 89 continue 90 91 # 文章の切れ目の場合 92 if is_blank_line or output.endswith("."): 93 # 文字数がlimitを超えていたらここで一旦区切る 94 if(len(output) > limit): 95 outputs.append(output) 96 output = "" 97 else: 98 output += "\r\n" 99 #前の行からの続きの場合 100 elif not is_blank_line and output.endswith("-"): 101 output = output[:-1] 102 #それ以外の場合は、単語の切れ目として半角空白を入れる 103 else: 104 output += " " 105 106 #print("[" + str(line) + "]") 107 output += str(line) 108 is_blank_line = False 109 110 outputs.append(output) 111 return outputs 112 113 114def translate(input): 115 api_url = "https://script.google.com/macros/s/XXXXXXXXXXXXXXAPIXXXXXXXXXXXXXXXXX/exec" 116 params = { 117 'text': "\"" + input + "\"", 118 'source': 'en', 119 'target': 'ja' 120 } 121 122 #print(params) 123 r_post = requests.post(api_url, data=params) 124 return r_post.json()["text"] 125 126def main(): 127 128 parser = argparse.ArgumentParser() 129 parser.add_argument("-input", type=str, required=True) 130 parser.add_argument("-limit", type=int, default=1000) 131 args = parser.parse_args() 132 133 path = os.path.dirname(args.input) 134 base_name = os.path.splitext(os.path.basename(args.input))[0] 135 136 # pdfをテキストに変換 137 inputs = get_text_from_pdf(args.input, limit=args.limit) 138 139 with open(path + os.sep + "/tmp/"+"text.txt", "w", encoding="utf-8") as f_text: 140 with open(path + os.sep + "/tmp/"+"translate.txt", "w", encoding="utf-8") as f_trans: 141 142 # 一定文字列で分割した文章毎にAPIを叩く 143 for i, input in enumerate(inputs): 144 print("{0}/{1} is proccessing".format((i+1), len(inputs))) 145 # 結果をファイルに出力 146 f_text.write(input) 147 f_trans.write(translate(input)) 148 149 150if __name__ == "__main__": 151 main() 152

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

JSONの形式として不正ということなので、まずそのJSONデータらしき物を自分の目で確認しましょう。

投稿2021/02/06 03:55

otn

総合スコア85893

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問