python3对象没有属性错误

时间:2019-05-13 09:44:34

标签: python-3.x

尝试从我的笔记本的DocSim.py文件中调用calculate_similarity2函数时出现错误。

错误消息是:'DocSim' object has no attribute 'calculate_similarity2'

这是我的docsim文件的内容:

import numpy as np

class DocSim(object):
    def __init__(self, w2v_model , stopwords=[]):
        self.w2v_model = w2v_model
        self.stopwords = stopwords





    def vectorize(self, doc):
        """Identify the vector values for each word in the given document"""
        doc = doc.lower()
        words = [w for w in doc.split(" ") if w not in self.stopwords]
        word_vecs = []
        for word in words:
            try:
                vec = self.w2v_model[word]
                word_vecs.append(vec)
            except KeyError:
                # Ignore, if the word doesn't exist in the vocabulary
                pass

        # Assuming that document vector is the mean of all the word vectors
        # PS: There are other & better ways to do it.
        vector = np.mean(word_vecs, axis=0)

        return vector


    def _cosine_sim(self, vecA, vecB):
        """Find the cosine similarity distance between two vectors."""
        csim = np.dot(vecA, vecB) / (np.linalg.norm(vecA) * np.linalg.norm(vecB))
        if np.isnan(np.sum(csim)):
            return 0
        return csim

    def calculate_similarity(self, source_doc, target_docs=[], threshold=0):
        """Calculates & returns similarity scores between given source document & all
        the target documents."""
        if isinstance(target_docs, str):
            target_docs = [target_docs]

        source_vec = self.vectorize(source_doc)
        results = []
        for doc in target_docs:
            target_vec = self.vectorize(doc)
            sim_score = self._cosine_sim(source_vec, target_vec)
            if sim_score > threshold:
                results.append({
                    'score' : sim_score,
                    'sentence' : doc
                })
            # Sort results by score in desc order
            results.sort(key=lambda k : k['score'] , reverse=True)

        return results

    def calculate_similarity2(self, source_doc=[], target_docs=[], threshold=0):
    """Calculates & returns similarity scores between given source document & all the target documents."""
        if isinstance(source_doc, str):
            target_docs = [source_doc]
            if isinstance(target_docs, str):
                target_docs = [target_docs]
                #source_vec = self.vectorize(source_doc)
                results = []
                for doc in source_doc:
                    source_vec = self.vectorize(doc)
                    for doc1 in target_docs:
                        target_vec = self.vectorize(doc)
                        sim_score = self._cosine_sim(source_vec, target_vec)
                        if sim_score > threshold:
                            results.append({
                                'score' : sim_score,
                                'source sentence' : doc,
                                'target sentence' : doc1
                            })
                        # Sort results by score in desc order
                        results.sort(key=lambda k : k['score'] , reverse=True)
        return results

当我尝试调用功能时在指令代码中:

要创建DocSim对象

ds = DocSim(word2vec_model,stopwords=stopwords)

sim_scores = ds.calculate_similarity2(source_doc, target_docs)

错误消息是:

---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-54-bb0bd1e0e0ad> in <module>()
----> 1 sim_scores = ds.calculate_similarity2(source_doc, target_docs)

AttributeError: 'DocSim' object has no attribute 'calculate_similarity2'

我不了解如何解决此问题。

我可以访问除calculate_similarity2之外的所有功能

你能帮我吗?

谢谢

1 个答案:

答案 0 :(得分:1)

您已经在calculate_similarity2范围内定义了__init__函数。尝试将其撤出