【问题标题】:Using known python packages for implementing N-Gram, TF-IDF and Cosine similarity使用已知的 python 包来实现 N-Gram、TF-IDF 和余弦相似度
【发布时间】:2018-12-12 19:47:00
【问题描述】:

我正在尝试使用

实现相似性函数
  • N-克
  • TF-IDF
  • 余弦相似度

示例

概念:

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 等的实现。
他们中的大多数使用“自制”计算。

我试图避免每一步都手动编码,我猜想对于所有“那个管道”都有一个简单的修复方法。

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

【问题讨论】:

    标签: python machine-learning tf-idf n-gram cosine-similarity


    【解决方案1】:

    我终于明白了……

    对于那些需要解决这个问题的人来说,这是我编写的一个函数来处理它......

    '''
    ### N-Gram & TD-IDF & Cosine Similarity
    Using n-gram on 'from column' with TF-IDF to predict the 'to column'.
    Adding to the df a 'cosine_similarity' feature with the numeric result.
    '''
    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)
    

    注意:它还没有准备好生产

    【讨论】:

      猜你喜欢
      • 2011-01-23
      • 1970-01-01
      • 1970-01-01
      • 2012-11-20
      • 2013-04-18
      • 1970-01-01
      • 2017-02-03
      • 2020-02-20
      相关资源
      最近更新 更多