Я пытаюсь создать программу Python, которая читает два текстовых файла, один из которых содержит статью, а другой - список «стоп-слов» (по одному слову на каждой строке). Я хотел бы определить, сколько из этих «стоп-слов» находится в конкретном текстовом файле, который я использую (суммарная общая частота каждого «стоп-слова»), содержащего статью.Поиск общего количества «стоп-слов» в файле
Я попытался создать вложенные петли for
, чтобы сделать это, когда я просматриваю каждую строку файла, содержащего статью (внешний для цикла), и внутри каждой строки, имеющий цикл for (внутренний цикл), который перебирает список «стоп-слов» и видит, находится ли «стоп-слово» в текущей строке, и если да, то как часто. В конце я добавляю, как часто слово находится в текущей строке с аккумулятором, который будет отслеживать общую кумулятивную сумму стоп-слов, найденных в файле, содержащем статью.
В настоящее время, когда я запускаю его, он говорит, что в файле есть 0 стоп-слов, что неверно.
import string
def main():
analyzed_file = open('LearnToCode_LearnToThink.txt', 'r')
stop_word_file = open('stopwords.txt', 'r')
stop_word_accumulator = 0
for analyzed_line in analyzed_file.readlines():
formatted_line = remove_punctuation(analyzed_line)
for stop_word_line in stop_word_file.readlines():
stop_formatted_line = create_stopword_list(stop_word_line)
if stop_formatted_line in formatted_line:
stop_word_frequency = formatted_line.count(stop_formatted_line)
stop_word_accumulator += stop_word_frequency
print("there are ",stop_word_accumulator, " words")
stop_word_file.close()
analyzed_file.close()
def create_stopword_list(stop_word_text):
clean_words = [] # create an empty list
stop_word_text = stop_word_text.rstrip() # remove trailing whitespace characters
new_words = stop_word_text.split() # create a list of words from the text
for word in new_words: # normalize and add to list
clean_words.append(word.strip(string.punctuation).lower())
return clean_words
def remove_punctuation(text):
clean_words = [] # create an empty list
text = text.rstrip() # remove trailing whitespace characters
words = text.split() # create a list of words from the text
for word in words: # normalize and add to list
clean_words.append(word.strip(string.punctuation).lower())
return clean_words
main()
Я предлагаю заменить внутренний цикл цикла на 'stop_word_count + = sum (map (cleaned_line.count, stop_words))' (возможно, заменить 'map' на' imap'). Есть ли причина, по которой вы проверяли, присутствовало ли слово до вызова 'count'? –
Хорошо, я попробую это из @jonrsharpe и сообщит вам, если это сработает, и если он не заболел, отправьте код того, что я пересмотрел, до – heyyo9028
@AlexHall в основном, чтобы он был достаточно близко к тому, что было в настоящее время OP пытаясь сделать! Это лишь незначительно менее эффективно, чем то, что вы предлагаете, и действительно вы можете сделать это только с одним проходом над каждой строкой, если вы используете словари. – jonrsharpe