2017-03-21 1 views
0

Ich habe 8 Dokumente und ich lief TF-IDF darauf, um ein Array zu erhalten. Ich verstehe nicht, wie ich herausfinde, welches das beste Dokument für eine gegebene Eingabeabfrage ist?Beste Übereinstimmung für Eingabeabfrage von einer Reihe von Dokumenten

all_documents = [doc1, doc2, ...., doc7] 
sklearn_tfidf = TfidfVectorizer(norm='l2',min_df=0, use_idf=True, smooth_idf=False, sublinear_tf=True, tokenizer=tokenize) 
sklearn_representation = sklearn_tfidf.fit_transform(all_documents).toarray() 
+0

Mit dem besten Dokument meinst du das nächste Dokument zur Eingabe von Abfragen? Sie müssen 'TfidfVectorizer' anpassen, um eine Abfrage einzugeben und dann die Entfernung zum Vektor aus den 7 Dokumenten zu finden, die Sie haben (dies kann Kosinusabstand/euklidischer Abstand sein). – titipata

+0

@titipat danke für den Ansatz. Aber wie ich verstehe, sollte die Länge der Vektoren gleich sein, um irgendeinen der erwähnten Abstände zu finden. Wie werde ich das tun? – user3235169

Antwort

0

Verändern die Eingabe in tf-idf Format TfidfVectorizer verwenden. Sie können dann eine Entfernungsmetrik (Kosinus, euklidisch, Manhattan, ...) verwenden, um das Dokument zu berechnen, das Ihrer Eingabe am nächsten ist.

Jedes der Dokumente sollte dasselbe Vokabular verwenden. Ich nehme an, dass Ihre 8 Dokumentenvektoren die gleiche Länge haben? Das von Ihnen erstellte Objekt sklearn_tfidf verfügt über das Attribut vocabulary_, das alle Wörter enthält, die in den Vektoren verwendet werden. Ihre Eingabeabfrage sollte so reduziert werden, dass nur diese Wörter enthalten sind.

Beispiel

Document1: dogs are cute 
Document2: cats are awful 

führt zu einem Wortschatz von [dogs, cats, are, cute, awful]. Eine Abfrage, die andere Wörter als diese 5 enthält, kann nicht verwendet werden. Zum Beispiel, wenn Ihre Abfrage cute animals ist, hat die animals keine Bedeutung, weil es nicht in einem der Dokumente gefunden werden kann. Die Abfrage reduziert sich somit auf folgenden Vektor: [0,0,0,1,0] seit cute ist das einzige Wort, das in den Dokumenten gefunden werden kann.

+0

Danke für den Ansatz. Aber wie ich verstehe, sollte die Länge der Vektoren gleich sein, um irgendeinen der erwähnten Abstände zu finden. Wie werde ich das tun? – user3235169

+0

Jedes der Dokumente sollte dasselbe Vokabular verwenden. Ich nehme an, dass Ihre 8 Dokumentenvektoren die gleiche Länge haben? Das von Ihnen erstellte Objekt "sklearn_tfidf" hat ein Attribut "vokabular_", das alle Wörter enthält, die in den Vektoren verwendet werden. Ihre Eingabeabfrage sollte so reduziert werden, dass nur diese Wörter enthalten sind. – PinkFluffyUnicorn

+0

Ja, die Länge jedes Vektors ist 1058. Aber wie konvertiere ich die Eingabezeichenfolge in eine Länge von 1058 Größenvektor? – user3235169

Verwandte Themen