1

私は数百のPDF形式の新聞とキーワードのリストを持っています。私の最終的な目標は、特定のキーワードに言及している記事の数を取得することです。1 つの pdf には、同じキーワードに言及している複数の記事が含まれている可能性があることに注意してください。

私の問題は、pdf ファイルをプレーン テキストに変換したときに書式設定が失われ、記事の開始時刻と終了時刻がわからないことです。

現時点では不可能だと考えているため、この問題に取り組む最善の方法は何ですか。

私は現在、このプロジェクトと pdf ライブラリ pdfminer に python を使用しています。これはpdfの1つです。 http://www.gulf-times.com/PDFLinks/streams/2011/2/27/2_418617_1_255.02.11.pdf

4

1 に答える 1

0

テキストの形式によっては、見出しを特定するある種のヒューリスティックを考え出すことができる場合があります。たとえば、見出しは 15 語未満の行であり、ピリオドやピリオドは含まれていませんこれは新聞の名前のようなもので混乱するでしょうが、うまくいけば、結果をひどく台無しにするほどの量の「見出し以外の」テキストが後に続くことはありません.

これは、すべての記事を連続させたテキストへの変換に依存しています (生の列を切り取って記事を混ぜ合わせるのではなく)。それらが混同されている場合、可能性はほとんどないと思います.書式設定を維持するPDFライブラリを見つけることができたとしても、記事の「境界ボックス」を構成するものを判断するのは必ずしも簡単ではありません. たとえば、多くの論文では、非常に高度なヒューリスティックでさえも混乱させる可能性のあるコールアウトやその他の機能を配置しています。

実際にカウントを行うのは簡単です。私が言及した仮定が成り立つ場合、おそらく次のようになります。

import re
import string

non_word_re = re.compile(r"[^-\w']+")

article = ""
for filename in list_of_text_files:
    with open(filename, "r") as fd:
        for line in fd:
            # Split line on non-word characters and lowercase them for matching.
            words = [i.lower() for i in non_word_re.split(line)
                     if i and i[0] in string.ascii_letters]
            if not words:
                continue
            # Check for headline as the start of a new article.
            if len(words) < 15 and "." not in line:
                if article:
                    # Process previous article
                    handle_article_word_counts(article, counts)
                article = line.strip()
                counts = {}
                continue
            # Only process body text within an article.
            if article:
                for word in words:
                    count[word] = count.get(word, 0) + 1
    if article:
        handle_article_word_counts(article, counts)
    article = ""

handle_article_word_counts()必要なデータのインデックス作成を行うように定義する必要がありますが、各キーはcounts潜在的なキーワードになります ( andandなどを含むtheため、最も頻繁に使用される単語などを削除する必要がある場合があります)。

基本的には、結果をどれだけ正確にしたいかによって異なります。上記は公正な概算を提供する可能性があると思いますが、既に述べたすべての仮定と注意事項があります。たとえば、見出しが複数の行にまたがることが判明した場合は、上記のヒューリスティックを変更する必要があります. うまくいけば、少なくとも構築するための何かが得られるでしょう.

于 2013-01-12T08:14:48.367 に答える