使用已知的Python包实现N-Gram、TF-IDF和余弦相似度

我正在尝试使用以下方法实现一个相似度函数:

  • N-Gram
  • TF-IDF
  • 余弦相似度

示例enter image description here

概念:

words = [...]word = '...'similarity = predict(words,word)def predict(words,word):     words_ngrams = create_ngrams(words,range=(2,4))       word_ngrams =  create_ngrams(word,range=(2,4))     words_tokenizer = tfidf_tokenizer(words_ngrams)     word_vec = words_tokenizer.transform(word)     return cosine_similarity(word_ved,words_tokenizer)

我在网上搜索了一个简单且安全的实现方法,但没有找到使用已知Python包如sklearn、nltk、scipy等的实现,大多数都是使用“自制”的计算方法。

我试图避免手动编写每个步骤,我猜想对于“整个流程”应该有一个简单的解决方案。

任何帮助(和代码)都将不胜感激。谢谢:)


回答:

最终我找到了解决方法…

对于那些需要解决这个问题的朋友,这里是我编写的一个函数,可以处理这个问题…

'''### N-Gram & TD-IDF & 余弦相似度使用'from列'上的N-Gram与TF-IDF来预测'to列'。向数据框添加一个包含数值结果的'cosine_similarity'特征。'''def add_prediction_by_ngram_tfidf_cosine( from_column_name,ngram_range=(2,4) ):    global df    from sklearn.feature_extraction.text import TfidfVectorizer    from sklearn.metrics.pairwise import cosine_similarity    vectorizer = TfidfVectorizer( analyzer='char',ngram_range=ngram_range )    vectorizer.fit(df.FromColumn)    w = from_column_name    vec_word = vectorizer.transform([w])    df['vec'] = df.FromColumn.apply(lambda x : vectorizer.transform([x]))    df['cosine_similarity'] = df.vec.apply(lambda x : cosine_similarity(x,vec_word)[0][0])    df = df.drop(['vec'],axis=1)

注意:这还不是生产就绪的版本

Related Posts

如何从数据集中移除EXIF数据?

我在尝试从数据集中的图像中移除EXIF数据(这些数据将…

用于Python中的“智能点”游戏的遗传算法不工作

过去几天我一直在尝试实现所谓的“智能点”游戏。我第一次…

哪个R平方得分更有帮助?

data.drop(‘Movie Title’, ax…

使用线性回归预测GRE分数对录取率的影响

我正在学习线性回归,并尝试在Jupyter笔记本中用P…

使用mlrMBO贝叶斯优化进行SVM超参数调优时出现错误

我试图针对一个分类任务优化SVM,这个方法在许多其他模…

Keras模型的二元交叉熵准确率未发生变化

我在网上看到了很多关于这个问题的提问,但没有找到明确的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注