毎日テキストマイニング

180日間、毎日テキストマイニングをするブログです

2018/7/23【31日目】PythonでPDFからテキストを読み込むその2

ドキュメントを読んでもどうすればいいのか全然わからないので、いろいろなサイトを参考にしてみたのですが、次のサイトが様々なバージョンのコードが書かれており、とても参考になりました。

Python pdfminer.converter.TextConverter() Examples

www.programcreek.com

importする関数は本当にどこから見つけてきたのか、下記の通りです。

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

PDFのDeviceを作成。何に使うのかは不明です。と書きましたが、どうやらDeviceにはTextConverterという関数を代入するらしい。

それで、そのまま実行しますと、下記のようなエラーがでます。

device = TextConverter()
TypeError: __init__() missing 2 required positional arguments: 'rsrcmgr' and 'outfp'

rsrcmgrとoutfpを引数に指定しろというエラーですので、その2つを用意します。

rsrcmgr = PDFResourceManager()
outfp = StringIO()

interpreterなんかもそのまま実行すると、引数の指定がでてきます。

interpreter = PDFPageInterpreter()
TypeError: __init__() missing 2 required positional arguments: 'rsrcmgr' and 'device'

こちら指定された2つを引数として渡します。

interpreter = PDFPageInterpreter(rsrcmgr, device)

それで完成したコードがこちらです。

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

rsrcmgr = PDFResourceManager()
outfp = StringIO()
device = TextConverter(rsrcmgr, outfp, codec='utf-8', laparams=laparams)
pdf = open('pdf/p1_5.pdf', 'rb')
interpreter = PDFPageInterpreter(rsrcmgr, device)
 
for page in PDFPage.get_pages(pdf):
    interpreter.process_page(page)
 
list =[outfp.getvalue()]
 
pdf.close()
device.close()
outfp.close()
print(list)

実行結果。

言語処理学会  第 19 回年次大会  発表論文集  (2013 年 3 月) 

女性グループの歌詞の計量テキスト分析 

 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ 

小林佳織                  狩野恵里奈                  鈴木崇史 

東洋大学社会学部              東洋大学社会学部            東洋大学社会学部  

性グループの曲は,現在の日本全体の楽曲売り上げにおいて大きな部分を占め,

2011 年度のオリコン年間トップ 50 においては 17 曲がランクインする結果となっ
ている.また,流行歌の歌詞を理解することはその時代のポピュ ラーカルチャー
を社会学的に理解するために重要な意義をも つ.そこで本研究では,過去 35 年間
のオリコン年鑑のデータをもとに女性グループ 34 組 439 曲を対象とし研究を行っ た.
歌詞のテキストファイルを作成し,形態素の頻度を計量,主成分分析とランダムフォ
レスト機械学習法を適用した.その結果,ヒット歌手,各年代に それぞれ違いがある
ことを明らかに した.本研究は女性グループを対象とし,歌手や年代の違いを知るた
めの歌詞の重要性を考える.  (以下、省略)

とりあえず、文字列型にできましたので、あとは改行( \n)などで区切ってあげればリストができそうです。

list = string.split("\n")
list
['                                                       ',
 '',
 '  ',
 '',
 '言語処理学会  第 19 回年次大会  発表論文集  (2013 年 3 月) ',
 '',
 '女性グループの歌詞の計量テキスト分析 ',

いろいろなマイニングに使えそうですね。

今日の結果

今日のAKBの呟きは31件でした。いつも通りに戻りましたね。 f:id:rimt:20180725014408p:plain

'可愛い': 6, '楽しい': 3, '良い': 3, '暑い': 2, 'すごい': 2, '嬉しい': 1, '優しい': 1, '新しい': 1, '恥ずかしい': 1, 'ない': 1})
'ちゃん': 10, '可愛い': 6, 'さん': 6, '公演': 6, 'こと': 5, '今日': 5, 'アクシュカイ': 5, '日': 5, 
'する': 13, 'ちゃん': 10, '頑張る': 7, '可愛い': 6, 'さん': 6, '公演': 6, 'なる': 6, 'こと': 5, '今日': 5, 'アクシュカイ': 5, '日': 5,