テキストの形式によっては、見出しを特定するある種のヒューリスティックを考え出すことができる場合があります。たとえば、見出しは 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
潜在的なキーワードになります ( and
andなどを含むthe
ため、最も頻繁に使用される単語などを削除する必要がある場合があります)。
基本的には、結果をどれだけ正確にしたいかによって異なります。上記は公正な概算を提供する可能性があると思いますが、既に述べたすべての仮定と注意事項があります。たとえば、見出しが複数の行にまたがることが判明した場合は、上記のヒューリスティックを変更する必要があります. うまくいけば、少なくとも構築するための何かが得られるでしょう.