6

识别 HTML 页面上的结构化数据的最佳算法是什么?

例如,Google 会识别电子邮件中的家庭/公司地址,并提供该地址的地图。

4

9 回答 9

11

诸如GATE之类的命名实体提取框架至少解决了位置的信息提取问题,并辅以已知地点的地名录来帮助解决常见问题。除非页面是从公共来源机器生成的,否则您会发现正则表达式对于这项工作来说有点弱。

于 2008-12-08T11:59:09.940 回答
4

如果你有正确的标记——而不仅仅是页面上的文本——我支持上面的 Beautiful Soup 建议。特别是,地址标签应提供最低的低垂果实。还要查看adr 微格式。如果前两个没有提取足够的信息或者我没有必要的数据来查找前两个,我只会退回到正则表达式。

于 2008-12-08T12:07:39.080 回答
3

如果您还必须处理国际地址,那么您将进入一个令人头疼的世界;国际地址格式千差万别。

于 2008-12-08T09:23:38.397 回答
3

我猜谷歌对这个问题采取了两步走的方法(至少我会这样做)。首先,他们使用一些相当通用的搜索模式来挑选可能是地址的所有内容,然后他们使用他们的地图数据库查找该字符串并查看是否有任何匹配项。如果他们这样做,它可能是一个地址,如果他们不这样做,它可能不是。如果您可以在代码中使用地图数据库,那可能会让您的生活更轻松。

除非您可以限制地址的地理位置,否则我猜想仅通过解析将字符串识别为地址几乎是不可能的,这仅仅是因为世界各地使用的地址格式存在巨大差异。

于 2008-12-08T11:34:10.787 回答
2

不要使用正则表达式。使用现有的 HTML 解析器,例如在 Python 中我强烈推荐BeautifulSoup。即使您使用正则表达式来解析 BeautifulSoup 抓取的 HTML 元素。

如果你用自己的正则表达式来做,你不仅要担心找到你需要的数据,你还要担心无效的 HTML 之类的事情,以及许多其他你会偶然发现的非常不明显的问题。

于 2008-12-08T10:16:13.360 回答
1

如果你想让它变得完美,你所问的确实是一个相当困难的问题。虽然一个简单的正则表达式在大多数情况下大部分时间都是正确的,但编写一个每次都能完全正确的正则表达式非常困难。有很多奇怪的极端案例,在某些情况下,没有一个明确的答案。我见过的大多数网站在处理除了最简单的 URL 之外的所有内容都做得很糟糕。

如果你想走正则表达式路线,最好的办法可能是查看 http://metacpan.org/pod/Regexp::Common::URI::http的源代码

于 2008-12-08T10:06:34.707 回答
0

同样,正则表达式应该可以解决问题。

由于地址种类繁多,您只能通过“(数字),(名称)街道|大道|主”等表达式来猜测字符串是否为地址

您可以考虑查看一些 Firefox 扩展,这些扩展旨在映射在文本中找到的地址,以了解它们是如何工作的

于 2008-12-08T09:56:26.443 回答
0

您可以查看这个美国提取示例http://code.google.com/p/graph-expression/wiki/USAAddressExtraction

于 2011-05-20T05:23:27.260 回答
0
  1. 这取决于您的要求。

对于电子邮件和联系方式,正则表达式绰绰有余。对于地址,单独的正则表达式将无济于事。想想 NLP(NER) 和 POS 标记。要查找与人相关的信息,如果没有 NER,您将无法做任何事情。

  • If you need information like paragraphs get the contents by using tags.
于 2017-07-27T14:14:09.873 回答