zu implementieren Ich habe book.csv-Datei, die einige bibliographische Listen von Büchern besteht. Ich habe auch Benutzer-Tabelle in der Datenbank, die Benutzerinformationen benötigt. mein Ziel ist es, tf-idf, Kosinusähnlichkeit zwischen Benutzerinformationen brauchen aus der Datenbanktabelle als Abfrage und Buch.csv Reihe als Dokument und drucken die meisten ähnlichen Zeilen mit Benutzerinformationen brauchen, wenn Benutzer_Id eingefügt wird. also habe ich ein Problem beim Einstellen von CSV Raws als Dokument. jede Hilfe bitte mit diesem Fehler IndexError: list index out of range
. Das andere Problem ist, selbst wenn ich die rechte User_Id einfüge, werden Fehlermeldungen wiederholt, bis ich die Nummer dieses Benutzers erreicht habe. das heißt, wenn der Benutzer auf Platz 3 in der Datenbanktabelle ist habe ich wie diese hierPython: tf-IDF-Cosine: Wie Dokument Ähnlichkeit in CSV-Datei
insert User_Id
JU/MF3024/04
no such User exist
insert User_Id
JU/MF3024/04
insert User_Id
JU/MF3024/04
no such User exist
Fit Vectorizer to train set [[0 1]
[1 0]]
Transform Vectorizer to test set [[0 0]
[0 0]
dreimal versucht, ist meine Implementierung Code in Python 2.7.11. Früher habe ich einige Codes von Python: tf-idf-cosine: to find document similarity
from sklearn.feature_extraction. text import CountVectorizer
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.feature_extraction.text import TfidfTransformer
from sklearn.metrics.pairwise import cosine_similarity
from sklearn.metrics.pairwise import linear_kernel
import numpy as np
import numpy.linalg as LA
import pandas as pd
from nltk.corpus import stopwords
from collections import defaultdict
import csv
import mysql.connector as sql
from mysql.connector import connection
with open("Book.csv", "rb") as books:
reader = csv.reader(books, delimiter =',')
reader. next()
count = 0
docs = {}
for row in reader:
docs = row[1].split()#I want to consider each row as document similar to train set on the above linked post
query = "" # like test_set on the above post
config = {'user': 'root', 'password': '[email protected]', 'host': '127.0.0.1','database': 'juls', 'raise_on_warnings': True,}
db = ql.connect(**config)
cursor = db.cursor()
query = "SELECT * FROM user"
cursor.execute(query)
result = cursor.fetchall()
for r in result:
User_Id = r[0]
First_Name = r[1]
Last_Name = r[2]
College = r[3]
Department = r[4]
Info_need = r[5]
email = r[6]
print "insert User_Id"
Id = str(raw_input())
if Id not in User_Id:
print "no such User exist"
pass
elif Id =="":
print "User ID is blank"
pass
else:
query = "SELECT Info_need from user WHERE User_Id = '%s'" % Id
cursor.execute(query)
stopWords = set(stopwords.words('english'))
vectorizer = CountVectorizer(stop_words = stopWords)
transformer = TfidfTransformer()
trainVectorizerArray = vectorizer.fit_transform(docs).toarray()
testVectorizerArray = vectorizer.transform(query).toarray()
print 'Fit Vectorizer to train set', trainVectorizerArray
print 'Transform Vectorizer to test set', testVectorizerArray
cx = lambda a, b : round(np.inner(a, b)/(LA.norm(a)*LA.norm(b)), 3)
for vector in trainVectorizerArray:
for testV in testVectorizerArray:
cosine = cx(vector, testV)
transformer.fit(trainVectorizerArray)
transformer.fit(testVectorizerArray)
tfidf = transformer.transform(testVectorizerArray)
print tfidf.todense()
tfidf_vectorizer = TfidfVectorizer()
tfidf_matrix_train = tfidf_vectorizer.fit_transform(docs)
print "RANKED TF-IDF"
print tfidf[0:1]
cosine_similarities = linear_kernel(tfidf[ 0: 1], tfidf). flatten()
print cosine_similarities
related_docs_indices = cosine_similarities.argsort()[:-5:-1]
print related_docs_indices
print cosine_similarities[related_docs_indices]
print docs[14]
Wenn Sie eine andere Frage haben, bitte [Neue Frage] (http://stackoverflow.com/ Fragen/Fragen). Antworten sollten nur für Beiträge verwendet werden, die die Frage beantworten. – JAL
Sehr geehrte JAL, Es ist wirklich die Antwort für meine Frage. aber Entschuldigung! wenn meine Frage in der Post nicht klar ist –