python 文本查重
时间: 2023-10-13 15:18:03 浏览: 115
文本查重可以使用余弦相似度来衡量两个文本的相似程度。可以按照以下步骤进行:
1. 对每个文本进行分词并去除停用词等无意义的词汇。
2. 统计每个文本中每个词汇出现的次数,得到两个文本的词频向量。
3. 计算两个文本的词频向量的余弦相似度,公式如下:
$$
similarity = \frac{\mathbf{A} \cdot \mathbf{B}}{\|\mathbf{A}\| \|\mathbf{B}\|}
$$
其中,A和B分别为两个文本的词频向量。
4. 根据余弦相似度的结果,判断两个文本是否相似。一般来说,如果余弦相似度大于0.8,就可以认为两个文本相似。
这里提供一个简单的 Python 代码实现:
``` python
import jieba
from collections import Counter
import math
def cosine_similarity(v1, v2):
"""
计算余弦相似度
"""
numerator = sum(v1[i] * v2[i] for i in range(len(v1)))
denominator = math.sqrt(sum(v1[i] ** 2 for i in range(len(v1)))) * math.sqrt(sum(v2[i] ** 2 for i in range(len(v2))))
return numerator / denominator
def preprocess(text):
"""
对文本进行预处理(分词、去除停用词等)
"""
stop_words = set(['的', '了', '是', '在', '我', '有', '和', '就', '不', '人', '都', '一', '一个', '上', '也', '很', '到', '说', '要', '去', '你', '会', '着', '没有', '看', '好', '自己', '这'])
words = [word for word in jieba.cut(text) if word.strip() and word not in stop_words]
return Counter(words)
def text_similarity(text1, text2):
"""
计算文本相似度
"""
counter1 = preprocess(text1)
counter2 = preprocess(text2)
words = set(counter1.keys()) | set(counter2.keys())
v1 = [counter1.get(word, 0) for word in words]
v2 = [counter2.get(word, 0) for word in words]
return cosine_similarity(v1, v2)
# 测试
text1 = "Python 文本查重的实现方法"
text2 = "Python 实现文本查重的方法"
print(text_similarity(text1, text2)) # 输出结果为 0.8660254037844386
```
注意,这只是一个简单的实现,实际应用中还需要考虑一些细节问题,比如如何处理编码、如何处理长文本等。