首页 > 解决方案 > 从两列(标签、文本)数据源进行文本分类从哪里开始?

问题描述

我们收到来自第三方的滥用投诉。我已经以 XML 格式导出了一整套投诉,然后将它们编译到 pandas DataFrame() 中,同时清除电子邮件地址、主机名、URL 和 IP 地址等内容,如下所示。

文件“learning_data.txt”由数千行组成,每行如下所示:

<label>:<a long string of text>

到目前为止的脚本

#!/usr/bin/env python

import pandas as pd


def main():
    data = open('learning_data.txt').readlines()

    print('Loading data...')
    labels, texts = ([], [])
    for line in data:
        label, text = line.split(':', 1)
        labels.append(label)
        texts.append(text)

    print('Adding to pandas DataFrame()')
    trainDF = pd.DataFrame()
    trainDF['label'] = labels
    trainDF['text'] = texts

    print(trainDF)


if __name__ == '__main__':
    main()

输出

                                                   label                                               text
8            Attacks and Reconnaissance__SSH Brute Force   Abuse from ... Dear Administrator,  We have d...
9                        Malicious Code/Traffic__Unknown    - [ Vulnerable Host in Canada] In support of...
10               Fraud__Copyright/Trademark Infringement   Unauthorized Use of Copyrights RE: TC--b--- *...
...                                                  ...                                                ...
43635                    Malicious Code/Traffic__Unknown   tdss report about ... last detected -- :: Sec...
43636                                    Fraud__Phishing   Issue : phishing attack at /// Dear Sir or Ma...

标签格式是 __ 因为我不希望进行多个分类,如果有的话。

我看到的所有机器学习和文本分类演示都使用了一些黑盒数据源,比如 20 个新闻组等。由于我是从自己的数据开始的,所以我很难将其纳入示例/教程。

编辑:我正在使用 Python 3.6.6

我从这里去哪里?

我应该使用 sklearn 还是其他库?火炬?如何从文本中制作特征并将其添加到标签中?如何写出学习到的数据,然后我可以使用另一个脚本来使用该数据集来预测新文本的标签?

我在这里从零开始学习机器学习,但我在 Python 中做了很多与机器学习无关的事情。

标签: pythonmachine-learning

解决方案


您可以使用 SKLearnCountVectorizerTF-IDF. 这是一种方法的粗略支出:

from sklearn.feature_extraction.text import CountVectorizer

from sklearn.ensemble import RandomForestClassifier  
from sklearn.preprocessing import LabelEncoder
from sklearn.model_selection import train_test_split

count_vect = CountVectorizer()

text = ['text1', ..] 

targets = ['abuse', ...]

matrix = count_vect.fit_transform(text)

encoder = LabelEncoder()
targets = encoder.fit_transform(targets)

randomForest = RandomForestClassifier()

randomForest.fit(matrix, targets)

推荐阅读