Near-duplicate Detection(文章相似度计算)

该博客主要探讨了文本内容的相似度检测,包括Jaccard距离、余弦相似度以及SimHash和MinHash等方法。作者提到官方SimHash不支持中文,因此建议结合结巴分词进行关键词提取和权重计算来处理中文文本。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

近一个月主要研究文本内容的相似度


考虑的主要方法为:

jaccard distance

cosine similarity

simHash

minHash

some tricks:simple but efficient


simhash:

官方的simhash并不大支持中文:

中文版并不支持索引 没有索引的simhash不算simhash哈

因此直接利用官方的,加入结巴分词提取关键字及权重即可:

#simhash
def t2():
	
	cFile=open('7dataSingle.txt').read()
	lines=cFile.splitlines()
	
	initList=[]
	line =lines[0]
	line=line.split('\t')
	content=bs(line[2]).get_text().encode('utf-8')
	kwList=jcut.extract_tags(content,20,True)
	initList.append((line[0].strip(),Simhash(kwList)))

	index=SimhashIndex(initList,64,3)

	for line in lines:
		line=line.
### Duplicate 编译选项的意义 编译器中的 `-D` 或 `--define` 选项用于定义预处理器宏,在编译过程中这些宏会被替换为指定的值。当提到 “Duplicate” 的时候,通常是指复定义相同的宏,这可能会引起冲突或意外行为。 对于 C/C++ 编译而言,GCC 和 Clang 支持通过命令行参数来传递宏定义给预处理器。例如: ```bash gcc -DMY_MACRO=1 source.c -o output ``` 如果同一个宏被多次定义,则后面的定义会覆盖前面的定义[^1]。 ### 使用方法 为了防止复定义带来的问题,可以在 Makefile 中或者构建脚本里集中管理所有的宏定义,并确保不会无意间引入多个相同名称但不同值的宏定义。另外也可以利用条件编译技术来保护某些部分只在一个地方生效一次。 在实际项目中,可以通过如下方式检查已有的宏定义情况: ```bash cpp -dM /dev/null | grep MY_MACRO ``` 这条命令可以帮助确认当前环境中是否存在名为 `MY_MACRO` 的宏及其具体取值。 ### 解决方案 为了避免因复定义而引发的问题,建议采取以下措施之一: - **统一管理宏定义**:将所有必要的宏定义放在一个文件中并通过 `-include` 参数让编译器读取该文件。 - **使用未定义指令取消先前定义**:在新定义之前先取消之前的定义,比如使用 `#undef MACRO_NAME` 来清除旧版本的影响后再做新的定义[^3]。 - **采用不同的命名空间**:为避免名字冲突,考虑为宏名加上前缀或者其他形式的独特标识符以便区分来自不同模块之间的同名实体。 ```c #ifdef OLD_FEATURE_FLAG #undef OLD_FEATURE_FLAG #endif #define NEW_FEATURE_FLAG value ``` 上述代码片段展示了如何安全地置并设置一个新的特性标志而不影响其他可能存在的相同名称标记。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值