2015-04-09 1 views
-2

J'ai cherché une solution à ce problème mais je ne l'ai pas encore trouvé. J'ai un grand fichier texte qui est divisé en phrases, séparées seulement par "." J'ai besoin de compter combien de mots chaque phrase a et l'écrire dans un fichier. J'utilise un fichier séparé pour cette partie du code et jusqu'à présent je cetteComment compter les mots dans une phrase d'un texte en plusieurs phrases en python

tekst = open('father_goriot.txt','r').read() 
    tekst = tekst.split('.') 

Avec cela, je reçois une variable de type « liste » avec chaque phrase dans son propre index. Je sais que si j'écris

print len(tekst[0].split()) 

Je reçois le nombre de mots dans la première phrase. Ce dont j'ai besoin, c'est d'une sorte de boucle pour obtenir le nombre de mots dans chaque phrase. Après cela, j'aurais besoin que ces données soient écrites dans un fichier sous une forme: 1. numéro d'index de la phrase dans un texte, 2. nombre de mots dans cette phrase particulière, 3. nombre de mots dans la même phrase dans un texte différent (qui est une traduction du premier texte en utilisant du code dans un fichier séparé), 4. le nombre de mots que les deux phrases ont en commun. Des idées?

Répondre

-1

énumérer seulement le fichier entier:

import re 

with open('data.txt') as data: 
    for line, words in enumerate(data): 
     args = line + 1, re.split(r'[!?\.\s]+', words) # formatter 
     print('Sentence at line {0} has {1} words.'.format(*args)) 
+0

Merci pour une réponse rapide mais ce bit compte le nombre d'occurrences de chaque mot. Ce n'est pas ce que je cherche ... – BLaZZeD

+0

@BLaZZeD Je pense que je l'ai réparé. –

+0

J'ai besoin du nombre de mots dans chaque phrase. Le fichier texte se compose de 1548 phrases qui ont un nombre différent de mots. Je cherche donc une boucle pour trouver le nombre de mots de chacune des 1548 phrases et je l'imprime sous forme d'impression ("Phrase", phrase_index, "has", number_of_words, "mots". – BLaZZeD

-1

Vous devez faire une boucle dans le fichier et la ligne lue par une ligne comme celle-ci:

file = open('file.txt', 'r') 

for line in file: 
    do something with the line 
-1

Pour obtenir une liste dans laquelle chaque élément correspond à la une phrase:

def count_words_per_sentence(filename): 
    """ 
    :type filename: str 
    :rtype: list[int] 
    """ 
    with open(filename) as f: 
     sentences = f.read().split('.') 
    return [len(sentence.split()) for sentence in sentences] 

Pour tester le nombre de mots que deux phrases ont en commun, vous devez utiliser set operat ions. Par exemple:

words_1 = sentence_1.split() 
words_2 = sentence_2.split() 
in_common = set(words_1) & set(words_2) # set intersection 

Pour le fichier io, consultez le module csv et la fonction d'écriture. Construisez vos lignes sous la forme d'une liste de listes (consultez zip), puis envoyez-les à l'auteur de csv.

word_counts_1 = count_words_per_sentence(filename_one) 
word_counts_2 = count_words_per_sentence(filename_two) 
in_common = count_words_in_common_per_sentence(filename_one, filename_two) 
rows = zip(itertools.count(1), word_counts_1, word_counts_2, in_common) 
header = [["index", "file_one", "file_two", "in_common"]] 
table = header + rows 

# https://docs.python.org/2/library/csv.html 
with open("my_output_file.csv", 'w') as f: 
    writer = csv.writer(f) 
    writer.writerows(table) 
+0

Entre parenthèses à def count_words_per_sentence(), que puis-je écrire? Si j'écris le nom du fichier, j'obtiens une erreur de syntaxe invalide .... – BLaZZeD

+0

Je ne suis pas certain de comprendre. nommer comme une chaîne de 'count_words_per_sentence' - ie' count_words_per_sentence ("father_goriot.txt") '. – jwilner

+0

non .... Je reçois une erreur décrite dans le commentaire ci-dessus. – BLaZZeD

0

Après avoir cherché pendant un moment et pour une solution plus simple, je suis tombé par hasard sur un code qui me donne un résultat partiel de ce que je veux. Le nombre de mots dans chaque phrase. Il est représenté par une liste de nombres et il ressemble à ceci:

wordcounts = [] 
    with open('father_goriot.txt') as f: 
     text = f.read() 
     sentences = text.split('.') 
     for sentence in sentences: 
      words = sentence.split(' ') 
      wordcounts.append(len(words)) 

Mais le nombre est incorrect car il compte aussi quelque chose de plus. Donc, pour la première phrase, je reçois un résultat de 40 au lieu de 38 mots. Comment puis-je réparer cela.