NLP 处理常用相似度计算
import pandas as pd
from sklearn.feature_extraction.text import CountVectorizer
from scipy.linalg import norm
import numpy as np
def tf_similarity(s1, s2):
def add_space(s):
return ' '.join(list(s))
# 将字中间加入空格
s1, s2 = add_space(s1), add_space(s2)
# 转化为TF矩阵
cv = CountVectorizer(tokenizer=lambda s: s.split())
corpus = [s1, s2]
vectors = cv.fit_transform(corpus).toarray()
# 计算TF系数
return np.dot(vectors[0], vectors[1]) / (norm(vectors[0]) * norm(vectors[1]))
def tf_new_similarity(entity_list, question):
result_list = []
similarty_list = []
for name in entity_list:
result_score = tf_similarity(question, name)
result_list.append([result_score, name])
column = ['score', 'name']
new_df = pd.DataFrame(result_list, columns=column)
new_df = new_df.sort_values(by=['score'], ascending=False)
print(new_df)
for index, row in new_df.iterrows():
#分数阈值可以调优
new_rws = [row[col] for col in column if row['score'] >= 0.1]
if len(new_rws) == 2:
similarty_list.append(new_rws[1])
return similarty_list
if __name__ == '__main__':
print(tf_new_similarity(['朝阳区开心商店'], '开心小卖部(朝阳区店)'))
该代码实现了一个基于TF-IDF的文本相似度计算函数`tf_similarity`,用于比较两个字符串的相似度。在`tf_new_similarity`函数中,该方法被应用到一个实体列表和问题上,找出与问题相似度高于阈值的实体。示例中,朝阳区开心商店与开心小卖部(朝阳区店)进行了比较。

4422

被折叠的 条评论
为什么被折叠?



