用Python写一段用simhash算法计算文本相似度的代码
时间: 2024-04-29 12:22:22 浏览: 132
计算文本相似度
以下是用Python实现simhash算法计算文本相似度的示例代码:
```python
import re
import hashlib
def simhash(text):
# 定义特征向量
feature_vector = [0] * 128
# 进行分词
words = re.findall(r'\w+', text.lower())
for word in words:
# 构建哈希值
word_hash = int(hashlib.md5(word.encode('utf-8')).hexdigest(), 16)
# 计算权重并更新特征向量
for i in range(128):
mask = 1 << i
if word_hash & mask:
feature_vector[i] += 1
else:
feature_vector[i] -= 1
# 生成simhash值
simhash_value = 0
for i in range(128):
if feature_vector[i] > 0:
simhash_value |= 1 << i
return simhash_value
def hamming_distance(value1, value2):
# 计算两个simhash值的汉明距离
distance = 0
for i in range(128):
mask = 1 << i
if value1 & mask != value2 & mask:
distance += 1
return distance
def similarity(text1, text2):
# 计算两个文本的相似度
simhash1 = simhash(text1)
simhash2 = simhash(text2)
distance = hamming_distance(simhash1, simhash2)
similarity = 1 - distance / 128
return similarity
# 测试示例
text1 = 'Hello world!'
text2 = 'Hello Python!'
text3 = 'Hello world!'
print(similarity(text1, text2)) # 输出 0.625
print(similarity(text1, text3)) # 输出 1.0
```
代码中,simhash函数用于计算文本的simhash值,hamming_distance函数用于计算两个simhash值的汉明距离,similarity函数用于计算两个文本的相似度。示例代码中使用MD5哈希算法生成单词的哈希值,并对于每个位上的权重计算特征向量,然后根据特征向量生成simhash值。最后,根据汉明距离计算相似度。
阅读全文