Gensim

2022-05-29 10:39:30 浏览数 (2)

代码语言: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

0 人点赞