基于单个页面对多个文档进行分类

时间:2016-09-06 20:51:14

标签: python scikit-learn naivebayes

我试图找到分类单个页面的最佳方法,基于在一些独特文档上训练分类器/分类器(让我们说350)。 这些文档中的每一个都可以是1到n页长。可能有10到1000个样本可用于训练每个文档的分类器。 问题是,我有一个来自这些文档的随机页面(测试集与训练集不同),我想将页面归类为其中一个文档。 我以前曾尝试构建一个单独的分类器并获得了良好的结果,但测试集是整个文档,现在它是来自这些文档的页面。

我已经形成了一个我在下面描述的部分解决方案,但我希望有更好的建议并完善它。

  1. 使用scandir获取所有文件的列表。
  2. 创建每个文件的对象列表,其属性为path,sample_num,doc_type,json_data,preprocessed_data。
  3. 通过删除标点符号,数值,停用词,词干以及返回单词列表及其频率来预处理所有json数据。
  4. 为每个唯一文档创建一个功能列表,此列表主要是' n'该文件中最常出现的词语。
  5. 将数据拆分为70:30进行培训和测试,每个文档在培训集中有70%的文档,在测试集中有30%的文档。 (Splitting a list of file names in a predefined ratio

    #all_doc_types is a dictionary with unique documents and their total counts as key-value pairs
    def split_data(sampleObjList):
        trainingData = []
        testData = []
        temp_dict = {}
    
        for x in sampleObjList:
            ratio = int(0.7*all_doc_types[x.doc_type])+1
            if x.doc_type not in temp_dict:
                temp_dict[x.doc_type] = 1
                trainingData.append(x)
            else:
                temp_dict[x.doc_type] += 1
                if(temp_dict[x.doc_type] < ratio):
                    trainingData.append(x)
                else:
                    testData.append(x)
    
    return trainingData, testData 
    
  6. 格式化fit函数的训练数据,形成与目录中每个文档对应的1和0的列表。在特定文档的单词与其对应的特征列表匹配之后进行该列表。如果特征列表中的a在文档中出现1,反之亦然。
  7. 类似地预测功能的格式测试数据。
  8. 培训与每个文档相对应的唯一模型

    classifier = GaussianNB()
    for docType in trainingData:
        fit = classifier.fit(trainingData[docType], [docType]*len(trainingData[docType]))
        filename = 'NB_classifier_'+docType+'.pickle'
        f = open(filename, 'wb')
        pickle.dump(classifier, f)
        f.close()
    
  9. 测试由给定唯一文档中随机选择的单页组成的测试数据。

  10. 我可以轻松地通过我训练过的每个模型运行测试数据集,但是我无法知道哪个是我将该测试页面分类的文档,因为我会有多个模型返回一个积极的结果。因此,我希望将Naive Bayes模型组合在一起,而不是单独的二元分类器,或者找到一种方法来获得最佳结果作为从多个二元分类器得到的结果解集的输出。

    我在询问之前进行了搜索,这些是最接近的结果 -

    我无法弄清楚是否将这两个用于我的具体问题。

    非常感谢任何帮助。

    注意:我之前遇到过一段糟糕的经历,人们在没有理由的情况下对我的问题进行了贬低,问题恰好是Splitting a list of file names in a predefined ratio。如果在我们每天都学习之后能够得到任何此类downvote的反馈,那将非常有用。

0 个答案:

没有答案