Во-первых, это домашнее задание, поэтому я бы просто хотел, чтобы вы предложили свои предложения. Я пишу программу, которая генерирует взвешенный инвертированный индекс. Весовым инвертированным индексом является словарь со словом в качестве ключа; значение представляет собой список списков с каждым элементом в списке, содержащим номер документа, и количеством раз, когда это слово появляется в документе.Python 3 Словарь для взвешенных инвертированных индексов
Например,
{"a": [[1, 2],[2,1]]}
The word "a" appears twice in document 1 and once in document 2.
Я практикую с двумя маленькими файлами.
file1.txt:
Where should I go
When I want to have
A smoke,
A pancake,
and a nap.
file2.txt:
I do not know
Where my pancake is
I want to take a nap.
Вот мой код программы:
def cleanData(myFile):
file = open(myFile, "r")
data = file.read()
wordList = []
#All numbers and end-of-sentence punctuation
#replaced with the empty string
#No replacement of apostrophes
formattedData = data.strip().lower().replace(",","")\
.replace(".","").replace("!","").replace("?","")\
.replace(";","").replace(":","").replace('"',"")\
.replace("1","").replace("2","").replace("3","")\
.replace("4","").replace("5","").replace("6","")\
.replace("7","").replace("8","").replace("9","")\
.replace("0","")
words = formattedData.split() #creates a list of all words in the document
for word in words:
wordList.append(word) #adds each word in a document to the word list
return wordList
def main():
fullDict = {}
files = ["file1.txt", "file2.txt"]
docNumber = 1
for file in files:
wordList = cleanData(file)
for word in wordList:
if word not in fullDict:
fullDict[word] = []
fileList = [docNumber, 1]
fullDict[word].append(fileList)
else:
listOfValues = list(fullDict.values())
for x in range(len(listOfValues)):
if docNumber == listOfValues[x][0]:
listOfValues[x][1] +=1
fullDict[word] = listOfValues
break
fileList = [docNumber,1]
fullDict[word].append(fileList)
docNumber +=1
return fullDict
То, что я пытаюсь сделать, это генерировать что-то вроде этого :
{"a": [[1,3],[2,1]], "nap": [[1,1],[2,1]]}
Что я получаю это:
{"a": [[1,1],[1,1],[1,1],[2,1]], "nap": [[1,1],[2,1]]}
Он записывает все вхождения каждого слова во всех документах, но он записывает повторы отдельно. Я не могу понять это. Любая помощь будет оценена! Заранее спасибо. :)
Возможно, счетчик может быть полезным https://docs.python.org/3.4/library/collections.html#collections.Counter – Marein