网页标签清洗

发布于 2022-09-05 09:54:20 字数 1006 浏览 13 评论 0

希望大佬能指点一二,小弟不胜感激
关于网页标签的清洗,在计算网页相似度的时候,哪些标签是可以过滤的,在这段代码生成的结果中

class Structure(HTMLParser):
    '''
    pass
    '''
    def extract(self, html):
        self.tmp = []
        tag = ['script','style'] 
        result = []
        self.tagstack = []
        self.feed(html)
        for a in self.tmp:
            if a.split('/')[-1] not in tag:
                result.append(a)
        return result

    def handle_starttag(self, tag, attrs):
        self.tagstack.append(tag)

    def handle_endtag(self, tag):
        self.tagstack.pop()

    def handle_data(self, data):
        t = ''
        if data.strip():
            for tag in self.tagstack:
                t = t + '/' + tag
            self.tmp.append(t)

这是某个网页通过这段代码生成的

用这个网页生成的结果举例,过滤/span/p结尾的标签,如果是其他的网页是不是也可以这么过滤,如果不是的话该怎么过滤,是不是还得考虑标签属性?
补充:计算的是网页结构相似度,不考虑正文相似度

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

━╋う一瞬間旳綻放 2022-09-12 09:54:20

假设你已经可以获得了网页标签结构,这里所说的标签结构指的是这样的情况
原网页A:

<html>

<head>
    <title>The Dormouse's story</title>
</head>

<body>
    <p class="title"><b>The Dormouse's story</b></p>

    <p class="story">Once upon a time there were three little sisters; and their names were
        <a href="http://example.com/elsie" class="sister" id="link1">Elsie</a>,
        <a href="http://example.com/lacie" class="sister" id="link2">Lacie</a> and
        <a href="http://example.com/tillie" class="sister" id="link3">Tillie</a>; and they lived at the bottom of a well.</p>

    <p class="story">...</p>
</body>

</html>

替换后B:

<html>

<head>
    <title> </title>
</head>

<body>
    <p class="title"><b> </b></p>

    <p class="story">
        <a href="http://example.com/elsie" class="sister" id="link1"> </a>
        <a href="http://example.com/lacie" class="sister" id="link2"> </a>
        <a href="http://example.com/tillie" class="sister" id="link3"> </a> </p>

    <p class="story"> </p>
</body>

</html>

当然,如果你可以的话也可以忽略标签属性。比如C这样:

<html>

<head>
    <title> </title>
</head>

<body>
    <p><b> </b></p>

    <p>
        <a> </a>
        <a> </a>
        <a> </a> </p>

    <p> </p>
</body>

</html>

假设网页D:

<html>

<head>
    <title> </title>
</head>

<body>
    <p><a> </a></p>

    <p>
        <b> </b>
        <b> </b>
        <b> </b> </p>

    <p> </p>
</body>

</html>

基于以上的假设,来探讨问题,我想你需要的是有两个B类型或者C的文本,进行相似度判断。那么,我推荐你用simhash或者余弦相似性来做。
simhash,嗯广泛用于论文查重和网络爬虫里面。而余弦相似性在NLP里面属于较为容易入门的算法。
使用余弦相似性的算法,应该先考虑停止词。对于C类型的标签来说,可以忽略的我想不应该是script这种标签。而是html,head,title,body,mate这种大多数网页都会有的标签。这对于判断没有任何作用。
接下来统计一下其他标签的数目:

对于C
<p></p>6
<b></b>2
<a></a>6
对于D
<p></p>6
<a></a>2
<b></b>6

根据这一组数据绘制向量:

C:<p></p>:6 <b></b>:2 <a></a>6
D:<p></p>:6 <b></b>:6 <a></a>2
C:[6,2,6]
D:[6,6,2]

然后根据公式,算答案保留四位小数:0.7895
至于度量值如何需要有你自己来定~但是真的建议你使用simhash来做。

事件仓促= =有时间再来改排版填坑~

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文