Rafael D. C. Santos

25 papers C 1Misc 1Journal 5Unranked 18
YearRankTypeTitle / Venue / Authors
2020 conf
ICCSA (5)
Olga Regina Fradico de Oliveira, Fabiano Morelli, Cícero Alves dos Santos Júnior, Rafael D. C. Santos
2020 conf
GEOINFO
Felipe M. Carlos, Vitor Conrado Faria Gomes, Gilberto Ribeiro de Queiroz, Karine Reis Ferreira, Rafael D. C. Santos
2019 conf
ICCSA (4)
Olga Regina Fradico de Oliveira Bittencourt, Fabiano Morelli, Cícero Alves dos Santos Júnior, Rafael D. C. Santos
2017 conf
ICCSA (6)
Diego Vilela Monteiro, Karine Reis Ferreira, Rafael D. C. Santos
2017 conf
GEOINFO
Ronaldo Nelis de Andrade, Olga Bittencourt, Fabiano Morelli, Rafael D. C. Santos
2017 conf
ICCSA (6)
Lorena A. Santos, Rolf Ezequiel O. Simões, Karine Reis Ferreira, Gilberto Ribeiro de Queiroz, Gilberto Câmara, Rafael D. C. Santos
2016 conf
ICEBE
Leandro G. Vasconcelos, Rafael D. C. Santos, Laércio A. Baldochi
2015 conf
GEOINFO
Raian Vargas Maretto, Thales Sehn Körting, Emiliano Ferreira Castejon, Leila Maria Garcia Fonseca, Rafael D. C. Santos
2015 conf
SIMBig
Vitor Hirota Makiyama, M. Jordan Raddick, Rafael D. C. Santos
2015 J jnl
Comput. Sci. Eng.
Alessandra Marli M. Morais, Rafael D. C. Santos
2014 conf
eScience Workshops
Alessandra Marli M. Morais, Rafael D. C. Santos, Nandamudi L. Vijaykumar
2014 conf
ICCSA (6)
Alessandra Marli M. Morais, Marcos Gonçalves Quiles, Rafael D. C. Santos
2014 conf
SysCon
Ivo Paixao de Medeiros, Leonardo Ramos Rodrigues, Rafael D. C. Santos, Elcio Hideiti Shiguemori, Cairo Lúcio Nascimento Júnior
2014 J jnl
Comput. Sci. Eng.
M. Jordan Raddick, Aniruddha R. Thakar, Alexander S. Szalay, Rafael D. C. Santos
2014 J jnl
Comput. Sci. Eng.
M. Jordan Raddick, Aniruddha R. Thakar, Alexander S. Szalay, Rafael D. C. Santos
2014 conf
ICCSA (6)
Ying Wu, Anthony Patterson, Rafael D. C. Santos, Nandamudi L. Vijaykumar
2013 conf
ICCSA (6)
Rafael D. C. Santos, Bernady O. Apduhan
2013 J jnl
IEEE Trans. Geosci. Remote. Sens.
Marcio Pupin Mello, Carlos Antonio Oliveira Vieira, Bernardo Rudorff, Paul Aplin, Rafael D. C. Santos, Daniel Alves Aguiar
2012 J jnl
Comput. Geosci.
Sérgio Aparecido Braga da Cruz, Antônio Miguel Vieira Monteiro, Rafael D. C. Santos
2012 C conf
IDEAL
José Roberto Motta Garcia, Antônio Miguel Vieira Monteiro, Rafael D. C. Santos
2011 conf
Image Processing: Algorithms and Systems
Carlos F. S. Volotão, Guaraci J. Erthal, Rafael D. C. Santos, Luciano Vieira Dutra
2010 conf
SIBGRAPI Tutorials
Luciano G. Fagundes, Rafael D. C. Santos
2009 conf
Data Mining, Intrusion Detection, Information Security and Assurance, and Data Networks Security
André Ricardo Abed Grégio, Isabela L. Oliveira, Rafael D. C. Santos, Adriano M. Cansian, Paulo L. de Geus
2008 Misc conf
SAC
José Demísio Simões da Silva, Rafael D. C. Santos
2007 conf
Data Mining, Intrusion Detection, Information Assurance, and Data Networks Security
André Grégio, Rafael D. C. Santos, Antonio Montes
redb/extractors/decompiler/bninja/similarity/minhashcustom.py
← Index redb/extractors/decompiler/bninja/similarity/minhashcustom.py python
import numpy as np
import mmh3

