Python: создание функции подсчета определенных слов в текстовом файле - PullRequest
0 голосов
/ 21 октября 2019

Я хочу создать функцию, которая возвращает значение количества слов определенного слова в текстовом файле.

Вот что у меня сейчас есть:

def Word_Counter(Text_File, Word):

    Data = open(Text_File, 'r').read().lower()

    count = Data.count(Word)


    print(Word, "; ", count)

Word_Counter('Example.txt', "the")

, которое возвращает: "the; 35 "

Это почти то, что я хочу. Но что, если я захочу проверить текст на диапазон слов? Я хочу слова (ключ) и значения в скажем, список или словарь. Как это можно сделать без использования модулей?

Скажите, если я проверил функцию с этим списком слов: [время, когда, слева, я, да, кто, что, иногда].

Результаты, которые я хотел бы получить, были бы примерно такими:

Word Counts = {'time': 1, 'when': 4, 'left': 0, 'I': 5, 'do': 2, 'an': 0, 'who': 1, 'what': 3, 'sometimes': 1}

Мне удалось создать словарь, который подсчитывает количество слов для каждого слова, как в примере ниже.

wordfreq = {}
for word in words.replace(',', ' ').split():
   wordfreq[word] = wordfreq.setdefault(word, 0) + 1

Я хотел бы сделать похожий стиль, но только для конкретных слов, какие-нибудь предложения?

Ответы [ 3 ]

0 голосов
/ 21 октября 2019

Вы можете использовать Regex для идентификации слов, объект Counter для подсчета количества слов всех слов и понимание словаря для получения нужного результата.

import re
from collections import Counter

text = "That is pretty much what I want it to do. But what if I want to test a text for a range of words. I want the words (key) and values in say a list or dictionary. What's a way of doing that without using modules?"
word_list = ['time', 'when', 'left', 'I', 'do', 'an', 'who', 'what', 'sometimes']

word_counts = Counter(re.findall(r"[\w']+", text))
word_dict = {word: word_counts[word] for word in word_list}
print(word_dict)

Вывод:

{'time': 0, 'when': 0, 'left': 0, 'I': 3, 'do': 1, 'an': 0, 'who': 0, 'what': 2, 'sometimes': 0}
0 голосов
/ 21 октября 2019

ОБНОВЛЕНИЕ

Попробуйте следующее:

keywords = ['the', 'that']
worddict = {}

with open('out.txt', 'r') as f:
    text = f.read().split(' ')  # or f.read().split(',')

for word in text:
    worddict[word] = worddict[word]+1 if word in worddict else 1

print([{x, worddict[x]} for x in keywords])
0 голосов
/ 21 октября 2019

Из вашего приведенного кода я не проверял это.

def Word_Counter(Text_File, word_list):

        Data = open(Text_File, 'r').read().lower()
        output = {}
        for word in word_list:
           output[word] = Data.count(Word)

Или вы можете сделать это

text = open("sample.txt", "r") 

# Create an empty dictionary 
d = dict() 

# Loop through each line of the file 
for line in text: 
    # Remove the leading spaces and newline character 
    line = line.strip() 

    # Convert the characters in line to  
    # lowercase to avoid case mismatch 
    line = line.lower() 

    # Split the line into words 
    words = line.split(" ") 

    # Iterate over each word in line 
    for word in words: 
        # Check if the word is already in dictionary 
        if word in d: 
            # Increment count of word by 1 
            d[word] = d[word] + 1
        else: 
            # Add the word to dictionary with count 1 
            d[word] = 1
...