[PYTHON] Extraire du texte japonais d'un PDF avec PDFMiner

Ce que je veux faire

Y a-t-il un problème avec le contenu d'un grand nombre de PDF (10 000 ou plus!)? Je voulais faire une recherche rapide (si le nom du fichier correspond au contenu, etc.).

environnement

Python 2.7 Windows7 64bit

Bibliothèque à utiliser

Utilisez PDFMiner. Bien que le site Web officiel dispose d'un exemple lors de l'utilisation de l'invite de commande, Pour une raison quelconque, il n'y avait aucune information sur la façon d'importer et d'utiliser la bibliothèque, donc je suis un peu confus.

Installation

Extrayez le fichier téléchargé depuis le site officiel Dans le dossier pdfminer-20140328, cette fois c'est Windows, alors exécutez la commande suivante.

mkdir pdfminer\cmap
python tools\conv_cmap.py -c B5=cp950 -c UniCNS-UTF8=utf-8 pdfminer\cmap Adobe-CNS1 cmaprsrc\cid2code_Adobe_CNS1.txt
python tools\conv_cmap.py -c GBK-EUC=cp936 -c UniGB-UTF8=utf-8 pdfminer\cmap Adobe-GB1 cmaprsrc\cid2code_Adobe_GB1.txt
python tools\conv_cmap.py -c RKSJ=cp932 -c EUC=euc-jp -c UniJIS-UTF8=utf-8 pdfminer\cmap Adobe-Japan1 cmaprsrc\cid2code_Adobe_Japan1.txt
python tools\conv_cmap.py -c KSC-EUC=euc-kr -c KSC-Johab=johab -c KSCms-UHC=cp949 -c UniKS-UTF8=utf-8 pdfminer\cmap Adobe-Korea1 cmaprsrc\cid2code_Adobe_Korea1.txt
python setup.py install

Si vous n'installez pas avec cette procédure, tous les japonais seront affichés comme (cid: 0000).

Extraire le texte en fait

pdf2txt.py


# -*- coding: utf-8 -*-

import re
from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
from pdfminer.converter import TextConverter
from pdfminer.layout import LAParams
from pdfminer.pdfpage import PDFPage
from cStringIO import StringIO

space = re.compile(ur"[  ]+")

def convert_pdf_to_txt(path, txtname, buf=True):
    rsrcmgr = PDFResourceManager()
    if buf:
        outfp = StringIO()
    else:
        outfp = file(txtname, 'w')
    codec = 'utf-8'
    laparams = LAParams()
    laparams.detect_vertical = True
    device = TextConverter(rsrcmgr, outfp, codec=codec, laparams=laparams)

    fp = file(path, 'rb')
    interpreter = PDFPageInterpreter(rsrcmgr, device)
    for page in PDFPage.get_pages(fp):
        interpreter.process_page(page)
    fp.close()
    device.close()
    if buf:
        text = re.sub(space, "", outfp.getvalue())
        print text
    outfp.close()


convert_pdf_to_txt("TEST.pdf", "test.txt")

** PDF préparé ** TEST.gif

résultat

ancien étang
Saute dans la grenouille
Le bruit de l'eau

Cocoa*Chocolate

Le cacao est un contenu solide obtenu en séparant un certain pourcentage de beurre de cacao de la masse de cacao.
Ou c'est une abréviation pour la poudre de cacao en poudre. Faites également fondre la poudre de cacao
Il est également utilisé comme abréviation pour les boissons salées. Comme le montre l'historique ci-dessous
Jusqu'à ce que nous commencions à séparer Coco Avatar de Khao Mass, le mot cacao
Il n'y a que du chocolat pâteux qui n'est ni solide ni liquide
Était là.

laparams.detect_vertical semble être un paramètre important. Pour un texte PDF vertical ou un PDF avec une structure complexe Si ce n'est pas défini sur True, le japonais sera cassé pour chaque caractère et la structure sera sortie dans un désordre. De plus, re.sub '' supprime l'espace obstructif. Ensuite, pour la chaîne de caractères dans la mémoire, vérifiez simplement le contenu avec l'opérateur in! Au fait, si vous passez buf = False`` comme argument, il sera affiché sous forme de texte.

De côté

Les caractères affichés dans des caractères variantes tels que Tsuji et 逗 n'ont pas pu être correctement convertis en japonais. Il sera affiché comme (cid: 7711). Je ne connais pas encore la police cid, alors étudiez-la.

À propos, dans l'extraction de texte GhostScript, lorsque j'ai essayé d'extraire du texte de données de police qui ne sont pas sous Windows, le code de caractère de Shift_JIS avec & #; a été émis de force, donc les caractères ont été déformés (à partir de Shift_JIS - Table de correspondance Unicode). Convertissez et répondez de force). PyPDF2 ne pouvait pas bien convertir le japonais. (Officiellement dit que cela sera affiné à l'avenir.)

Le site auquel j'ai fait référence

http://stackoverflow.com/questions/26748788/extraction-of-text-from-pdf-with-pdfminer-gives-multiple-copies

Recommended Posts

Extraire du texte japonais d'un PDF avec PDFMiner
Sélectionnez PDFMiner pour extraire les informations textuelles du PDF
Extraire le texte du pdf [python] et lire les caractères à haute voix avec Open-Jtalk
Capture approfondie des données ouvertes PDF. Analyse de texte PDF à partir de PDFMiner.
Conversion de pdf en txt 1 [pdfminer]
Extraire du texte d'images avec Python
Parlez du texte japonais avec OpenJTalk + python
Convertir de PDF en CSV avec pdfplumber
Classification des documents avec texte toch de PyTorch
Extraire les lignes qui correspondent aux conditions d'un fichier texte avec python
Parler en japonais avec OpenJtalk (lire un fichier texte)
[Automation] Extraire le tableau en PDF avec Python
Japonais avec matplotlib
Extraire le zip avec Python (prend en charge les noms de fichiers japonais)
Extraire des données d'une page Web avec Python
Extraire des images et des tableaux de pdf avec python pour réduire la charge de reporting
Python: texte japonais: caractéristique du discours à partir de la similitude des mots
Supprimez les composants et les rappels de app.py avec plotly Dash
Extraire des fichiers du stockage EC2 avec la commande scp
Python: texte japonais: caractéristique de la parole à partir de la continuité des mots
Sortie PDF avec Django
Extraction de données depuis S3
Entrée japonaise avec pyautogui
Texte extrait de l'image
Sortie PDF avec WeasyPrint
Parler en japonais avec OpenJtalk
Text mining avec Python-Scraping-
Pythonbrew avec Sublime Text
Extraire le tableau de wikipedia
Le PDF anglais est traduit en japonais
Extraire EXIF avec des gorgées
Flux d'extraction de texte au format PDF avec l'API Cloud Vision
OpenJTalk sur Windows10 (parler japonais avec Python depuis la construction de l'environnement)
Apprenez les catégories de texte japonais avec tf-idf et Random Forest ~ [Tuning]
Extraire le modèle du fichier EML enregistré depuis Thunderbird avec python3.7
[Python] Extrayez des données texte à partir de données XML de 10 Go ou plus.
Obtenez des informations sur les actions japonaises de Yahoo Finance avec Pandas