Open5

python で AI の何かしらを作る試みのログ

atsuo MURATAatsuo MURATA

環境設定

pyenv とか anaconda とか色々入っててわけとうふ状態であったためリセットしてこの記事を参考に conda & conda-forge 環境をつくた
https://qiita.com/c60evaporator/items/b6a7394231d1e768ce64#m1m2-macの場合-4

M1/M2 mac はこれだから困る
早く量子コンピュータ並にヌルるレベルのWindows機が欲しい

というわけで以降、たいてい
pip install ~~~
と通常書いてあるご案内記事のコマンドは自動的に
conda install ~~~ になることをご了承いただきたい

atsuo MURATAatsuo MURATA

さてまあこれを書き出す前にも割と色々触ってきたというのは置いといて、
これから書いていくテーマはこれだ

python で PDFを解析する

だいぶ難しいらしいんだが、そんなものはなんとかしていくしかない

最初に pdfminer.six パッケージを使用するやりかたを試したが、
これだとごく単純なテキストファイルからテキストを抽出することはできたが、テーブルや図が入ったものには全く刃が立たなかった。
https://www.shibutan-bloomers.com/python_library_pdfminer-six/2124/

この方の仰るとおり。
https://qiita.com/mima_ita/items/d99afc28b6f51479f850

ダメ元でやってみた → ダメだった。至極まっとうである。

まあ記事が古いのでもうちょいマシなパッケージが出てるんじゃないかと見渡してみたら
PyMuPDF というのが新し目らしい。

そこでウキウキ気分で conda install pymupdf とやってみたがエラー。

Solving environment: failed with initial frozen solve. Retrying with flexible solve.

要するに channels, つまりパッケージ管理ディストリビューションに pymupdf がねぇという話らしい。
解決を探して同じことを書いてるのを2つ見つけた。一応書いておくけども、ワークしなかった。

# conda のアップデート
$ conda update conda
# ほいでもっかい conda install 
$ conda install pymupdf
# それでも無理ならこれ打ってからもっかい install 
$ conda config --append channels conda-forge
$ conda install pymupdf

もう一個解決方法があったが、こっちも失敗してる

conda install -c tc06580 pymupdf

https://anaconda.org/tc06580/pymupdf
ん?これFilesタブから落としてみたらどうかなと思ったけど
linux-64/pymupdf-1.17.0-py36_0.tar.bz2 が2年5ヶ月前にアップロードされてんなぁ…
なんかキモチワルイね

この github 見るとLatestリリースが3日前になってるからこっちから持ってこよう。
https://github.com/pymupdf/PyMuPDF

atsuo MURATAatsuo MURATA

M1/M2 mac では無理ぽいのか

上述のリポジトリより引用

PyMuPDF requires Python 3.7 or later.

For versions 3.7 and up, Python wheels exist for Windows (32bit and 64bit), Linux (64bit, Intel and ARM) and Mac OSX (64bit, Intel only)

...

Mac OSX (64bit, Intel only)。
Mac OSX (64bit, Intel only)。
YES, インテルオンリィ。

解決方法がマジで「Windows機を買う」になってきそうだ。これが一番シンプル。
悪いが PlayStation VR2 を買うより先に Windows機を調達しなければならないことになる。
だってもう pyenv, venv, conda とか色々あるなかでいちいちPoCやってられないもの

いやそのレベルで金を消費するのであれば同時に買ってもなんだよなぁ〜
不自由が過ぎます。

atsuo MURATAatsuo MURATA

とりあえずはGoogle colab で凌ぐ!

追記:2023年4月30日
https://k-dm.work/ja/prep/special/deepl/
こちらがとても良いサイトで、割とやりたいことの指針が得られたような感じがする。

※ コード中のソースになってる s10926-016-9690-x.pdf ッテファイルは適当にDLしてきた英文の論文。
こんな感じでsample_dataディレクトリ以下に格納してます

jupyternotebook コード

[1] pip install pymupdf openpyxl
# fitzをインポート
import fitz
 
# PDFを読み込む
filename = '/content/sample_data/s10926-016-9690-x.pdf'
doc = fitz.open(filename)

# アブストラクトとイントロダクションを抽出する
extract_char_num = 400; # 抽出する、というか出力する文字数
abstract_text = ""
Introduction_text = ""

# page全部textの中に入れないとイントロダクションが2ページめにある論文とかあるからね
for page in range(len(doc)):
    text = text + doc[page].get_text().replace("\n", "")

print(f'アブスト開始位置:{text.find("Abstract")}, イントロ開始位置:{text.find("Introduction")}')
abstract_text = text[text.find("Abstract") + 8 : text.find("Introduction") - 1]
Introduction_text = text[text.find("Introduction") + 12 : text.find("Introduction") + extract_char_num]

print(f"Abstract {abstract_text[:extract_char_num]}...")
print(f"Introduction {Introduction_text[:extract_char_num]}...")
atsuo MURATAatsuo MURATA

pdf2html

まだメモ

考え方を変えて、javascript で pdf を HTML化 してから読み込めばよいのでは?
しかしこれをどうadaとかがどう解釈するカニよるのでとりあえずは試してみる

想定している手順

  1. 入力された pdf を HTMLに変換
  2. pdf が変換されたことをpythonのAPI叩いて通知
  3. python 受け取ったHTMLのパスを取得、解析して出力

まずはここまで。学習に使えるかどうかをこの時点で評価しなければならないんで。。
さてやってみるか

その前に色々GPT系のプロダクト出てきてるから触るのに時間使うかもしれないw