Selon le format du texte que vous pourriez être en mesure de trouver une sorte d'heuristique qui identifie un titre - par exemple, il y a une ligne sur sa propre avec moins de 15 mots et il n'a pas contenir un caractère d'arrêt/période complet. Cela deviendra confus par des choses comme le nom du journal, mais j'espère qu'ils ne disposeront pas d'une quantité significative de texte "non-headline" après eux pour gâcher les résultats trop mal.
Cela dépend de la conversion en texte ayant laissé chaque article contigu (par opposition à simplement ripper des colonnes brutes et mélanger l'article). Si elles sont mélangées, je dirais que vous avez très peu de chance - même si vous pouvez trouver une bibliothèque PDF qui conserve la mise en forme, il n'est pas toujours facile de dire ce qui constitue la «boîte englobante» d'un article. Par exemple, de nombreux articles mettent des légendes et d'autres fonctionnalités qui peuvent perturber même une heuristique avancée.
En fait, le comptage est assez simple. Si les hypothèses que je l'ai mentionné la main, votre pourraient se retrouveront sans doute ressembler à:
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 = ""
Vous devrez définir handle_article_word_counts()
pour faire tout l'indexation des données que vous voulez, mais chaque clé counts
sera un mot-clé potentiel (y compris des choses comme and
et the
, de sorte que vous voudrez peut-être laisser tomber les mots les plus fréquents ou quelque chose comme ça).
Fondamentalement, cela dépend de la précision à laquelle vous voulez que les résultats soient. Je pense que le ci-dessus a une chance de vous donner une approximation juste, mais il a toutes les hypothèses et les réserves que j'ai déjà mentionné - par exemple, s'il s'avère que les titres peuvent couvrir des lignes, alors vous devrez modifier les heuristiques ci-dessus. J'espère que ça vous donnera quelque chose à construire, au moins.
Il n'y a pas d'outil raisonnable dans le monde Python pour faire ce que vous voulez. La plupart des outils suppriment les informations de mise en page et en plus: les boîtes de textes ne sont pas nécessairement liées entre elles pour avoir une idée de ce qui appartient à quoi. Il est possible que certains outils commerciaux coûteux, mais aucun outil approprié disponible en open-source. –