2016-10-03 4 views
0

私はPDF形式のメーリングリストリストを持っています。メーリングリストは非常に一般的なフォーマット、すなわち著者名の後に本の名前が続きます。 次の例を検討:民主主義理論にPythonを使用してpdfを解析し、著者名と書籍名を抽出します

アメリカのリーディングリスト

民主主義論

•ダール、序文を

•シュンペーター、資本主義、社会主義、そして民主主義(はじめとパートIVのみ)

•教師、生命、そしてタイムズ・オブ・リベラル民主主義

•ダール、民主主義とその批判を

は、今私は、PDFの鉱山労働者を使用してPDFファイルを解析し、最初のインデックスに著者名で、2番目のインデックスは本の名前でリストを作成しようとしていますただ、このように:

[ダール、民主主義論によせ]

私はコンマと著者名の後にスペースがあるため、分割機能を使用しようとしています。しかし、私は正しい結果を得ていません。 誰かが助けることができますか?

def extract(): 
    string = convert_pdf_to_txt("/Users/../../names.pdf") 
    lines = list(filter(bool, string.split('\n'))) 
    for i in lines: 
     check.extend(i.split(',')) 
    x=remove_numbers(check) 
    remove_blank= [x for x in x if x] 
    combine_two = [remove_blank[x:x + 2] for x in xrange(0,len(remove_blank), 2)] 
    print combine_two 

答えて

2

ここで何が問題になるのか見てみましょう。私はいくつかの推測をしていますが、うまくいけばそれは関連性のあるものです。

  1. convert_pdf_to_text()関数は、PDFのすべてのテキストを含む1つの長い文字列を返します。
  2. ", "にテキストを分割すると、結果として文字列のリストが表示されます。あなたの例のデータを考えると

、このリストは、この(各要素は、ここで別の行にある)のようなものになります。あなたは、データがフォーマットされているという事実に関係なく", "に分かれているので

Dahl 
Preface to Democratic Theory(line break)(bullet)(tab)Schumpeter 
Captitalism 
Socialism 
and Democracy (Introduction and part IV only)(line break)(bullet)(tab)Machpherson 
Life and Times of Liberal Democracy(line break)(bullet)(tab)Dahl 
Democracy and its Critics 

を行として、あなたは各項目の複数の行のもので終わる。

  1. ここでfilter()を使用して、このリストを反復処理し、真でないものをすべて除外します。空でない文字列はtrueであり、すべての要素が空でない文字列であるため、すべての要素が通過します。したがって、filter()は何もしません。我々は最初の行を分割ここ

    lines = [line.split(", ", 1) for line in string.splitlines() if ", " in line] 
    

    、それらにカンマスペースを持たない任意のを除外して、のリストを返す:あなたがしたいように見える何

は、より多くのこのようなものです最初のコンマスペースに文字列を分割することに基づいてリストを作成します。

+0

こんにちは、ありがとうございました。しかし、私はまだ正しい出力を得ていません。私はこのような何かを得ている:[['ダール'、 '民主主義理論への序論、資本主義、社会主義、そして民主主義(序論と第4部のみ)マハルダー、生活とタイムズ、民主主義とその批評家]] –

+1

'convert_pdf_to_txt()'に改行が含まれていないと推測されます。これは、おそらくPDFが実際に改行を含んでいないからです(単に「ここでこれを印刷してください」、「ここ」は次の行の先頭にあります)。あるアイテムが終了し、次のアイテムがどこで始まるかを検出できる他の方法はありますか?それには弾丸が含まれていますか?もしそうなら、あなたはそれらを分割しようとすることができます。 – kindall

+0

私は何とか新しいライン分割機能を使って結果を達成しました。しかし、著者名と書籍名を組み合わせようとすると、より大きなリストの第1要素と第2要素のリストを別々に作成することによって、問題に遭遇しました。 [['American Reading List'、 'Revised //']、['Democratic Theory'、 'Madison']、['Federalist'、 ' ']、[' Dahl '、' Democratic Theoryの序文 '] –

関連する問題