python - gensim:自定义相似性度量

标签 python time similarity gensim

使用 gensim,我想计算文档列表中的相似度。这个库非常擅长处理我所获得的大量数据。这些文档都被简化为时间戳,我有一个函数 time_similarity 来比较它们。 gensim 但是,使用余弦相似度。

我想知道是否有人以前尝试过这个或有不同的解决方案。

最佳答案

可以通过继承接口(interface) SimilarityABC 来做到这一点。我没有找到这方面的任何文档,但看起来之前已经完成了定义 Word Mover Distance similarity .这是执行此操作的通用方法。您可以通过专注于您关心的相似性度量来提高效率。

import numpy
from gensim import interfaces

class CustomSimilarity(interfaces.SimilarityABC):

    def __init__(self, corpus, custom_similarity, num_best=None, chunksize=256):
        self.corpus = corpus
        self.custom_similarity = custom_similarity
        self.num_best = num_best
        self.chunksize = chunksize
        self.normalize = False

    def get_similarities(self, query):
        """
        **Do not use this function directly; use the self[query] syntax instead.**
        """
        if isinstance(query, numpy.ndarray):
            # Convert document indexes to actual documents.
            query = [self.corpus[i] for i in query]
        if not isinstance(query[0], list):
            query = [query]
        n_queries = len(query)
        result = []
        for qidx in range(n_queries):
            qresult = [self.custom_similarity(document, query[qidx]) for document in self.corpus]
            qresult = numpy.array(qresult)
            result.append(qresult)
        if len(result) == 1:
            # Only one query.
            result = result[0]
        else:
            result = numpy.array(result)
        return result

实现自定义相似度:

def overlap_sim(doc1, doc2):
    # similarity defined by the number of common words
    return len(set(doc1) & set(doc2))
corpus = [['cat', 'dog'], ['cat', 'bird'], ['dog']]
cs = CustomSimilarity(corpus, overlap_sim, num_best=2)
print(cs[['bird', 'cat', 'frog']])

这输出 [(1, 2.0), (0, 1.0)]

关于python - gensim:自定义相似性度量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38054356/

相关文章:

java - 基于时间的 REST API 基本安全性

python - 算法的时间分析

unicode - 比较不同语言的短字符串以获得相似的声音 - Soundex 是答案吗?

python - 如何记录 Python 交互式 shell session 中发生的一切?

unit-testing - Boost 单元测试框架报告的 "mks"单元是什么?

mysql - 获取MySQL表中最相似的行并按相似度对它们进行排序

python搜索技术: word similarity

python - tempfile.TemporaryFile 与 StringIO

python - 如何为通过 ctypes _fields_ 创建的(可能是多维的)数组重写 __setitem__ 方法?

python - Pandas - 计算总给定范围的百分比