如何构建算法来根据关键字对 HTML 页面进行分类?

Posted

技术标签:

【中文标题】如何构建算法来根据关键字对 HTML 页面进行分类?【英文标题】:How can I build an algorithm to classify an HTML page based on keywords? 【发布时间】:2011-11-09 08:13:45 【问题描述】:

我正在尝试创建一种算法,根据在页面上找到的关键字设置与网页的相关性。

我现在正在这样做:

我为它们设置了一些单词和一个值:"movie"(10), "cinema"(6), "actor"(5) "hollywood"(4) 并搜索页面的某些部分,为每个部分赋予权重并乘以单词权重。

示例:在 URL(1.5) * 10 和 title(2.5) * 10 中发现了 “电影”一词 = 40

这是垃圾!这是我的第一次尝试,它返回了一些相关的结果,但我认为由 244、66、30、15 之类的值确定的相关性没有用。

我想做一些在 0 到 1 或 1 到 100 范围内的事情。我可以使用哪种类型的词权重?

除此之外,除了主要内容之外,还有现成的算法可以根据 URL、关键字、标题等设置 html 页面的相关性?

编辑 1:所有这些都可以重建,权重是随机的,我想使用一些简洁的权重,而不是 ramdon 数字来表示权重,例如 10、5 和 3。

类似:low importance = 1medium importance = 2high importante = 4deterministic importance = 8

Title > Link Part of URL > Domain > Keywordsmovie > cinema> actor > hollywood

编辑 2: 目前,我想分析除页面的 body content 之外的单词的页面相关性。我将在分析中包括域、url 的链接部分、标题、关键字(以及我认为有用的其他元信息)。

原因是 HTML 内容是脏的。我可以在菜单和广告中找到很多像“电影”这样的词,但页面的主要内容不包含与主题相关的任何内容。

另一个原因是某些页面具有元信息,表明该页面包含有关电影的信息,但主要内容没有。示例:一个页面包含讲述历史、人物等的电影情节,但在该文本中没有提及任何可以表明这是关于电影的内容,只有页面元信息。

稍后,在对 HTML 页面进行相关性分析后,我将单独对内容(过滤后的)进行相关性分析。

【问题讨论】:

如果你能找出最大可能的相关值,你就可以得到分数,并使用最大值找到一个百分比,给你一个 1-100 的比例。 【参考方案1】:

将任何内容转换为 0-100 范围(对于任何正值 X)的简单方法:

(1-1/(1+X))*100

X 越大,值越接近 100。

但这并不能保证公平或正确的分配。这取决于您决定实际 X 值的算法。

【讨论】:

【参考方案2】:

您能否在搜索引擎中为这些文档编制索引?如果你是那么也许你应该考虑使用这个latent semantic library。

您可以从这里获取实际项目:https://github.com/algoriffic/lsa4solr

您要做的是确定文本语料库的含义,并根据其含义对其进行分类。然而,单词并不是单独唯一的,也不是从整篇文章中抽象出来的。

例如,假设您有一篇关于“Windows”的文章。这个词在一篇 300 字的文章中被使用了 7 次。所以你知道这很重要。但是,您不知道的是,它是在谈论操作系统“Windows”还是您浏览的内容。

然后假设您还看到诸如“安装”之类的词,那么这对您也没有任何帮助。因为人们在家里安装窗户就像安装 Windows 操作系统一样。但是,如果同一篇文章谈到碎片整理、操作系统、命令行和 Windows 7,那么您可以猜测该文档的实际含义是关于 Windows 操作系统。

但是,您如何确定这一点?

这就是潜在语义索引的用武之地。您要做的是提取整个文档文本,然后对该文档进行一些巧妙的分析。

您构建的矩阵 (see here) 远远超出我的想象,尽管我查看并使用了一些库,但我始终无法完全理解构建空间背后的复杂数学潜在语义分析未使用的感知矩阵......所以在我的建议中,我建议,只需使用现有的库为您执行此操作。

如果您不是在寻找外部库并且想自己做这个,很高兴删除这个答案

【讨论】:

看看我的第 2 版。您的回答将有助于我接下来的分析。谢谢。【参考方案3】:
your_sum / (max_score_per_word * num_words) * 100

应该可以。但是大多数时候你会得到非常小的分数,因为很少有单词会匹配那些分数不为零的单词。尽管如此,我没有看到替代方案。获得小分数并不是一件坏事:您将比较网页之间的分数。您尝试了许多不同的网页,然后您就可以弄清楚您的系统的“高分”是多少。

【讨论】:

【参考方案4】:

查看classifying webpages by topic 上的这篇博文,它讨论了如何实现与您的需求密切相关的东西。您如何定义场景中的相关性?无论您对不同的输入应用什么权重,您仍然会选择一个有些随意的值,一旦您清理了原始数据,您最好应用机器学习来为您生成分类器。如果相关性是一个标量值,这很困难,但如果它是一个布尔值(例如,一个页面与特定电影相关或不相关),这将是微不足道的。

【讨论】:

以上是关于如何构建算法来根据关键字对 HTML 页面进行分类?的主要内容,如果未能解决你的问题,请参考以下文章

AdaBoost元算法

SQL数据库中怎么让结果集分类汇总显示颜色

利用朴素贝叶斯分类算法对搜狐新闻进行分类(python)

如何使用分类器算法对单个文本进行分类

贝叶斯分类算法

我如何根据姓名、数字、金钱、日期等对文本中的单词进行分类?