2

我不是在谈论HTML标签,而是用于描述博客文章的标签,或者是YouTube网站上的视频或问题。智能地从博客和其他网页中提取标签

如果我只是抓取一个网站,我只是使用xpath来提取标签,或者如果它很简单,甚至是一个正则表达式。但我希望能够在我的extract_tags()函数中抛出任何网页并列出标签。

我可以想象使用一些简单的启发式方法,例如找到所有带有id或'tag'类的HTML元素等等。但是,这非常脆弱,并且可能会导致大量网页失败。你们推荐什么方法来解决这个问题?

另外,我知道Zemanta和Open Calais,它们都可以猜测一段文本的标签,但这与真人已经选择的提取标签不同。但我仍然喜欢听到任何其他服务/ API来猜测文档中的标签。

编辑:只是要清楚,一个已经为此工作的解决方案将是伟大的。但我猜测没有开源软件已经做到了这一点,所以我真的只是想听到人们对可能适用于大多数情况的可能方法。它不一定是完美的。编辑2:对于建议通常可行的通用解决方案的人是不可能的,并且我必须为每个网站/引擎编写自定义刮板,请考虑arc90 readability tool。这个工具能够以令人惊讶的准确度为网上任何给定的文章提取文章文本,使用某种启发式算法我相信。我还没有深入研究他们的方法,但它适合于一个小书签,并没有涉及太多。我明白提取文章可能比提取标签更简单,但它应该作为可能的例子。

回答

0

该死的,只是想建议开放加莱。没有“伟大”的方式来做到这一点。如果你有一些目标平台,你可以嗅探Wordpress,然后看到他们的链接结构,并再次为Flickr ...

+0

是的,但是这不太可能覆盖我想要爬行的网站的一半。我无法为每种可能的结构写一些东西:/ – ehsanul 2010-09-04 06:20:44

1

如果源暴露他们的数据作为饲料(RSS/Atom),那么你可能是能够从这个结构化数据中获取标签(或标签/类别/主题等)。

另一种选择是解析每个网页并查找根据rel=tag microformat格式化的标签。

+0

谢谢,不知道标签微格式。它似乎并没有太多的使用它,这是一个耻辱。 – ehsanul 2010-09-06 22:49:25

0

如果您发现通用解决方案,请告诉我们。我已经测试了许多工具(KapowTech,iMacros等),并且每个工具都要求您为每个网站定制您需要使用的“脚本”。

0

我认为你唯一的选择是为每个站点编写自定义脚本。尽管你可以看看AlchemyApi,让事情变得更容易。他们具有与OpenCalais相似的实体提取功能,但他们也有一个“Structured Content Scraping”产品,这比使用简单的视觉约束来识别网页片段来编写xpaths更容易。

0

这是不可能的,因为没有一个很好的知识,遵循规范。即使不同版本的相同引擎也可以创建不同的输出 - 嘿,使用WordPress的用户可以create his own markup

如果你真的有兴趣做这样的事情,你应该知道这将是一个非常耗时且正在进行的项目:你将创建一个能够检测到正在使用哪个“引擎”的库页面,并解析它。如果由于某种原因无法检测页面,则可以创建新的规则进行解析并继续前进。

我知道这不是你正在寻找的答案,但我真的看不到另一种选择。我使用Python,所以我会使用Scrapy,因为它是一个完整的抓取框架:它是完整的,有据可查的,真正可扩展的。

0

尝试制作Yahoo管道并通过Term Extractor模块运行源页面。它可能会也可能不会给出很好的结果,但是值得一试。注 - 启用V2引擎。

+0

这相当于使用Zemanta或Open Calais或Alchemy API或您自己的标记器和tf-idf值查找关键字。结果质量对我来说是一个重要问题。 – ehsanul 2010-09-17 00:07:42

+0

我正在尝试,我想知道如何启用V2引擎。我看到的只是这个(在URL中用V2代替V1,只是重定向到V1):http://developer.yahoo.com/search/content/V1/termExtraction.html – ehsanul 2010-09-17 03:40:45

+0

保存管道,然后转到页面显示结果的地方。启用V2的链接应该在左侧。 – Reinderien 2010-09-17 04:22:39

2

系统类似于通过查看诸如标签/文本比率和其他启发式方法等工作而给予工作的arc90示例。这些页面的文本内容与周围的广告/菜单等有足够的区别。其他示例包括可缩放电子邮件或地址的工具。这里有可以被检测到的图案,可以被识别的位置。在标签的情况下,虽然你没有太多的帮助你将标签与普通文本区分开来,但它只是一个词或短语,就像任何其他文本一样。侧边栏中的标签列表很难区分导航菜单。

像tumblr这样的一些博客的标签的URL中有“tagged”这个词,你可以使用它。 WordPress的标签类似地具有“.../tag/...”类型的URL。像这样的解决方案可以为大量博客工作,而不依赖于他们各自的页面布局,但他们无法在任何地方工作。

0

看着arc90,他们似乎也要求发布商使用语义上有意义的标记[请参阅https://www.readability.com/publishers/guidelines/#view-exampleGuidelines],以便他们可以相当容易地解析它,但大概他们必须要么开发了一个通用的规则,例如@dunelmtech建议的标签/文本比率,这可以与文章检测一起工作,或者他们可能会使用一些文本分割算法(来自自然语言处理领域),例如TextTiler和C99这可能是非常有用的文章检测 - 见http://morphadorner.northwestern.edu/morphadorner/textsegmenter/和谷歌的更多信息都在[学术文献发表 - 谷歌学者]。

然而,如果您需要检测“标签”是一个困难的问题(因为在上面评论中已经提到的原因),似乎似乎。我会尝试的一种方法是使用文本分割(C99或TextTiler)算法之一来检测文章开始/结束,然后查找包含..tag ..的ID属性的DIV/SPAN/ULs,其中包含..tag .. ,因为就页面布局的标签而言,这些标签通常位于文章的下方,并且位于评论Feed的正上方,这可能会令人惊讶地发挥出色。

无论如何,看看你是否有了标签检测的地方会很有趣。 Martin

编辑:我刚刚发现了一些可能真正有用的东西。该算法被称为VIPS [见:http://www.zjucadcg.cn/dengcai/VIPS/VIPS.html]并代表基于视觉的页面分割。它基于这样的想法,即页面内容可以被直观地分割成部分。与基于DOM的方法相比,由VIPS获得的片段在语义上更加集合。嘈杂的信息,例如导航,广告和装饰可以很容易地删除,因为它们通常放置在页面的特定位置。这可以帮助您非常准确地检测标签块!