【问题标题】:Python: classify text into the categoriesPython:将文本分类
【发布时间】:2017-02-06 07:28:26
【问题描述】:

我有一部分训练集

url  category
ebay.com/sch/Mens-Clothing-/1059/i.html?_from=R40&LH_BIN=1&Bottoms%2520Size%2520%2528Men%2527s%2529=33&Size%2520Type=Regular&_nkw=Джинсы&_dcat=11483&Inseam=33&rt=nc&_trksid=p2045573.m1684 Онлайн-магазин
google.ru/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q=%D0%BA%D0%BA%D1%83%D0%BF%D0%BE%D0%BD%D1%8B%20aliexpress%202016  Search
google.ru/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#newwindow=1&q=%D0%BA%D1%83%D0%BF%D0%BE%D0%BD%D1%8B+aliexpress+2016    Search
google.ru/search?q=авито&oq=авито&aqs=chrome..69i57j0l5.1608j0j7&sourceid=chrome&es_sm=122&ie=UTF-8 Search
irecommend.ru/content/kogda-somnenii-byt-ne-mozhet-tolko-klear-blyu-pomozhet    Форумы и отзывы
ebay.com/sch/Mens-Clothing-/1059/i.html?_from=R40&LH_BIN=1&Bottoms%2520Size%2520%2528Men%2527s%2529=33&Size%2520Type=Regular&_dcat=11483&Inseam=33&_nkw=Джинсы&_sop=15  Онлайн-магазин
ebay.com/sch/Mens-Clothing-/1059/i.html?_from=R40&LH_BIN=1&Bottoms%2520Size%2520%2528Men%2527s%2529=33&Size%2520Type=Regular&_dcat=11483&Inseam=33&_nkw=Джинсы&_sop=15  Онлайн-магазин
irecommend.ru/content/gramotnyi-razvod-na-dengi-bolshe-ne-kuplyu-vret   Форумы и отзывы
google.ru/search?q=яндекс&oq=яндекс&aqs=chrome..69i57j69i61l3j69i59l2.1383j0j1&sourceid=chrome&es_sm=93&ie=UTF-8    Search
google.ru/search?q=авито&oq=авито&aqs=chrome..69i57j69i59j69i60.1095j0j1&sourceid=chrome&es_sm=93&ie=UTF-8  Search
otzovik.com/review_1399716.html#debug   Форумы и отзывы
svyaznoy.ru Онлайн-магазин
mvideo.ru/smartfony-sotovye-telefony/apple-iphone-2927  Онлайн-магазин
mvideo.ru/promo/rassrochka-0-0-12-mark24197850/f/category=iphone-914?sort=priceLow&_=1453896710474&categoryId=10    Онлайн-магазин
svyaznoy.ru/catalog/phone/224/tag/windows-phone Онлайн-магазин
google.it/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q=%D0%B5%D0%B2%D1%80%D0%BE%D1%81%D0%B5%D1%82%D1%8C    Search
vk.com   Social network

这是urlcategory 之间的连接 而且我有测试集,我需要为每个 url 获取类别。

url    
vk.com/topic-102849764_32295213
stats.stackexchange.com/questions/19048/what-is-the-difference-between-test-set-and-validation-set
google.ru/search?q=learning+sample&oq=learning+sample&aqs=chrome..69i57.4063j0j1&sourceid=chrome&ie=UTF-8#newwindow=1&q=machine+learning+test+and+learn
facebook.com
locals.ru
tvzvezda.ru/news/vstrane_i_mire/content/201609261038-k6n1.htm

我不知道,我应该使用什么算法来解决这个任务。 我需要最好的方法来获得最高的准确性。 而且我认为这是一个问题,我有多个类别。

我首先尝试解析html标签title,因为我认为,我只能用url来确定类别。

【问题讨论】:

    标签: python url machine-learning scikit-learn text-classification


    【解决方案1】:

    基本上,您会将字符串分类。因此,您将使用分类器。但是你不会只使用一个分类器,而是测试几个并选择最准确的。

    但首先,您必须考虑每个网址的功能。如果您只是将 url 作为字符串和唯一的功能提供,我希望您不会获得很高的准确性。

    您将预处理每个 url 以提取特征。相关/有用功能的选择很大程度上取决于领域。一个特征可能是:

    简单的功能

    • 直到点的第一个单词,例如:facebook for "facebook.com"

    • 整个字符串的长度

    复杂的功能

    假设您为每个集群定义关键字,例如为“在线购物”集群定义 [promo, buy, shop, sell, price],然后您可以计算每个集群中出现的关键字的数量集群作为特征

    因此,您必须首先继续特征工程,其次是比较分类器的性能。

    附加输入:

    Similiar question on SO (regarding URL features)

    Text feature extraction

    Fast Webpage Classification Using URL Features

    编辑:一个例子

    url = "irecommend.ru/content/kogda-somnenii-byt-ne-mozhet-tolko-klear-blyu-pomozhet"    
    
    f1  = len(url) = 76
    f2 = base = str(url).split("/",1)[0] = "irecommend.ru"
    f3 = segments = str(a).count("/") = 2
    

    hereEiyrioü von Kauyf 提供的更多解决方案

    import string
    count = lambda l1,l2: sum([1 for x in l1 if x in l2])
    
    f4 = count_punctuation = count(a,set(string.punctuation))
    f5 = count_ascii = count(a,set(string.ascii_letters))
    

    然而,所有这些示例都是非常简单的功能,并未涵盖 URL 的语义内容。根据目标变量(集群)的深度/复杂性,您可能需要使用基于 n-gram 的特征,例如 here

    【讨论】:

    • 什么是最好的?对 url 进行分类或从 html 页面获取 title 并尝试对其进行分类?
    • @PetrPetrov 你应该选择算法。最容易理解的是线性回归(需要调整参数,需要缩放,有时是数据采样),RandomForests(不需要任何超参数,它们不需要缩放),最近邻(需要调整邻居数量,非常简单整数参数)。还有几种众所周知的其他算法。选择最好的(具有最佳错误指标),调整超参数并获得具有所需精度的结果(在您的情况下,它是正确预测的类的百分比或更复杂的指标)。
    • 要找到最佳参数,请使用 GridSearchCV。
    • @PetrPetrov 通常线性回归适用于数字数据,而不是字符串。在您的情况下,您不使用回归,因为您想要分类。为此,请使用分类器。您应该输入的不是字符串,而是类别(将您的字符串转换为数字,每个数字都是数组的索引,其中所有字符串都是唯一的)。您应该将字符串参数转换为类别参数(实际上是整数)。该库不能直接处理字符串,我们需要整数或浮点数。
    • @PetrPetrov 您应该将 url、category 和 y 都转换为 real categories(正如 sklearn 所理解的,例如整数值)。可能你应该预处理你的网址,因为它有参数。可能应该删除您的部分网址。例如,可以删除参数以获取更多重复的 url,然后对其进行分类。
    猜你喜欢
    • 1970-01-01
    • 2016-02-26
    • 2018-07-03
    • 2019-03-09
    • 2018-09-04
    • 1970-01-01
    • 2016-06-14
    • 2016-10-02
    • 1970-01-01
    相关资源
    最近更新 更多