Как создать шаблон матрицы для проверки сходства предложений? - PullRequest
0 голосов
/ 29 сентября 2018

Я новичок в области интеллектуального анализа текста и Python и пытаюсь выполнить простую задачу.Я хочу создать матрицу TF из предложений: [«Это первое предложение», «Это второе предложение», «Это третье предложение»]

И в цикле (или как-то) сравнивать новые предложенияс этой матрицей.

В stackoverflow я нашел хороший пример, который отлично работает, но в моем случае он будет вычислять матрицу TF для выборочных предложений и новых предложений каждый раз.На больших наборах данных он будет работать немного медленнее.

from sklearn.feature_extraction.text import TfidfVectorizer

vect = TfidfVectorizer()
text = []
text = ['This is the first sentence','This is the second sentence', 'This is the third sentence']
text.append('new sentence')
tfidf = vect.fit_transform(text)

# Get an array of results
results = ( tfidf * tfidf.T ).A

Я хочу знать, как это сделать другим, более точным способом, спасибо.

1 Ответ

0 голосов
/ 29 сентября 2018

Сначала мы можем подгонять к исходным предложениям

from sklearn.feature_extraction.text import TfidfVectorizer
vect = TfidfVectorizer()
text = ['This is the first test ','This is the sentence', 'this is a third sentence']
vect.fit(text)

tfidf = vect.transform(text).A
>>> tfidf
array([[0.55249005, 0.32630952, 0.        , 0.55249005, 0.42018292,
    0.        , 0.32630952],
   [0.        , 0.43370786, 0.55847784, 0.        , 0.55847784,
    0.        , 0.43370786],
   [0.        , 0.39148397, 0.50410689, 0.        , 0.        ,
    0.66283998, 0.39148397]])

Затем использовать его для преобразования новых:

new = vect.transform(['this sentence 1','new sentence 2']).A
>>> new
array([[0.        , 0.        , 0.78980693, 0.        , 0.        ,
        0.        , 0.61335554],
       [0.        , 0.        , 1.        , 0.        , 0.        ,
        0.        , 0.        ]])

А затем использовать некоторую метрику расстояния для вычисления сходства между предложениями:

import scipy
>>> scipy.spatial.distance.cdist(tfidf, new, 'euclidean')
array([[1.26479741, 1.41421356],
       [0.76536686, 0.93970438],
       [0.85056925, 0.99588464]])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...