Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 计算语料库中所有文本之间的余弦相似度_Python_Tf Idf_Corpus_Cosine Similarity - Fatal编程技术网

Python 计算语料库中所有文本之间的余弦相似度

Python 计算语料库中所有文本之间的余弦相似度,python,tf-idf,corpus,cosine-similarity,Python,Tf Idf,Corpus,Cosine Similarity,我有一组存储在JOSN文件中的文档。沿着这条线,我使用以下代码检索它们,以便将它们存储在术语data下: import json with open('SDM_2015.json') as f: data = [json.loads(line) for line in f] 将所有文本整合到一个文本中以形成语料库的方法是: corpus = [] for i in range(len(data) -1): corpus.append(data[i]['body'] + data

我有一组存储在JOSN文件中的文档。沿着这条线,我使用以下代码检索它们,以便将它们存储在术语
data
下:

import json
with open('SDM_2015.json') as f:
    data = [json.loads(line) for line in f]
将所有文本整合到一个文本中以形成语料库的方法是:

corpus = []
for i in range(len(data) -1):
    corpus.append(data[i]['body'] + data[i+1]['body'])
到目前为止,操作相当简单。为了构建tfidf,我使用了以下代码行,这些代码删除了停止词和标点符号,对每个术语进行了词干处理,并对数据进行了标记

import nltk
import nltk, string
from sklearn.feature_extraction.text import TfidfVectorizer

# stemming each word (common root)
stemmer = nltk.stem.porter.PorterStemmer()

# removing puctuations etc
remove_punctuation_map = dict((ord(char), None) for char in string.punctuation)

## First function that creates the tokens
def stem_tokens(tokens):
    return [stemmer.stem(item) for item in tokens]

## Function that incorporating the first function, converts all words into lower letters and removes puctuations maps (previously specified)
def normalize(text):
    return stem_tokens(nltk.word_tokenize(text.lower().translate(remove_punctuation_map)))

## Lastly, a functionthat contains all the previous ones plus stopwords removal     

vectorizer = TfidfVectorizer(tokenizer=normalize, stop_words='english')
然后,我尝试将此函数应用于
语料库
,例如:

tfidf = vectorizer.fit_transform(corpus)

print(((tfidf*tfidf.T).A)[0,1])
但是什么都没发生,你知道怎么做吗


亲切的问候

你所说的“什么都没发生”是什么意思?你会得到一个错误,还是一个空矩阵?
tfidf
矩阵填充了吗?好问题@Jac_opo,我的意思是实际上什么都没有发生,这很奇怪。也许是因为我的电脑而不是代码。。。。但无论如何,这可能不是正确的方法:)所以。。它卡住了吗?这是一个稀疏矩阵,我怀疑转置会隐式地产生原始的、完整的矩阵。你能用一个小的,虚拟的语料库吗?好主意,我会用一个三篇文章的语料库。谢谢你的提示!