Python 计算语料库中所有文本之间的余弦相似度
我有一组存储在JOSN文件中的文档。沿着这条线,我使用以下代码检索它们,以便将它们存储在术语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
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,我的意思是实际上什么都没有发生,这很奇怪。也许是因为我的电脑而不是代码。。。。但无论如何,这可能不是正确的方法:)所以。。它卡住了吗?这是一个稀疏矩阵,我怀疑转置会隐式地产生原始的、完整的矩阵。你能用一个小的,虚拟的语料库吗?好主意,我会用一个三篇文章的语料库。谢谢你的提示!