Подтвердить что ты не робот

Извлечение информации с веб-страницы путем машинного обучения

Я хотел бы извлечь определенный тип информации с веб-страниц в Python. Позвольте сказать почтовый адрес. У этого есть тысячи форм, но все же, это как-то узнаваем. Поскольку существует большое количество форм, было бы, вероятно, очень сложно написать регулярное выражение или даже что-то вроде грамматики и использовать генератор синтаксического анализа для синтаксического анализа.

Итак, я думаю, что я должен идти, это машинное обучение. Если я это хорошо понимаю, я должен сделать выборку данных, где я укажу, что должно быть результатом, а затем у меня есть что-то, что может извлечь из этого, как распознать результат сам по себе. Это все, что я знаю о механическом обучении. Возможно, я мог бы использовать некоторую обработку естественного языка, но, вероятно, не так много, поскольку все библиотеки работают с английским в основном, и мне это нужно для чешского языка.

Вопросы:

  • Могу ли я легко решить эту проблему путем машинного обучения? Это хороший способ пойти?
  • Есть ли простые примеры, которые позволили бы мне начать? Я изучаю машину noob, и мне нужно что-то практическое для начала; ближе к моей проблеме лучше; проще.
  • Существует множество библиотек Python для машинного обучения. Какой из них лучше всего подходит моей проблеме?
  • Многие из таких библиотек имеют не очень простые в использовании документы, поскольку они исходят из научной среды. Есть ли хорошие источники (книги, статьи, quickstarts), преодолевающие этот пробел, т.е. Сосредоточены на новичках, которые ничего не знают о машинах? Каждый документ, который я открываю, начинается с терминов, которые я не понимаю, таких как сеть, классификация, наборы данных и т.д.

Update:

Как вы все упомянули, я должен показать часть данных, которые я пытаюсь выйти из Интернета, вот пример. Меня интересуют кино-шоу. Они выглядят так (три из них):

<div class="Datum" rel="d_0">27. června – středa, 20.00
</div><input class="Datum_cas" id="2012-06-27" readonly=""><a href="index.php?den=0" rel="0" class="Nazev">Zahájení letního kina 
</a><div style="display: block;" class="ajax_box d-0">
<span class="ajax_box Orig_nazev">zábava • hudba • film • letní bar
</span>
<span class="Tech_info">Svět podle Fagi
</span>
<span class="Popis">Facebooková  komiksová Fagi v podání divadla DNO. Divoké písně, co nezařadíte, ale slušně si na ně zařádíte. Slovní smyčky, co se na nich jde oběsit. Kabaret, improvizace, písně, humor, zběsilost i v srdci.<br>Koncert Tres Quatros Kvintet. Instrumentální muzika s pevným funkovým groovem, jazzovými standardy a neodmyslitelnými improvizacemi.
</span>
<input class="Datum_cas" id="ajax_0" type="text">
</div>

<div class="Datum" rel="d_1">27. června – středa, 21.30
</div><input class="Datum_cas" id="2012-06-27" readonly=""><a href="index.php?den=1" rel="1" class="Nazev">Soul Kitchen
</a><div style="display: block;" class="ajax_box d-1">
<span class="ajax_box Orig_nazev">Soul Kitchen
</span>
<span class="Tech_info">Komedie, Německo, 2009, 99 min., čes. a angl. tit.
</span>
<span class="Rezie">REŽIE: Fatih Akin 
</span>
<span class="Hraji">HRAJÍ: Adam Bousdoukos, Moritz Bleibtreu, Birol Ünel, Wotan Wilke Möhring
</span>
<span class="Popis">Poslední film miláčka publika Fatiho Akina, je turbulentním vyznáním lásky multikulturnímu Hamburku. S humorem zde Akin vykresluje příběh Řeka žijícího v Německu, který z malého bufetu vytvoří originální restauraci, jež se brzy stane oblíbenou hudební scénou. "Soul Kitchen" je skvělá komedie o přátelství, lásce, rozchodu a boji o domov, který je třeba v dnešním nevypočitatelném světě chránit víc než kdykoliv předtím. Zvláštní cena poroty na festivalu v Benátkách
</span>
<input class="Datum_cas" id="ajax_1" type="text">
</div>

<div class="Datum" rel="d_2">28. června – čtvrtek, 21:30
</div><input class="Datum_cas" id="2012-06-28" readonly=""><a href="index.php?den=2" rel="2" class="Nazev">Rodina je základ státu
</a><div style="display: block;" class="ajax_box d-2">
<span class="Tech_info">Drama, Česko, 2011, 103 min.
</span>
<span class="Rezie">REŽIE: Robert Sedláček
</span>
<span class="Hraji">HRAJÍ: Igor Chmela, Eva Vrbková, Martin Finger, Monika A. Fingerová, Simona Babčáková, Jiří Vyorálek, Jan Fišar, Jan Budař, Marek Taclík, Marek Daniel
</span>
<span class="Popis">Když vám hoří půda pod nohama, není nad rodinný výlet. Bývalý učitel dějepisu, který dosáhl vysokého manažerského postu ve významném finančním ústavu, si řadu let spokojeně žije společně se svou rodinou v luxusní vile na okraji Prahy. Bezstarostný život ale netrvá věčně a na povrch začnou vyplouvat machinace s penězi klientů týkající se celého vedení banky. Libor se následně ocitá pod dohledem policejních vyšetřovatelů, kteří mu začnou tvrdě šlapat na paty. Snaží se uniknout před hrozícím vězením a oddálit osvětlení celé situace své nic netušící manželce. Rozhodne se tak pro netradiční útěk, kdy pod záminkou společné dovolené odveze celou rodinu na jižní Moravu…  Rodinný výlet nebo zoufalý úprk před spravedlností? Igor Chmela, Eva Vrbková a Simona Babčáková v rodinném dramatu a neobyčejné road-movie inspirované skutečností.
</span>

Или вот так:

<strong>POSEL&nbsp;&nbsp; 18.10.-22.10 v 18:30 </strong><br>Drama. ČR/90´. Režie: Vladimír Michálek Hrají: Matěj Hádek, Eva Leinbergerová, Jiří Vyorávek<br>Třicátník Petr miluje kolo a své vášni podřizuje celý svůj život. Neplánuje, neplatí účty, neřeší nic, co může<br>počkat  do zítra. Budování společného života s přételkyní je mu proti srsti  stejně jako dělat kariéru. Aby mohl jezdit na kole, raději pracuje jako  poslíček. Jeho život je neřízená střela, ve které neplatí žádná  pravidla. Ale problémy se na sebe na kupí a je stále těžší před nimi  ujet …<br> <br>

<strong>VE STÍNU&nbsp; 18.10.-24.10. ve 20:30 a 20.10.-22.10. též v 16:15</strong><br>Krimi. ČR/98´. Režie: D.Vondříček Hrají: I.Trojan, S.Koch, S.Norisová, J.Štěpnička, M.Taclík<br>Kapitán  Hakl (Ivan Trojan) vyšetřuje krádež v klenotnictví. Z běžné vloupačky  se ale vlivem zákulisních intrik tajné policie začíná stávat politická  kauza. Z nařízení Státní bezpečnosti přebírá Haklovo vyšetřování major  Zenke (Sebastian Koch), policejní specialista z NDR, pod jehož vedením  se vyšetřování ubírá jiným směrem, než Haklovi napovídá instinkt  zkušeného kriminalisty. Na vlastní pěst pokračuje ve vyšetřování. Může  jediný spravedlivý obstát v boji s dobře propojenou sítí komunistické  policie?&nbsp; Protivník je silný a Hakl se brzy přesvědčuje, že věřit nelze  nikomu a ničemu. Každý má svůj stín minulosti, své slabé místo, které  dokáže z obětí udělat viníky a z viníků hrdiny. <br><br>

<strong>ASTERIX A OBELIX VE SLUŽBÁCH JEJÍHO VELIČENSTVA&nbsp; ve 3D&nbsp;&nbsp;&nbsp; 20.10.-21.10. ve 13:45 </strong><br>Dobrodružná fantazy. Fr./124´. ČESKÝ DABING. Režie: Laurent Tirard<br>Hrají: Gérard Depardieu, Edouard Baer, Fabrice Luchini<br>Pod  vedením Julia Caesara napadly proslulé římské legie Británii. Jedné  malé vesničce se však daří statečně odolávat, ale každým dnem je slabší a  slabší. Britská královna proto vyslala svého věrného důstojníka  Anticlimaxe, aby vyhledal pomoc u Galů v druhé malinké vesničce ve  Francii vyhlášené svým důmyslným bojem proti Římanům… Když Anticlimax  popsal zoufalou situaci svých lidí, Galové mu darovali barel svého  kouzelného lektvaru a Astérix a Obélix jsou pověřeni doprovodit ho domů.  Jakmile dorazí do Británie, Anticlimax jim představí místní zvyky ve  vší parádě a všichni to pořádně roztočí! Vytočený Caesar se však  rozhodne naverbovat Normanďany, hrůzu nahánějící bojovníky Severu, aby  jednou provždy skoncovali s Brity. <br><br>

Или это может выглядеть как нечто подобное. Никаких специальных правил в разметке HTML, никаких специальных правил в порядке и т.д.

4b9b3361

Ответ 1

Во-первых, ваша задача вписывается в область исследований извлечения информации. Для выполнения этой задачи существует в основном 2 уровня сложности:

  • извлечение из данной страницы html или веб-сайта с фиксированным шаблоном (например, Amazon). В этом случае лучшим способом является просмотр кода HTML страниц и создайте соответствующие переключатели XPath или DOM для верните информацию. Недостатком такого подхода является то, что он не является обобщаемым для новых веб-сайтов, поскольку вы должны сделать это для каждый сайт один за другим.
  • создать модель, которая извлекает информации со многих веб-сайтов в пределах одного домена (с предположение, что существует некоторая неотъемлемая закономерность в способе дизайнеры представляют соответствующий атрибут, например, zip или телефон или что-то еще). В этом случае вы должны создать некоторые функции (использовать подход ML и позволить IE-алгоритму "понимать содержимое страниц" ). Наиболее распространенными функциями являются: путь DOM, формат извлекаемого значения (атрибута), макет (например, жирный, курсив и т.д.) И окружающие контекстные слова. Вы отмечаете некоторые значения (вам нужно как минимум 100-300 страниц в зависимости от домена, чтобы сделать это с каким-то разумным качеством). Затем вы обучаете модель на помеченных страницах. Существует и альтернатива - делать IE незаслуженно (используя идею информационной регулярности на разных страницах). В этом случае вы/ваш алгоритм пытается найти повторяющиеся шаблоны на страницах (без маркировки) и считайте их действительными, которые являются наиболее частыми.

Наиболее сложной частью в целом будет работа с деревом DOM и создание правильных функций. Также правильная маркировка данных - утомительная задача. Для моделей ML - посмотрите на CRF, 2DCRF, semi-markov CRF.

И, наконец, это в общем случае передний край в исследовании IE, а не взлом, что вы можете сделать это несколько вечеров.

p.s. также я думаю, что NLTK не будет очень полезен - это NLP, а не библиотека Web-IE.

Ответ 2

Что касается обработки естественного языка, если вы используете python, вы должны абсолютно проверить фантастику (IMHO, не связанный с ними) Natural Language Toolkit, который имеет реализации для множества алгоритмов, многие из которых являются языковыми агностиками (скажем, n-граммами).

Для рекомендации библиотеки машинного обучения в python я бы сказал, что это будет зависеть от того, какие методы вы хотите использовать, но opencv реализует некоторые распространенные алгоритмы. Машинное обучение - это обширная область очень. Только для подзадачи поднадзорной классификации есть Наивные Байесы, KNN, Деревья принятия решений, Машины поддержки Vector, по крайней мере, дюжина различных типов нейронных сетей... Список можно продолжать и продолжать. Вот почему, как вы говорите, нет "быстрых стартов" или учебников для машинного обучения в целом. Мой совет здесь, во-первых, в понять основную терминологию ML, во-вторых, понять подзадачу (я бы посоветовал классификацию с контролируемым обучением) и, в-третьих, изучите простой алгоритм, который решает эту подзадачу (KNN опирается на математику высокого уровня).

О вашей проблеме в частности: кажется, вы хотите обнаружить существование части данных (почтового кода) внутри огромного набора данных (текста), то есть AFAIK, а не типа проблемных ручек ML. Алгоритм классификации ожидает относительно небольшой вектор . Чтобы получить это, вам нужно будет сделать то, что называется уменьшение размерности: это означает, что изолировать часть, которая выглядит, как потенциальных почтовых кодов. Только тогда классификационный алгоритм классифицирует его (например, "почтовый код" или "не почтовый код" ).

Таким образом, вам нужно найти способ изолировать потенциальные совпадения, прежде чем даже подумать об использовании ML для решения этой проблемы. Это, безусловно, связано с обработкой естественного языка, как вы сказали, если вы не используете или не можете использовать регулярное выражение или синтаксический анализ.

Ответ 3

Обратите внимание: есть сайт обмена стеками, посвященный машинным обучению и статистическому анализу, называемый Cross Validated. Вы гораздо чаще найдете информацию, относящуюся к вашей проблеме, установленной там.

