AiSwcm 发表于 2023-9-20 15:26

一个小工具,计算两个句子的相识度

### 识别两个句子的复杂度

- 支持从一个列表中找出相识度最高的句子
- 支持识别两个句子的复杂度

#### 使用方法:

##### 方法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
```

wapjsx 发表于 2023-9-20 17:02

楼主大大真牛!厉害厉害。

怯怯地说下,python里其实还有一个库,叫difflib来着的,建议参考下。

头号玩家 发表于 2023-9-20 17:34

在实际中有什么具体的应用吗

AiSwcm 发表于 2023-9-20 17:51

头号玩家 发表于 2023-9-20 17:34
在实际中有什么具体的应用吗

我是在给2个表格类似的内容,添加同样编号的时候用到。 批量赋值同样的编号。

两句话差不多一样但是有一点点区别。

moruye 发表于 2023-9-20 18:23

AiSwcm 发表于 2023-9-20 18:29

wapjsx 发表于 2023-9-20 17:02
楼主大大真牛!厉害厉害。

怯怯地说下,python里其实还有一个库,叫difflib来着的,建议参考下。

学到了,非常有用!

sangsang123 发表于 2023-9-20 19:10

学到了,非常感谢

kkoo 发表于 2023-9-20 20:17

li645944229 发表于 2023-9-20 21:42

英文可行不?效率如何

lookfeiji 发表于 2023-9-21 08:28

是什么样的情况,致使你开了这么大一个脑洞?直接对比他们的编码不好吗
页: [1]
查看完整版本: 一个小工具,计算两个句子的相识度