代码语言:javascript复制
import logging
import jieba
from gensim import corpora, models, similarities
logging.basicConfig(level=logging.DEBUG)
jieba.setLogLevel(logging.INFO)
class DocumentSimilar(object):
def __init__(self, documents):
self.documents=documents
self.dictionary=None
self.tfidf=None
self.similar_matrix=None
self.calculate_similar_matrix()
@staticmethod
def split_word(document):
"""
分词,去除停用词
"""
stop_words={":", "的", ",", "”"}
text=[]
for word in jieba.cut(document):
if word not in stop_words:
text.append(word)
logging.debug(text)
return text
def calculate_similar_matrix(self):
"""
计算相似度矩阵及相关必要数据
"""
words=[self.split_word(document) for document in self.documents]
self.dictionary=corpora.Dictionary(words)
corpus=[self.dictionary.doc2bow(word) for word in words]
self.tfidf=models.TfidfModel(corpus)
corpus_tfidf=self.tfidf[corpus]
self.similar_matrix=similarities.MatrixSimilarity(corpus_tfidf)
def get_similar(self, document):
"""
计算比较的文档与语料库中每篇文档的相似度
"""
words=self.split_word(document)
corpus=self.dictionary.doc2bow(words)
corpus_tfidf=self.tfidf[corpus]
return self.similar_matrix[corpus_tfidf]
if __name__=='__main__':
documents=[
"本公众号主要关注图像处理与模式识别的前沿进展",
"经典书籍与最新文献研究成果,同时也包含计算机相关实用操作技能",
]
doc_similar=DocumentSimilar(documents)
#比较的文档
new_doc="图像处理与模式识别研究所"
for value, document in zip(doc_similar.get_similar(new_doc),documents):
print("{:.2f}".format(value),document)
0.47 本公众号主要关注图像处理与模式识别的前沿进展 0.00 经典书籍与最新文献研究成果,同时也包含计算机相关实用操作技能
算法:Gensim是处理非结构化的数值化文本(纯文本)。
链接:https://github.com/RaRe-Technologies/gensim