使用已知的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

多维度Top-k评分

例如,在机器学习中的自然语言处理中,通常使用波束搜索来…

R – Caret train() “错误:停止” 与 “在newdata中未找到对象中使用的所有变量名”

我正在尝试为蘑菇数据构建一个简单的朴素贝叶斯分类器。我…

创建训练和测试数据集分割,数据嵌套在多个文件夹中

我正在准备数据以训练一个图像识别模型。目前我有一个文件…

我的神经网络预测出现错误:IndexError: list index out of range

我正在进行一个简单的垃圾邮件/非垃圾邮件文本分类。我的…

python 给出数组是一维的,但索引了两个维度错误

我已经为 miniBatchGradientDesce…

TensorFlow自定义训练步骤使用不同的损失函数

背景 根据TensorFlow文档,可以使用以下方式执…

发表回复

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