機器學習-文本數據-文本的相關性矩陣 1.cosing_similarity(用於計算兩兩特征之間的相關性)


函數說明:

1. cosing_similarity(array)   輸入的樣本為array格式,為經過詞袋模型編碼以后的向量化特征,用於計算兩兩樣本之間的相關性

當我們使用詞頻或者TFidf構造出詞袋模型,並對每一個文章內容做詞統計以后,

我們如果要判斷兩個文章內容的相關性,這時候我們需要對數字映射后的特征做一個余弦相似度的匹配:即a.dot(b) / sqrt(a^2 + b^2)

 

在sklearn中使用metrics.pairwise import cosine_similarity

代碼:

第一步: 對數據使用DataFrame化,並進行數組化

第二步:對數據進行分詞,並去除停用詞,使用' '.join連接列表

第三步:np.vectorizer向量化函數,調用函數進行分詞和停用詞的去除

第四步:使用TF-idf詞袋模型,對特征進行向量化數字映射

第五步:使用 from sklearn.metrics.pairwise import cosine_similarity, 對兩兩樣本之間做相關性矩陣,使用的是余弦相似度計算公式

import pandas as pd
import numpy as np
import re
import nltk #pip install nltk


corpus = ['The sky is blue and beautiful.',
          'Love this blue and beautiful sky!',
          'The quick brown fox jumps over the lazy dog.',
          'The brown fox is quick and the blue dog is lazy!',
          'The sky is very blue and the sky is very beautiful today',
          'The dog is lazy but the brown fox is quick!'
]

labels = ['weather', 'weather', 'animals', 'animals', 'weather', 'animals']

# 第一步:構建DataFrame格式數據
corpus = np.array(corpus)
corpus_df = pd.DataFrame({'Document': corpus, 'categoray': labels})

# 第二步:構建函數進行分詞和停用詞的去除
# 載入英文的停用詞表
stopwords = nltk.corpus.stopwords.words('english')
# 建立詞分割模型
cut_model = nltk.WordPunctTokenizer()
# 定義分詞和停用詞去除的函數
def Normalize_corpus(doc):
    # 去除字符串中結尾的標點符號
    doc = re.sub(r'[^a-zA-Z0-9\s]', '', string=doc)
    # 是字符串變小寫格式
    doc = doc.lower()
    # 去除字符串兩邊的空格
    doc = doc.strip()
    # 進行分詞操作
    tokens = cut_model.tokenize(doc)
    # 使用停止用詞表去除停用詞
    doc = [token for token in tokens if token not in stopwords]
    # 將去除停用詞后的字符串使用' '連接,為了接下來的詞袋模型做准備
    doc = ' '.join(doc)

    return doc

# 第三步:向量化函數和調用函數
# 向量化函數,當輸入一個列表時,列表里的數將被一個一個輸入,最后返回也是一個個列表的輸出
Normalize_corpus = np.vectorize(Normalize_corpus)
# 調用函數進行分詞和去除停用詞
corpus_norm = Normalize_corpus(corpus)

# 第四步:使用TfidVectorizer進行TF-idf詞袋模型的構建
from sklearn.feature_extraction.text import TfidfVectorizer

Tf = TfidfVectorizer(use_idf=True)
Tf.fit(corpus_norm)
vocs = Tf.get_feature_names()
corpus_array = Tf.transform(corpus_norm).toarray()
corpus_norm_df = pd.DataFrame(corpus_array, columns=vocs)
print(corpus_norm_df.head())

from sklearn.metrics.pairwise import cosine_similarity

similarity_matrix = cosine_similarity(corpus_array)
similarity_matrix_df = pd.DataFrame(similarity_matrix)
print(similarity_matrix_df)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM