80

我想从Python 中的网页中提取特定类型的信息。让我们说邮政地址。它有数千种形式,但仍然可以以某种方式识别。由于形式众多,编写正则表达式甚至语法之类的东西并使用解析器生成器解析出来可能会非常困难。

所以我认为我应该走的路是机器学习。如果我理解得很好,我应该能够制作一个数据样本,我将在其中指出应该是什么结果,然后我可以从中学习如何自行识别结果。这就是我对机器学习的全部了解。也许我可以使用一些自然语言处理,但可能并不多,因为所有的库都主要使用英语,而捷克语需要这个。

问题:

  1. 我可以通过机器学习轻松解决这个问题吗?这是一个好方法吗?
  2. 有什么简单的例子可以让我开始吗?我是机器学习菜鸟,我需要一些实用的东西来开始;离我的问题越近越好;越简单越好。
  3. 有很多用于机器学习的 Python 库。哪一个最适合我的问题?
  4. 许多这样的库都没有非常易于使用的文档,因为它们来自科学环境。是否有任何好的资源(书籍、文章、快速入门)弥合差距,即专注于对机器学习一无所知的新手?我打开的每个文档都以我不理解的术语开头,例如networkclassificationdatasets等。

更新:

正如你们都提到的,我应该展示一段我试图从网络中获取的数据,这里有一个例子。我对电影放映时间感兴趣。它们看起来像这样(其中三个):

<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 …&lt;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 标记中没有特殊规则,顺序没有特殊规则等。

4

7 回答 7

77

首先,您的任务适合研究的信息提取领域。此任务主要有 2 个复杂程度:

  • 从给定的 html 页面或具有固定模板的网站(如亚马逊)中提取。在这种情况下,最好的方法是查看页面的 HTML 代码并制作相应的 XPath 或 DOM 选择器以获取正确的信息。这种方法的缺点是它不能推广到新网站,因为你必须为每个网站一个一个地做。
  • 创建一个模型,从一个域内的许多网站中提取相同的信息(假设网页设计师呈现相应属性的方式存在一些固有的规律性,如 zip 或 phone 或其他任何东西)。在这种情况下,您应该创建一些功能(使用 ML 方法并让 IE 算法“理解页面内容”)。最常见的特征是:DOM 路径、要提取的值(属性)的格式、布局(如粗体、斜体等)以及周围的上下文词。您标记一些值(根据域,您至少需要 100-300 页才能以某种合理的质量进行操作)。然后在标记的页面上训练模型。还有一种替代方法 - 以无监督的方式进行 IE(利用跨页面信息规律性的想法)。

总体而言,最具挑战性的部分将是使用 DOM 树并生成正确的特征。以正确的方式标记数据也是一项乏味的任务。对于 ML 模型 - 看看CRF、2DCRF、semi-markov CRF

最后,在一般情况下,这是 IE 研究的前沿,而不是你可以在几个晚上完成的 hack。

ps 我也认为 NLTK 不会很有帮助 - 它是一个 NLP,而不是 Web-IE 库。

于 2012-11-18T20:41:18.423 回答
15

tl;dr:这个问题可能可以使用 ML 解决,但如果您是该主题的新手,这并不简单


python 有很多机器学习库:

  • Scikit-learn对于初学者来说是非常流行的通用用途,非常适合处理小型数据集的简单问题。
  • Natural Language Toolkit实现了许多算法,其中许多与语言无关(例如,n-gram)
  • Gensim非常适合文本主题建模
  • Opencv实现了一些常用的算法(但通常用于图像)
  • SpacyTransformers实现了现代(最先进,截至 2020 年)文本 NLU(自然语言理解)技术,但需要更熟悉复杂的技术

通常你会选择一个适合你的问题和你想要使用的技术的库。

机器学习是一个非常广阔的领域。仅针对监督学习分类子问题,并且仅考虑“简单”分类器,有朴素贝叶斯、KNN、决策树、支持向量机、前馈神经网络……这个列表不胜枚举。这就是为什么,正如您所说,一般来说没有“快速入门”或机器学习教程。我的建议是,首先,了解基本的 ML 术语,其次,了解一个子问题(我建议在监督学习中进行分类),第三,研究一个解决这个子问题的简单算法KNN依赖于高中水平的数学)。

