代码之家  ›  专栏  ›  技术社区  ›  Petr Petrov

Python:将文本分类

  •  1
  • Petr Petrov  · 技术社区  · 9 年前

    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
    

    这是两者之间的联系 url category 而且我还有测试集,我需要得到每个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 ,因为我认为,我只能用 网址 .

    1 回复  |  直到 9 年前
        1
  •  2
  •   Community Mohan Dere    9 年前

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

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

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

    简单的功能

    • 直到dot的第一个单词,例如:facebook代表“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
    

    更多解决方案来自 here 通过 Eiyrioü 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

    推荐文章