Ich erstelle einen invertierten Index von Textdateien, die lokal mit verschachtelten Wörterbüchern gespeichert sind. Eine abstrakte Struktur des invertierten Index ist darunter (die Werte sind ganze Zahlen). In jedem Wort ist der Wert von Schlüssel '0' der IDF und der Wert von Schlüssel '1' ist der Tf.TypeError: List-Indizes müssen Ganzzahlen oder Slices sein, nicht Str bei verschachtelten Wörterbüchern
inverted_index={'word1':{'0':idf_value, '1': 2 , 'filename1': frequency_value, 'filename2': frequency_value},'word2':{'0':idf_value, '1': 2, 'filename1': frequency_value, 'filename2': frequency_value}}
Und das ist der Code:
import textract, math, os
docs=[]
#Read the files and store them in docs
folder = os.listdir("./input/")
for file in folder:
if file.endswith("txt"):
docs.append ([file,textract.process("./input/"+file)])
inverted_index={}
for doc in docs:
words=doc[1].decode()
words=words.split(" ")
#loop through and build the inverted index
for word in words:
temp={}
#to remove initial white space
if (word == " ") or (word==""):
continue
if word not in inverted_index:
temp[doc[0]]=1
temp['0']=0 #idf
temp['1']=1 #tf
inverted_index[word]=temp
else:
if doc[0] not in inverted_index[word].keys():
inverted_index[word][doc[0]]=1
inverted_index[word]['1']=inverted_index[word]['1']+1
else:
inverted_index[word][doc[0]]=inverted_index[word][doc[0]]+1
# to sort and print values with calculating the the tf and idf on the fly
for key, value in sorted(inverted_index.items()): # to sort words alphabitically
inverted_index[key]=sorted(inverted_index[key]) # to sort the filenames where the word occured.
inverted_index[key]['0']=math.log2(len(docs)/value['1']) # the error in this line
print(key, value)
aber ich habe diesen Fehler in der vorletzten Zeile:
Traceback (most recent call last):
File "aaaa.py", line 34, in <module>
inverted_index[key]['0']=math.log2(len(docs)/value['1'])
TypeError: list indices must be integers or slices, not str
Können Sie mir bitte helfen beheben dieser Fehler. Danke
Bitte schreiben Sie die volle 'Traceback' – ksai
Sind die Werte der inverted_index Listen? Wenn ja, könnte inverted_index [key] ['1'] das Problem sein. Versuchen Sie, die Indizes in dieser Zeile von '1' nach 1 und '0' nach 0 zu ändern, ohne die Anführungszeichen. Im Wesentlichen besagt der Fehler, dass wenn Sie eine Liste 'a = [1, 2, 3]' haben, können Sie auf Elemente der Liste zugreifen, indem Sie 'a [0]' und nicht 'a ['0' ] '. Zeichenindizes sind nicht erlaubt. –
Ich kenne den Inhalt von 'inverted_index' nicht, aber nach einem Fehler try Ändern von' value ['1'] 'in' value [1] 'in der letzten zweiten Zeile. – ksai