class MinHashCustom:
    """
    DTO for an actual MinHash
    <minhash>: a binary sequence of packed int8/32 values
    <minhash_int>: the equivalent representation of <minhash> but as list of int8/32
    """

    _HASH_MAX = 0xFFFFFFFF
    _MINHASH_BITS = 32

    def getSignatureEntrySize(self):
        return 1 if self.MINHASH_BITS <= 8 else 4

    def __init__(self, function_addr=None, minhash_bytes=None, minhash_signature=None, minhash_bits=32):
        self.minhash = b""
        self.minhash_int = []
        if minhash_bits:
            self._MINHASH_BITS = minhash_bits
        if minhash_bytes and minhash_signature:
            raise ValueError("Can use only one keyword argument")
        if minhash_bytes:
            if self._MINHASH_BITS <= 8:
                minhash_signature = np.frombuffer(minhash_bytes, dtype=np.uint8)
            else:
                minhash_signature = np.frombuffer(minhash_bytes, dtype=np.uint32)
            self.setMinHash(minhash_signature)
        elif minhash_signature:
            self.setMinHash(minhash_signature)

        self.shingler_composition = {}
        self.function_addr = function_addr

    def hasMinHash(self):
        return len(self.minhash) > 0

    def getMinHash(self):
        return self.minhash

    def getMinHashInt(self):
        return self.minhash_int

    def setMinHash(self, minhash_signature):
        self.minhash_int = [i % 2 ** self._MINHASH_BITS for i in minhash_signature]
        if self._MINHASH_BITS <= 8:
            self.minhash = np.array(self.minhash_int, dtype=np.uint8).tobytes()
        else:
            self.minhash = np.array(self.minhash_int, dtype=np.uint32).tobytes()

    def getComposition(self):
        return self.shingler_composition

    def scoreAgainst(self, other):
        return self.calculateMinHashScore(self.minhash, other.minhash, minhash_bits=self._MINHASH_BITS)

    @staticmethod
    def getHashMax():
        return MinHashCustom._HASH_MAX

    @staticmethod
    def hashData(data, seed) -> int:
        if isinstance(data, (str, bytes, bytearray)):
            return mmh3.hash(data, seed) & MinHashCustom._HASH_MAX
        elif isinstance(data, (list, tuple)):
            to_hash = "|".join(str(elem) for elem in data)
            return mmh3.hash(to_hash, seed) & MinHashCustom._HASH_MAX
        else:
            raise NotImplementedError(
                f"Type not supported for hashData: {type(data).__name__}"
            )

    @staticmethod
    def calculateMinHashScore(first, second, minhash_bits=32):
        if minhash_bits <= 8:
            first_np = np.frombuffer(first, dtype=np.uint8)
            second_np = np.frombuffer(second, dtype=np.uint8)
        else:
            first_np = np.frombuffer(first, dtype=np.uint32)
            second_np = np.frombuffer(second, dtype=np.uint32)
        return 100.0 * sum(first_np == second_np) / len(first_np)

    @staticmethod
    def calculateMinHashIntScore(first, second):
        score = 0
        num_hashes = len(first)
        if num_hashes:
            for index, part in enumerate(first):
                score += 1 if part == second[index] else 0
            return 100.0 * score / num_hashes
        return 0.0

    @property
    def MINHASH_BITS(self):
        return self._MINHASH_BITS