Golang 判断 Web 页面相似度(XML/Json/HTML/RawText)
- 相同:指的是所有数据相同,XML/HTML 应该指节点,包括节点参数节点数据都相同;Json 指的是字段以及字段值相同,RawText 可以所有文本内容相同
- 相似:同样的类型文本,但是不相同;经过泛化之后,在一定程度(阈值)上保持相同/相似的特性。
如果 HTML 页面中存在动态内容(例如时间/日期等),通过一定的替换与文本处理,把这些动态内容移除,或者替换成相同的文本,以增大文本相似度,这种做法叫做泛化
- 日期格式泛化,例如 YYYY/MM/DD, YYYY-MM-DD 等格式
- UUID 泛化 (MD5)
- Unix 时间戳泛化
- 动态内容移除(参见 SQLmap 对相似页面的处理)
Json 有如下数据类型
- number
- bool
- null
- string
- array
- object
主要针对 Json Value 的部分进行泛化
可以暴力全局泛化,泛化后进行相似度比较,计算 simhash 或者其他操作