一个小工具,计算两个句子的相识度
### 识别两个句子的复杂度- 支持从一个列表中找出相识度最高的句子
- 支持识别两个句子的复杂度
#### 使用方法:
##### 方法1:
> 从一个列表中找出相识度最高的句子,返回下标,相识度最高的句子,相识度
```python
sentences = [
"我喜欢吃香蕉。",
"今天的天气真糟糕!",
"我在山区度假。",
"学习历史很有趣。",
"我喜欢猫。",
"明天我要去公园。",
"我最喜欢的颜色是蓝色。",
"我正在读一本关于科学的书。",
"我喜欢听流行音乐。",
"我正在学习法语语言。"
]
# 使用方法1:
print(find_most_similar_sentence_index(sentences, "香蕉是我最喜欢的"))
```
结果:
```python
(0, '我喜欢吃香蕉。', 1.0000000000000002)
```
##### 方法2:
>识别两个句子的复杂度
```python
print(similarity("我喜欢吃香蕉。", "香蕉是我最喜欢的"))
```
结果:
```python
1.0000000000000002
```
#### 代码:
```python
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.metrics.pairwise import cosine_similarity
from gensim.similarities import Similarity
from gensim import corpora, models
import numpy as np
import jieba
def preprocess(sentence):
# 使用jieba分词进行分词
words = jieba.cut(sentence)
# 去掉停用词
stopwords = ['的', '了', '是', '在', '什么']
words =
# 将单词用空格连接起来并返回
return ' '.join(words)
def similarity(s1, s2):
'''暴力求解两个句子的相似度
Args:
s1: 第一个句子
s2: 第二个句子
Returns: 返回两个句子的相似度
'''
# 对两个句子进行预处理
s1_processed = preprocess(s1)
s2_processed = preprocess(s2)
# 将两个句子合并成一个文档
documents =
# 计算TF-IDF特征向量
tfidf_vectorizer = TfidfVectorizer()
tfidf_matrix = tfidf_vectorizer.fit_transform(documents)
# 计算余弦相似度
cosine_sim = cosine_similarity(tfidf_matrix)
return cosine_sim
def calculate_similarity(sentence1, sentence2):
'''用了Gensim库中的语料库、词典、TF-IDF模型和相似度计算工具。求解两个句子意思上的相似度
Args:
sentence1:
sentence2:
Returns:返回这两个句子的余弦相似度
'''
# 对句子进行分词
seg_sentence1 = jieba.lcut(sentence1)
seg_sentence2 = jieba.lcut(sentence2)
# 构建语料库
corpus = []
corpus.append(seg_sentence1)
corpus.append(seg_sentence2)
# 构建词典
dictionary = corpora.Dictionary(corpus)
# 将语料库转化为向量形式
corpus_vec =
# 训练TF-IDF模型
tfidf_model = models.TfidfModel(corpus_vec)
# 将两个句子转换为向量形式
sentence1_vec = tfidf_model
sentence2_vec = tfidf_model
# 计算两个句子的相似度
similarity = Similarity('-Similarity-index', corpus_vec, num_features=len(dictionary))
cosine_sim = similarity
return cosine_sim
def find_most_similar_sentence_index(sentences: list, target_sentence):
'''
Args:
sentences: 查找的文本list
target_sentence: 查找的目标句子
Returns: 目标句子与列表中的所有句子比较,返回相似度最高的下标,和最匹配的句子, 和相识度的概率
'''
# 计算目标句子和列表中每个句子的相似度
similarities =
# 找到相似度最大的句子的下标
max_index = np.argmax(similarities)
return max_index, sentences, similarities
``` 楼主大大真牛!厉害厉害。
怯怯地说下,python里其实还有一个库,叫difflib来着的,建议参考下。 在实际中有什么具体的应用吗 头号玩家 发表于 2023-9-20 17:34
在实际中有什么具体的应用吗
我是在给2个表格类似的内容,添加同样编号的时候用到。 批量赋值同样的编号。
两句话差不多一样但是有一点点区别。 wapjsx 发表于 2023-9-20 17:02
楼主大大真牛!厉害厉害。
怯怯地说下,python里其实还有一个库,叫difflib来着的,建议参考下。
学到了,非常有用! 学到了,非常感谢 英文可行不?效率如何 是什么样的情况,致使你开了这么大一个脑洞?直接对比他们的编码不好吗
页:
[1]