代码之家  ›  专栏  ›  技术社区  ›  Sahar Millis

使用已知的python包实现n-gram、tf-idf和cosine相似性

  •  -2
  • Sahar Millis  · 技术社区  · 8 年前

    我正在尝试使用

    • N克
    • TF-IDF型
    • 余弦相似性

    示例

    概念:

    words=[…]
    字='…'
    相似性=预测(单词,单词)
    
    def predict(单词,单词):
    words_ngrams=创建_ngrams(words,range=(2,4))。
    word rams=创建rams(word,range=(2,4))。
    
    words_tokenizer=tfidf_tokenizer(单词_ngrams)
    word_vec=单词_tokenizer.transform(word)
    
    返回余弦相似性(word-ved,words-tokenizer)
    

    我在网络上搜索了一个简单而安全的实现,但找不到一个使用已知的python包的实现。as sklearn,nltk,scipy etc.
    他们中的大多数人都使用“自制”计算。

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

    任何帮助(和代码)都将不胜感激。tnx:(?) 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等。
    他们中的大多数使用“自制”计算。

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

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

    1 回复  |  直到 8 年前
        1
  •  0
  •   Sahar Millis    8 年前

    '''
    ### 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)