我是文本挖掘和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
我想知道如何以其他更准确的方式进行操作,谢谢。
答案 0 :(得分:0)
我们首先适合原始句子
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]])