के साथ लेटेंट सेमेन्टिक विश्लेषण का उपयोग करें मैं एक स्क्रिप्ट लिखने की कोशिश कर रहा हूं जहां मैं कुछ दस्तावेजों की समानता की गणना करूंगा। मैं एलएसए का उपयोग कर ऐसा करना चाहता हूं। मुझे निम्नलिखित कोड मिला है और इसे थोड़ा सा बदल गया है। मेरे पास इनपुट 3 दस्तावेज़ हैं और फिर उनके बीच समानता के साथ 3x3 मैट्रिक्स आउटपुट के रूप में है। मैं वही समानता गणना करना चाहता हूं लेकिन केवल स्केलेर्न लाइब्रेरी के साथ। क्या यह संभव है?sklearn
मैं निम्नलिखित कोड चलाने के लिए, लेकिन मेरे मुंह अभी भी खुला :) है जब TFIDF एक ही विषय के साथ दो दस्तावेजों पर अधिकतम 80% समानता है, यह कोड दें:
from numpy import zeros
from scipy.linalg import svd
from math import log
from numpy import asarray, sum
from nltk.corpus import stopwords
from sklearn.metrics.pairwise import cosine_similarity
titles = [doc1,doc2,doc3]
ignorechars = ''',:'!'''
class LSA(object):
def __init__(self, stopwords, ignorechars):
self.stopwords = stopwords.words('english')
self.ignorechars = ignorechars
self.wdict = {}
self.dcount = 0
def parse(self, doc):
words = doc.split();
for w in words:
w = w.lower()
if w in self.stopwords:
continue
elif w in self.wdict:
self.wdict[w].append(self.dcount)
else:
self.wdict[w] = [self.dcount]
self.dcount += 1
def build(self):
self.keys = [k for k in self.wdict.keys() if len(self.wdict[k]) > 1]
self.keys.sort()
self.A = zeros([len(self.keys), self.dcount])
for i, k in enumerate(self.keys):
for d in self.wdict[k]:
self.A[i,d] += 1
def calc(self):
self.U, self.S, self.Vt = svd(self.A)
return -1*self.Vt
def TFIDF(self):
WordsPerDoc = sum(self.A, axis=0)
DocsPerWord = sum(asarray(self.A > 0, 'i'), axis=1)
rows, cols = self.A.shape
for i in range(rows):
for j in range(cols):
self.A[i,j] = (self.A[i,j]/WordsPerDoc[j]) * log(float(cols)/DocsPerWord[i])
mylsa = LSA(stopwords, ignorechars)
for t in titles:
mylsa.parse(t)
mylsa.build()
a = mylsa.calc()
cosine_similarity(a)
@ ogrisel के जवाब से मुझे 99.99% पी
dataset = [doc1,doc2,doc3]
vectorizer = TfidfVectorizer(max_df=0.5,stop_words='english')
X = vectorizer.fit_transform(dataset)
lsa = TruncatedSVD()
X = lsa.fit_transform(X)
X = Normalizer(copy=False).fit_transform(X)
cosine_similarity(X)
उपरोक्त में, एक्स का मूल्य क्या है जिसे आप समानता माप के रूप में विचार कर रहे हैं? –