[Il existe différentes méthodes pour traduire automatiquement un PDF](https://needtec.sakura.ne.jp/wod07672/2020/05/07/pdf%e3%82%92%e7%bf%bb%e8%a8% b3% e3% 81% 97% e3% 81% 9f% e3% 81% 84 /) est DocTranslator dans le sens où il maintient la mise en page et traduit. ) Est facile à utiliser. Cependant, il semble y avoir une limite de taille et PDF32000_2008.pdf etc. n'a pas pu traduire. Je vais finir.
Cette fois, réfléchissons à la façon de traduire sans casser la mise en page. De la conclusion, la méthode expliquée cette fois est gênante, donc si vous pouvez utiliser une autre méthode, je recommande une autre méthode.
Ce serait bien si vous pouviez intégrer la traduction dans le texte sans casser la mise en page comme DocTranslator, mais je peux prédire que cela ne fonctionnera pas de différentes manières, donc en commentaire Je vais intégrer la traduction.
Par exemple, si vous traduisez PDF32000_2008.pdf, le résultat sera le suivant.
http://needtec.sakura.ne.jp/doc/tmp/output.pdf
Lorsqu'il est visualisé avec Adobe Acrobat Reader, il s'affiche comme suit.
Le mécanisme de cette traduction est le suivant.
Le CSV qui extrait le texte à traduire du PDF d'origine et le JSON qui stocke des informations telles que la position du texte sont extraits. Ensuite, téléchargez le CSV sur Google Drive et ouvrez-le dans une feuille de calcul Google. Utilisez la formule GOOGLE TRANSLATE (https://support.google.com/docs/answer/3093331?hl=ja) dans la feuille de calcul Google pour traduire le texte source. Ensuite, téléchargez le CSV édité avec la feuille de calcul Google et ajoutez un commentaire décrivant la traduction au format PDF en fonction du JSON qui stocke le CSV et la position du texte.
Installez la bibliothèque.
Google Drive API- Python Quickstart https://developers.google.com/drive/api/v3/quickstart/python
Google Sheets API- Python Quickstart https://developers.google.com/sheets/api/quickstart/python
Au cours de ce démarrage rapide, un JSON contenant les informations d'identification sera créé, alors utilisez-le.
Utilisez la commande suivante pour créer un JSON qui enregistre les informations et la position du texte et un CSV qui enregistre une liste de textes du PDF à traduire.
python ./analyze_pdf_text.py PDF32000_2008.pdf
Les fichiers suivants seront créés.
python ./translate_google_sheets.py PDF32000_2008.pdf.csv client_secret.json
python ./embed_annots.py PDF32000_2008.pdf.json output.pdf
J'utilise PyMuPDF.
Vous pouvez obtenir la position du bloc de texte et son contenu en utilisant la méthode Page.getText.
** Exemple de code **
import fitz
doc = fitz.open('PDF32000_2008.pdf')
print(doc[5].getText('blocks'))
** Exemple de sortie **
[(36.779998779296875, 39.29692077636719, 130.1901397705078, 52.363121032714844, 'PDF 32000-1:2008', 0, 0),Abréviation]
Il est également possible d'obtenir des unités de mot en définissant la valeur du premier argument de getText sur "words".
** Exemple de sortie **
[(36.779998779296875, 39.29692077636719, 58.759761810302734, 52.363121032714844, 'PDF', 0, 0, 0),Abréviation]
Si vous donnez "json" ou "dict", vous pouvez obtenir des informations plus détaillées telles que les polices et les couleurs.
{
"width":595.0,
"height":842.0,
"blocks":[
{
"type":0,
"bbox":[
36.779998779296875,
39.29692077636719,
130.1901397705078,
52.363121032714844
],
"lines":[
{
"wmode":0,
"dir":[
1.0,
0.0
],
"bbox":[
36.779998779296875,
39.29692077636719,
130.1901397705078,
52.363121032714844
],
"spans":[
{
"size":10.979999542236328,
"flags":20,
"font":"DDPEIM+Helvetica-Bold",
"color":0,
"text":"PDF 32000-1:2008",
"bbox":[
36.779998779296875,
39.29692077636719,
130.1901397705078,
52.363121032714844
]
}
]
}
]
},
Abréviation
Utilisez Page.addTextAnnot. Si vous souhaitez essayer autre chose que les simples ajoutés cette fois, le code suivant vous sera utile.
https://github.com/pymupdf/PyMuPDF-Utilities/blob/master/annotations/new-annots.py
[Importez le fichier CSV sur Google Drive, modifiez-le en tant que feuille de calcul Google, puis téléchargez-le](https://needtec.sakura.ne.jp/wod07672/2020/05/08/google-drive%e3%81%abcsv% e3% 82% 92% e3% 82% a2% e3% 83% 83% e3% 83% 97% e3% 83% ad% e3% 83% bc% e3% 83% 89% e3% 81% 97% e3% 81% a6google% e3% 82% b9% e3% 83% 97% e3% 83% ac% e3% 83% 83% e3% 83% 89% e3% 82% b7% e3% 83% bc% e3% 83% 88% e3% 81% a8 /) a un exemple de code pour le téléchargement uniquement.
Extrait du processus de téléchargement
service_drive = build('drive', 'v3', credentials=creds)
#Importez un fichier CSV pour le modifier dans Google Spreadsheet.
# https://developers.google.com/drive/api/v3/manage-uploads#python
file_metadata = {
'name': 'Test',
'mimeType': 'application/vnd.google-apps.spreadsheet'
}
media = MediaFileUpload('test.csv',
mimetype='text/csv',
resumable=True)
file = service_drive.files().create(body=file_metadata,
media_body=media,
fields='id').execute()
print('File ID: %s' % file.get('id'))
En spécifiant "application / vnd.google-apps.spreadsheet" dans le mimeType du paramètre body de create, CSV sera ajouté en tant que feuille de calcul Google.
[Téléchargez le fichier CSV sur Google Drive, modifiez-le en tant que feuille de calcul Google, puis téléchargez-le](https://needtec.sakura.ne.jp/wod07672/2020/05/08/google-drive%e3%81%abcsv% e3% 82% 92% e3% 82% a2% e3% 83% 83% e3% 83% 97% e3% 83% ad% e3% 83% bc% e3% 83% 89% e3% 81% 97% e3% 81% a6google% e3% 82% b9% e3% 83% 97% e3% 83% ac% e3% 83% 83% e3% 83% 89% e3% 82% b7% e3% 83% bc% e3% 83% 88% e3% 81% a8 /) contient un exemple de code qui vous permet de modifier le CSV téléchargé sur Google Drive avec l'API Google Sheets.
Cela convient aux CSV de petite taille, mais pour la mise à jour d'un grand nombre de lignes, la formule GOOGLE TRANSLATE (https://support.google.com/docs/answer/3093331?hl=ja) est terminée. Il ne peut pas être coupé. Dans ce cas, la cellule affichera "Chargement ..." ou "Chargement ..." au lieu du texte traduit. C'est également un problème si vous modifiez une feuille de calcul Google sur votre écran au lieu de via l'API.
Cette fois, je n'ai pas trouvé de bonne solution de contournement, donc toutes les 10 secondes, je vérifie que "Chargement ..." ou "Chargement ..." n'existe pas. https://github.com/mima3/pdf_translate/blob/master/translate_google_sheets.py#L45
De plus, cette fois, je mets à jour honnêtement la cellule avec la méthode de mise à jour, mais ceux qui ont utilisé batchUpdate Cela semble bon.
[Importez le fichier CSV sur Google Drive, modifiez-le en tant que feuille de calcul Google, puis téléchargez-le](https://needtec.sakura.ne.jp/wod07672/2020/05/08/google-drive%e3%81%abcsv% e3% 82% 92% e3% 82% a2% e3% 83% 83% e3% 83% 97% e3% 83% ad% e3% 83% bc% e3% 83% 89% e3% 81% 97% e3% 81% a6google% e3% 82% b9% e3% 83% 97% e3% 83% ac% e3% 83% 83% e3% 83% 89% e3% 82% b7% e3% 83% bc% e3% 83% 88% e3% 81% a8 /) a un exemple de téléchargement.
# download
request = service_drive.files().export_media(fileId=file_id, mimeType='text/csv')
fh = io.BytesIO()
downloader = MediaIoBaseDownload(fh, request)
done = False
while done is False:
status, done = downloader.next_chunk()
print ("Download %d%%." % int(status.progress() * 100))
with open('download.csv', 'wb') as f:
f.write(fh.getvalue())
Il existe deux façons de télécharger depuis Google Drive: get_media et export_media. https://developers.google.com/drive/api/v3/manage-downloads
Cette fois, j'utiliserai export_media car je téléchargerai une fois la propagation Google convertie au format CSV.
Pour le moment, j'ai pu traduire un PDF d'environ 700 pages comme celui-ci. Cependant, cette méthode est lourde et prend du temps, donc si une autre méthode est possible, vous devriez envisager une autre méthode. Au moins, si vous pouvez utiliser une autre API de traduction, vous n'avez pas à vous soucier du téléchargement, de l'intégration de la formule et du téléchargement.
Recommended Posts