0

假设一个域有一个 url 列表,具有不同级别的路径深度和相似性

url1/some/where/here
url1/some/where-2/here
url1/some-3/where/here
...
...
url1/some/where/here/right/now/1
url1/some/where/here/right/now/2
url1/some/where/here/right/now/3
url1/some/where/here/right-1/now/1
url1/some/where/here/right-1/now/2
url1/some/where/here/right-1/now/3
url1/some/where/here/right-2/now/1
url1/some/where/here/right-2/now/2
url1/some/where/here/right-2/now/3
url1/some/where/here/right-2/now/4
...

我可以使用什么算法根据 URL 字符串的密度(斜杠数量)和相似性(文本距离,Levenshtein)来聚类 URL 字符串?

所以输出将被分组:

url1/some/where/here

url1/some/where-2/here

url1/some-3/where/here

url1/some/where/here/right/now/1
url1/some/where/here/right/now/2
url1/some/where/here/right/now/3

url1/some/where/here/right-1/now/1
url1/some/where/here/right-1/now/2
url1/some/where/here/right-1/now/3

url1/some/where/here/right-2/now/1
url1/some/where/here/right-2/now/2
url1/some/where/here/right-2/now/3
url1/some/where/here/right-2/now/4

url1/some-3/where/here/133

一些特征: - url 字符串越密集(或更深),它就越相关,并且可能在序列中重复。- 类似的网址块一个接一个地重复。不同的 url 似乎离大量相似的 url 更远。

DBSCAN 在这里合适吗?

(密度,LV 距离)

我想擦除最后一个字符直到斜线,然后在后续字符串中搜索匹配项。如果匹配是列表中的下一个 url,它们很可能是一个块。如果在列表的下方找到匹配项,则它可能不是任何块的一部分。

    url1/some/where
这几乎随处可见,因此不是任何块的一部分。

    url1/some/where/here/right/now/ 
找到 2 个后续匹配,在候选之后立即找到。

    url1/some/where/here/right-2/now/
找到 3 个随后出现的匹配项。所以它们被分块在一起。

    url1/some-3/where
在底部找到另一个匹配项,由于距离,它们都不是任何块的一部分。这种方法是否有名称或类似的名称?

4

1 回答 1

0

是的,试试 DBSCAN

我们没有您的数据,所以我们不知道它是否适合您。

但是DBSCAN(特别是Generalized DBSCAN)非常灵活且易于适应。在您的情况下,您将需要正式化您一直在讨论的大部分问题的相似性......考虑在斜杠处破坏 URL,然后将每个组件视为一个标记。这可能是最简单的方法。

无论如何:定义您想要的相似性,然后尝试 DBSCAN 和 OPTICS。也许在某个地方分享您的经验,以便下一个学生可以在此基础上再接再厉。尝试制作一些可共享的代码,并回馈社区;以您的名义获得信誉。

于 2014-01-02T19:26:18.140 回答