Хотя некоторые навыки программирования необходимы, машинное обучение как поле действительно является специальностью программирования и анализа данных. Он имеет свой "язык" и предполагает базовое понимание матричных операций и линейной алгебры в целом. Большая часть работы, которую должен выполнять специалист по ML, включает в себя манипулирование исходными данными в форме, с которой могут работать алгоритмы.

В Cross Cross Validated вы найдете людей, которые на самом деле решат эти проблемы ежедневно, но будьте готовы погрузиться в глубь кролика ML. Многому нужно научиться.

https://stats.stackexchange.com/

Ответ 4

Во-первых, машинное обучение - это не волшебство. Эти алгоритмы выполняют определенные задачи, даже если они иногда могут быть немного сложными.

Основной подход любой такой задачи состоит в том, чтобы генерировать некоторые разумно репрезентативные помеченные данные, чтобы вы могли оценить, насколько хорошо вы это делаете. Теги "BOI" могут работать, где для каждого слова вы назначаете ему метку: "O" (вне), если это не то, что вы ищете, "B" (начало), если это начало адреса, и "I" для всех последующих слов (или цифр или что-то еще) в адресе.

Второй шаг - подумать о том, как вы хотите оценить свой успех. Важно ли, чтобы вы обнаружили большую часть адреса, или вам также нужно точно знать, что это за предмет (почтовый индекс, улица или город и т.д.). Это затем изменяет то, что вы считаете ошибкой.

Если вы хотите, чтобы ваш распознаватель распознанного лица работал хорошо, вы должны хорошо знать свои данные и выбрать лучший инструмент для работы. Это может быть серия регулярных выражений с некоторыми правилами о том, как объединить результаты. Я ожидаю, что вы сможете найти большую часть данных с помощью относительно простых программ. Когда у вас есть что-то простое, что работает, вы проверяете ложные срабатывания (вещи, которые оказались не тем, что вы искали), и ложные негативы (вещи, которые вы пропустили), и ищите шаблоны. Если вы видите что-то, что вы можете легко исправить, попробуйте. Огромное преимущество регулярного выражения заключается в том, что гораздо легче не только распознать что-то как часть адреса, но и определить, какая часть он есть.

Если вы хотите выйти за рамки этого, вы можете обнаружить, что многие методы НЛП не очень хорошо работают с вашими данными, так как "Обработка естественного языка" обычно требует того, что выглядит (как вы уже догадались). Естественный язык, чтобы узнать, что-то есть.

В качестве альтернативы, поскольку вы можете рассматривать его как проблему с помехами, вы можете использовать Max Entropy Markov Models. Это использует вероятности перехода от одного типа слова к другому для фрагмента текста в "часть адреса" и "не часть адреса" в этом случае.

Удачи!

Ответ 5

Я бы предложил вам посмотреть в поле извлечения информации. Многие люди изучают, как делать именно то, что вы просите. Существуют некоторые методы для извлечения информации, основанные на машинном обучении, некоторые методы, которые не основаны на компьютерном обучении.

Трудно комментировать дальше, не глядя на примеры, представляющие проблему, которую вы хотите решить (как выглядит почтовый адрес на чешском языке?).

Ответ 6

Подход должен быть контролируемым алгоритмом обучения (как правило, они дают гораздо лучшие результаты, чем неконтролируемые или полуконтролируемые методы). Также обратите внимание, что вам нужно в основном извлекать фрагменты текста. Интуитивно, ваш алгоритм должен сказать что-то вроде "от этого персонажа вперед, для следующих трех строк, является почтовым адресом".

Я чувствую, что естественным способом приблизиться к этому будет комбинация языковых моделей n-грамматического уровня слов и символов. Само моделирование может быть безумно сложным. Как указано в mcstar, Cross Validated - лучшее место для ознакомления с этими деталями.

Ответ 7

Я построил решение именно для этого. Моя цель состояла в том, чтобы извлечь всю информацию, связанную с конкурсами, доступными в Интернете. Я использовал настройку. Я сделал то, что обнаружил шаблон, в котором информация указана на веб-сайтах. В моем случае они были перечислены один за другим ниже порядка, Я обнаружил, что используя теги таблицы html и получил информацию, связанную с соревнования.

Пока это хорошее решение, оно работает на каком-то сайте, а для некоторых других такой же код не работает. Но вам нужно изменить некоторые параметры в том же коде, чтобы он работал.