Как внедрить TF-IDF файла CSV в программу подсчета частоты - PullRequest
0 голосов
/ 24 октября 2019

Рассчитать и отобразить tf – idf слов в файле CSV. Используя в качестве примера CSV-файл с тремя столбцами для категорий и многими строками, программа должна вычислить и вывести 10 лучших слов в каждой категории на основе их значения tf – idf, их частоты в конкретной категории, деленной на их общую частоту в целом. список рассказов.

Вот моя программа, которая вычисляет частоту слов

В результате я получаю количество названий и количество слов в каждой категории.

#Import csv module.
import csv

#Counts words from a string.
def countWord(line):
    return (len(line.split()));

#Goal of program.
print ("This program takes a CSV file from the user and displays:")
print ("\t1. Counts number of headlines in each category")
print ("\t2. Counts number of words in each category")
print ("\t3. List of categories with number of titles and word count")
print ("\t4. Sort the category list based on number of titles from high to low")

#Prompt user to enter file.
print("Enter the file name: ")

filename = input()

#Counts titles.
newsDict = {}

#Counts words.
wordsDict = {}

#Try-except to handle reading error.
try:
    with open(filename, 'r') as file:
        reader = csv.reader(file)
        next(reader)

        #Loops through all lines. Increasing values by 1 if statement is true.
        for line in reader:
            if(line[2] in newsDict):
                newsDict[line[2]] = newsDict[line[2]] + 1
            else:
                newsDict[line[2]] = 1

            if(line[2] in wordsDict):
                wordsDict[line[2]] = wordsDict[line[2]] + countWord(line[0]) + countWord(line[1])

            else:
                wordsDict[line[2]] = countWord(line[0]) + countWord(line[1])


        #Displays the category, titles and words for each 
        print("%-15s | %-15s | %-15s" %("Category", "# of titles", "# of words"))

        #Sorts the values
        for key in sorted(newsDict.items(), key = lambda x : x[1], reverse=True):
            print("%-15s | %-15d | %-15d" %(key[0], newsDict[key[0]], wordsDict[key[0]]))

#Error message printed for interruption
except OSError as err:
    print("Failed to open the file. Please try again. Error detail: {0}".format(err))

Мой ожидаемый вывод должен выводить все категории в файле и первые 10 слов (слова с наибольшим значением tf – idf) в каждой категории. Примечание: частота должна быть основана на количестве разслово появляется в заголовках и подзаголовках историй (а не только в заголовках). Программа не знает, какие категории используются в файле или сколько историй в каждой. Мне нужно использовать словари и функцию lower ()

...