Пример #1
0
    def Probability(self, doc, dclass=""):
        """
        Calculates the probability for a class dclass given a document doc
        """

        if dclass:
            sum_dclass = self.sum_words_in_class(dclass)
            prob = 0

            d = Document(self.__vocabulary)
            d.read_document(doc)

            for j in self.__document_classes:
                sum_j = self.sum_words_in_class(j)
                prod = 1
                for i in d.Words():
                    wf_dclass = 1 + self.__document_classes[dclass].WordFreq(i)
                    wf = 1 + self.__document_classes[j].WordFreq(i)
                    r = wf * sum_dclass / (wf_dclass * sum_j)
                    prod *= r
                prob += prod * self.__document_classes[j].NumberOfDocuments() / self.__document_classes[dclass].NumberOfDocuments()
            if prob != 0:
                return 1 / prob
            else:
                return -1
        else:
            prob_list = []
            for dclass in self.__document_classes:
                prob = self.Probability(doc, dclass)
                prob_list.append([dclass, prob])
            prob_list.sort(key=lambda x: x[1], reverse=True)
            return prob_list
Пример #2
0
 def DocumentIntersectionWithClasses(self, doc_name):
     res = [doc_name]
     for dc in self.__document_classes:
         d = Document(self.__vocabulary)
         d.read_document(doc_name, learn=False)
         o = self.__document_classes[dc] & d
         intersection_ratio = len(o) / len(d.Words())
         res += (dc, intersection_ratio)
     return res
Пример #3
0
 def learn(self, directory, dclass_name):
     """
     directory is a path, where the files of the class with the name dclass_name can be found
     """
     x = DocumentClass(self.__vocabulary)
     dir = os.listdir(directory)
     for file in dir:
         d = Document(self.__vocabulary)
         print(directory + "/" + file)
         d.read_document(directory + "/" + file, learn=True)
         x = x + d
     self.__document_classes[dclass_name] = x
     x.SetNumberOfDocs(len(dir))
Пример #4
0
 def __init__(self, vocabulary):
     Document.__init__(self, vocabulary)
     self._number_of_docs = 0