2015-04-09 4 views
-2

Я искал для решения этой проблемы, но я еще не нашел ее. У меня есть большой текстовый файл, который делится на предложения, разделенные только «.». Мне нужно подсчитать, сколько слов имеет каждое предложение и записать его в файл. Я использую отдельный файл для этой части коды и до сих пор у меня есть этотКак подсчитать слова в предложении текста в нескольких предложениях в python

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

С этим я получаю переменный типа «список» с каждым предложением в его собственном индексе. Я знаю, что если я напишу

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

Я получаю количество слов в первом предложении. Мне нужен какой-то цикл, чтобы получить количество слов в каждом предложении. После этого мне понадобится, чтобы эти данные были записаны в файл в форме: 1. номер индекса предложения в тексте, 2. количество слов в этом конкретном предложении, 3. количество слов в том же предложении в другой текст (который является переводом первого текста с использованием кода в отдельном файле), 4. количество слов, которые оба предложения имеют вместе. Любые идеи?

ответ

-1

Просто перечислить весь файл:

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

Благодарим вас за быстрый ответ, но этот бит подсчитывает количество событий каждого слова. Это не то, что я ищу ... – BLaZZeD

+0

@BLaZZeD Думаю, я исправил это. –

+0

Мне нужно количество слов в каждом предложении. Текстовый файл состоит из 1548 предложений, которые имеют разное количество слов. Поэтому я ищу петлю, чтобы узнать, сколько слов содержится в каждом из предложений 1548 и распечатать ее в виде печати («Предложение», «предложение», «есть», «число», «слова». – BLaZZeD

-1

Вам нужно проходным файл и читать построчно линии что-то вроде этого:

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

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

Чтобы получить список, где каждый элемент соответствует предложение:

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] 

Чтобы проверить, сколько слов имеет два предложения, вы должны использовать set operat ионов. Например:

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

Для файла io проверьте модуль csv и функцию записи. Постройте свои строки как список списков - проверьте zip - и затем подайте его в csv writer.

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

В скобках в def count_words_per_sentence() что я пишу? Если я пишу имя файла, то получаю недопустимую синтаксическую ошибку .... – BLaZZeD

+0

Я не совсем уверен, что понимаю. Вам следует передать файл имя как строка в 'count_words_per_sentence' - то есть' count_words_per_sentence ("father_goriot.txt") '. – jwilner

+0

nope .... Я получаю ошибку, описанную в приведенном выше комментарии. – BLaZZeD

0

После поиска вокруг некоторое время и более простое решение, я наткнулся на код, который дает мне частичный результат того, что я хочу. Количество слов в каждом предложении. Оно представлено списком номеров и это выглядит следующим образом:

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)) 

Но число неверно, потому что он также рассчитывает что-то другое. Поэтому для первого предложения я получаю результат из 40 вместо 38 слов. Как я могу это исправить.