特别是关于您的问题:您似乎想检测一个巨大的数据集(文本)中是否存在一段数据(邮政编码)。经典的分类算法需要一个相对较小的特征向量。为此,您需要进行所谓的降维操作:这意味着,隔离看起来像潜在邮政编码的部分。只有这样分类算法才会对其进行分类(例如,“邮政编码”或“非邮政编码”)。

因此,在考虑使用 ML 解决此问题之前,您需要找到一种方法来隔离潜在匹配项。正如您所说,如果您不使用或不能使用正则表达式或解析,这肯定需要自然语言处理。

NLU 中更高级的模型可能会解析您的整个文本,但它们可能需要非常大量的预分类数据,并且解释它们超出了本问题的范围。我之前提到的库是一个好的开始。

于 2012-11-12T00:09:12.083 回答
8

据我所知,有两种方法可以使用机器学习方法来完成这项任务。

1.使用计算机视觉训练模型,然后根据您的用例提取内容,这已经由diffbot.com 实现。 他们还没有开源他们的解决方案。

2.解决这个问题的另一种方法是使用监督机器学习训练二元分类器对内容与样板进行分类,然后提取内容。这种方法用于拖网。 以及围绕该领域的其他研究。您可以查看不同内容提取技术之间的基准比较。

于 2018-02-28T06:33:33.273 回答
5

首先,机器学习不是魔术。这些算法执行特定的任务,即使这些有时可能有点复杂。

任何此类任务的基本方法是生成一些具有合理代表性的标记数据,以便您可以评估自己的表现。“BOI”标签可以工作,为每个单词分配一个标签:“O”(外部)如果它不是您要查找的东西,“B”(开始)如果它是地址的开头,并且地址中所有后续单词(或数字或其他)的“I”。

第二步是考虑如何评估你的成功。发现地址的大部分是否重要,或者您是否还需要确切地知道事物是什么(邮政编码或街道或城市等)。然后,这会更改您视为错误的内容。

如果您希望命名实体识别器运行良好,您必须充分了解您的数据,并决定最适合这项工作的工具。这很可能是一系列正则表达式,其中包含一些关于如何组合结果的规则。我希望您能够通过相对简单的程序找到大部分数据。一旦你有一些简单的东西,你检查误报(结果不是你要找的东西)和漏报(你错过的东西),并寻找模式。如果您看到可以轻松解决的问题,请尝试一下。正则表达式的一个巨大优势是,它不仅可以更容易地将某些内容识别为地址的一部分,而且还可以检测它是哪一部分。

如果您想超越这一点,您可能会发现许多 NLP 方法在您的数据上表现不佳,因为“自然语言处理”通常需要看起来像(您猜对了)自然语言的东西来识别某物是什么。

或者,由于您可以将其视为分块问题,您可以使用最大熵马尔可夫模型。在这种情况下,这使用从一种类型的单词转换到另一种类型的概率来将文本分块为“地址的一部分”和“不是地址的一部分”。

祝你好运!

于 2017-03-02T16:58:07.027 回答
2

我建议你看看信息提取领域。很多人一直在研究如何完全按照您的要求进行操作。有一些信息提取技术是基于机器学习的,一些技术不是基于机器学习的。

如果不查看代表您要解决的问题的示例,就很难进一步发表评论(邮政地址在捷克语中的外观如何?)。

于 2012-11-12T00:17:46.283 回答
2

该方法需要是一种监督学习算法(通常,它们比无监督或半监督方法产生更好的结果)。另外,请注意,您基本上需要提取文本块。直观地说,您的算法需要这样说,“从这个字符开始,接下来的三行,是一个邮政地址”。

我觉得解决这个问题的一种自然方法是结合单词和字符级别的 n-gram 语言模型。建模本身可能非常复杂。正如 mcstar 所指出的,Cross Validated是了解这些细节的更好地方。

于 2012-11-13T18:20:25.600 回答
1

我已经为此建立了一个解决方案。我的目标是提取与互联网上可用的比赛相关的所有信息。我用了一个微调。我所做的是我检测到信息在网站上列出的模式。就我而言,它们在订单下方一一列出,我检测到使用 html 表格标签并获取与比赛相关的信息。

虽然这是一个很好的解决方案,但它适用于某些站点,而对于其他一些站点,相同的代码将不起作用。但是您只需要更改同一代码中的一些参数即可使其工作。

于 2017-03-02T13:37:30.973 回答