Сучасна диджитал-освіта для дітей — безоплатне заняття в GoITeens ×
Mazda CX 5
×

Класифікація веб сторінок

Підписуйтеся на Telegram-канал «DOU #tech», щоб не пропустити нові технічні статті

Потрібно класифікувати веб сторінки blog(article), forum, landing, product, other по html коду. Прикладів мало, по 100 на кожен клас.

Які фічі характерні для кожного класу з точки зору вебу?

Наприклад, для product знайшов shop, product, cart, price.

👍ПодобаєтьсяСподобалось0
До обраногоВ обраному0
LinkedIn
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

Там каша страшна, хотілося б руку веб професіонала, щоб почистити правильно.
Інше питання, як html код правильно токенізувати, і чим?

Перефразую питання. Припустимо я хочу класифікувати тексти на китайській.
1. Я не можу використати стандартний токенайзер як для англійської, оскільки структура мови інша. Для логосилабічного письма є спеціальний токенайзер.
2. Китайська має свій набір stop words.
3. Китайська має свій аналог лемітизації/стемінгу.

Тепер, як ці три пункти реалізувати для html коду?
Або як привести html код до вигляду де між ключовими словами стоять ’ ’ або \n?

Это шум — только регуляризует нейронку или алгоритм кластеризации при обучении.

Так, якщо в мене тисячі прикладів на клас, а якщо то 100 то це приводить до прокляття розмірності.

Навіть не думай про те, щоб вручну страдати підбором фіч.

Це реально задача на 10хв.

Береш Python з такими бібліотеками BeautifulSoup, sklearn, xgboost.

Пишеш досить простий препроцесінг своїх html’оьок. Саме просте — взяти тупо весь текст і викинути теги, тобто отримуєш одну довгу строку з усім текстом. Тобто з:

<html>
<head>
<title>hello world!</title>
</head>
<body>
<h1>header</h1>
some text
</body>
</html>

стане
hello world! header some text

Трошки умніше — не просто одну строку, а ще й додаси тег, в якому ця штука зустрілась, наприклад так:

hello world! header some text tag:title_hello tag:title_world! tag:h1_header tag:body_some tag:body_text

Тепер нехай у тебе є X — ліст строк предопрацьованих документів, y — ліст міток (чисел від 0 до кількість_класів-1).

X = [
  "hello world! header some text tag:title_hello ...",
  "another document! ...",
]
y = [0, 1, ...]
далі наприклад так:
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=0)
pipe = Pipeline([('cnt_vectorizer', CountVectorizer()), ('xgb', XGBClassifier())])
pipe.fit(X_train, y_train)
в принципі готово. вивести теперішній скор:
print(pipe.score(X_test, y_test))
оцінити новий документи:
print(pipe.predict(["your new document"])
отримаєш клас, але набагато краще зробити так, щоб отримати імовірності кожного класу:
print(pipe.predict_proba(["your new document"])

А, ну і з pipe’а може видрати xgb classifier, в нього є feature_importances_ які тобі скажуть які самі корисні фічі виявились.

upd1: sklearn’овий RandomForestClassifier і xgboost НАБАГАТО менш прожорливі до розміру датасету ніж всякі там нейронки.

upd2: Віталік правильну штуку сказав: там ще можна буде взяти TFIDFVectorizer замість CountVectorizer’а.

Трошки умніше — не просто одну строку, а ще й додаси тег, в якому ця штука зустрілась, наприклад так:

hello world! header some text tag:title_hello tag:title_world! tag:h1_header tag:body_some tag:body_text

Якраз це і потрібне, як це робиться в BeautifulSoup грамотно?

Сорі, це вже тобі самому прийдеться зробити :) Документації в інтернеті навалом.
python-scripts.com/...​sing#html-parsing-example

Що значить магія? Немає ніякої магії, BeautifulSoup це фронтенд до різних бібліотек парсінгу, включачи той же lxml: www.crummy.com/...​/doc/#installing-a-parser

Береш Python з такими бібліотеками

lxml

Не треба bs тягнути

Кстаті да. Норм порада — lxml, скоріш за все, хватить з головою. Але у мене тільки досвід з BS, тому нічого не казатиму.

якщо даних мало, то спробуйте щось з класики, наприклад наївний баєс з count vectorizer, або tf-idf vectorizer. воно все є готове в бібліотеці sklearn, самому майже нічого писати не треба, тому в найгіршому разі просто дарма потратите годину часу на експерименти.

Так, проблема в тому що потрібно розпарсити всю ту html кашу. Там зоопарк настільки різноманітний що 100 прикладів на клас мені не вистачає, тому хотілся би оперувати обмеженим набором ознак.

Ви хочете руками забити список ключових слів і використовувати як фічі?

Я хочу щоб веб розробники мені вказали на ці фічі, хто знає html.

ну ок. просто підхід вкрай дивний, от я і спитав.

Як класифікувати сторінку магазину, якщо на ній постійно присутній товар, корзина, перелік категорій, купа товарів з цінами?

З лендінгами все ще гірше — там все вищезгадане на одній

Якщо ви це робите в контексті ML-ish, то набирайте купу сторінок і кластеризуйте
Потім дивіться на кластери очима і вигадуйте їм назви

Якщо без, то заманаєтесь руками шукати ознаки
Теоретично нормальні сторінки мають мати мікроформати microformats.org/wiki/Main_Page
І по ним можна подумати, що автори думали про неї

Це в контексті ML. Набирати тисячі сторінок не варіант, довго і дорого.
Можливо веб дизайнери можуть вказати на якісь спільні особливості кожного з цих типів?

Дякую, я перепробую специфікатори з вікі.

Можливо веб дизайнери можуть вказати на якісь спільні особливості кожного з цих типів?

Це не буде ML

У вас немає іншого варіанту, як отримати дуже багато сторінок

Шукайте бази де вже пророблена робота по класифікації
Бази з просто сторінками — точно є

Шукайте бази де вже пророблена робота по класифікації
Бази з просто сторінками — точно є

Де?
Я знайшов список топ блогів і форумів на вікі. Більше половина лінків старі і не кроляться.

Пошукати на профільних підсайтах stackoverflow

Можливо знаєте де є база безкоштовних HTML Templates по розділах, і її можна скачати?

Щоб html коди скачати і з них витягувати ознаки.

На який біс вам ознаки?
Де ви їх використаєте в ML?

ми на певно різні ознаки маємо на увазі.
uk.wikipedia.org/...​Ознака_(машинне_навчання — будь який параметер який можна виміряти і потім використати для тренування ML моделі. Наприклад, частотність слів ’shop’, ’cart’, ’price’, ’author’, ’href’, ’?’ в html коді.

Наприклад, частотність слів ’shop’, ’cart’, ’price’, ’author’, ’href’, ’?’ в html коді.

Це одразу пролітає, якщо сторінка оброблена мініфікатором/uglifier

Якщо так вже не хочете питати на профільних ресурсах, то спробуйте помучити www.templatemonster.com/free-templates.php

А як знати що воан оброблена мініфікатором/uglifier, яка ознака цього? Мала кількість символів чи якісь ключові слова присутні в html коді?

яка ознака цього

нечитабельні css класи, що не використовуються в жодному фреймворку

а можна приклад кількох таких url?

Підписатись на коментарі