

前提・実現したいこと

PDFファイルに記載された文字に下線が引かれているデータを抽出したい。引かれているのといないので区別したい。  
※PDF編集で入れた？罫線のようです。どのように記載したかは不明。

[![画像の説明をここに入力](https://i.stack.imgur.com/MtIfx.png)](https://i.stack.imgur.com/MtIfx.png)

pythonでPDFの文字解析を行い、そのデータに下線が引かれているか確認し区別するアプリを作っています。  
pythonモジュール`pdfminer3k`で解析を行いました。  
該当のソースコード

[code]

    Anaconda prompt
    Scripts> pdf2txt.py data.pdf > text2.csv
    Scripts> py
    >>> import csv
    >>> example_file = open('text2.csv')
    >>> example_reader = csv.reader(example_file)
    >>> example_data = list(example_reader)
    >>> example_data[5]
    
[/code]

csvの5行目にある住所に下線がPDFでは引かれていたのですが、抽出すると以下の様にただの文言になっていました。  
発生している問題

[code]

    \u3000大阪市倍野区\u3000\u3000\u3000\u3000\u3000
    
[/code]

試したこと

エクセルで文字に罫線を引きPDF出力

[![画像の説明をここに入力](https://i.stack.imgur.com/C0Ute.png)](https://i.stack.imgur.com/C0Ute.png)

上記解析を試しました。

[![画像の説明をここに入力](https://i.stack.imgur.com/2gBq9.png)](https://i.stack.imgur.com/2gBq9.png)

’\x0c’という罫線情報らしきものは抽出できましたが、実際の一番上の画像のような罫線下線とは違いますので意味がないと思い、途方に暮れています。  
補足情報（FW/ツールのバージョンなど）

  * win10
  * python3.6.0
  * Anaconda3
  * anaconda-script.py Command line client (version 1.6.0)

もし何かアドバイスいい案などご掲示頂ければ幸いです。  
よろしくお願い致します。


CC BY-SA 4.0
2018-10-24T12:37:18.403
49619
2018-10-26T01:32:41.223
2018-10-25T01:04:05.833
23994
27374
question
python
PDFの解析　文字の下線罫線の情報抽出


質問にある文字の下にある線は、フォントのスタイルでアンダーラインの設定をして表示している可能性が高いです。アンダーラインか図形の直線又は画像かは、MS
Wordで読み込んでみるとすぐにわかります。

実際の解析も、アンダーラインということであれば、Wordに変換したものを使うと`python-
docx`が使えるので簡単です。サンプルコードは以下のようになります。

[code]

    from docx import Document
    
    document = Document('sample.docx')
    result = []
    for paragraph in document.paragraphs:
        for run in paragraph.runs:
            result.append([run.text, bool(run.underline)])
    
    print(result)
    
[/code]

また、上のコードではテーブルのデータが除外されます。テーブルがある場合のサンプルコードは次のようになります。

[code]

    from docx import Document
    
    document = Document('sample.docx')
    result = []
    
    for table in document.tables:
        for row in table.rows:
            for column in row.columns
                for paragraph in document.paragraphs:
                    for run in paragraph.runs:
                        result.append([run.text, bool(run.underline)])
    
    print(result)
    
[/code]

なお、`pdfminer`を使う場合、`pdf2txt.py -t xml
data.pdf`とすれば文字のある位置とフォントのサイズは取得できるのですが、アンダーラインの情報を取得することはでできませんでしたが、それ以上は詳しく調べていません。

また、文字の下の線が、図形の直線又は画像である場合は、PDFのファイル構造を知った上でプログラムを書かないといけないので、できないことはないですがかなり手間はかかると思われます。


CC BY-SA 4.0
2018-10-26T01:24:53.643
49670
2018-10-26T01:32:41.223
2018-10-26T01:32:41.223
15171
15171
49619
answer