Rafael A. Berri

23 papers B 2C 2Journal 6Unranked 13
YearRankTypeTitle / Venue / Authors
2026 J jnl
Expert Syst. J. Knowl. Eng.
Jair O. González, Rafael A. Berri, Giancarlo Lucca, Bruno Lopes Dalmazo, Eduardo N. Borges
2025 conf
ICCSA (2)
Arthur G. Bubolz, Giancarlo Lucca, Lizandro de Souza Oliveira, Thiago Teixeira, Rafael A. Berri, Eduardo N. Borges, Bruno Lopes Dalmazo
2025 conf
ICCSA (2)
Humberto O. Bragança, Richard F. Pinto, Bruno Lopes Dalmazo, Eduardo N. Borges, Giancarlo Lucca, Viviane L. D. de Mattos, Rafael A. Berri
2025 conf
BRACIS (1)
Giancarlo Lucca, Tiago da Cruz Asmus, Graçaliz Pereira Dimuro, Bruno Lopes Dalmazo, Rafael A. Berri, Renata H. S. Reiser, Adenauer C. Yamin, Cédric Marco-Detchart, Humberto Bustince
2025 conf
ICEIS (1)
Humberto O. Bragança, Rafael A. Berri, Bruno Lopes Dalmazo, Eduardo N. Borges, Viviane L. D. de Mattos, Richard F. Pinto, Fabian Corrêa Cardoso, Giancarlo Lucca
2025 J jnl
CoRR
Gabriel M. Arantes, Richard F. Pinto, Bruno Lopes Dalmazo, Eduardo N. Borges, Giancarlo Lucca, Viviane L. D. de Mattos, Fabian Corrêa Cardoso, Rafael A. Berri
2025 conf
IDEAL (1)
Gabriel M. Arantes, Richard F. Pinto, Bruno Lopes Dalmazo, Eduardo N. Borges, Giancarlo Lucca, Viviane L. D. de Mattos, Fabian Corrêa Cardoso, Rafael A. Berri
2025 J jnl
CoRR
Gabriel M. Arantes, Richard F. Pinto, Bruno Lopes Dalmazo, Eduardo N. Borges, Giancarlo Lucca, Viviane L. D. de Mattos, Fabian Corrêa Cardoso, Rafael A. Berri
2025 conf
ICCSA (2)
Andrey V. S. Souza, Richard F. Pinto, Bruno Lopes Dalmazo, Eduardo N. Borges, Giancarlo Lucca, Viviane L. D. de Mattos, Rafael A. Berri
2025 conf
IDEAL (2)
Arthur G. Bubolz, Marcos C. Freitas, Giancarlo Lucca, Rafael A. Berri, Eduardo N. Borges, Bruno Lopes Dalmazo
2024 J jnl
RITA
Luccas R. Hoff, Rafael A. Berri, Eduardo N. Borges, André Riker, Bruno Lopes Dalmazo
2023 conf
ICEIS (1)
Eduardo M. Gonçalves, Eduardo N. Borges, Bruno Lopes Dalmazo, Rafael A. Berri, Giancarlo Lucca, Vinicius M. De Oliveira
2023 C conf
IDEAL
Jair O. González, Rafael A. Berri, Giancarlo Lucca, Bruno Lopes Dalmazo, Eduardo N. Borges
2023 J jnl
IEEE Access
Diego Renan Bruno, Rafael A. Berri, Felipe Manfio Barbosa, Fernando Santos Osório
2023 C conf
IDEAL
Junior Zilles, Eduardo N. Borges, Giancarlo Lucca, Cédric Marco-Detchart, Rafael A. Berri, Graçaliz Pereira Dimuro
2022 conf
VISIGRAPP (4: VISAPP)
Rafael A. Berri, Diego Renan Bruno, Eduardo N. Borges, Giancarlo Lucca, Fernando Santos Osório
2022 conf
ICEIS (1)
Eric Gondran, Giancarlo Lucca, Rafael A. Berri, Hélida S. Santos, Eduardo N. Borges
2021 conf
BRACIS (1)
Giancarlo Lucca, Eduardo N. Borges, Rafael A. Berri, Leonardo Emmendorfer, Graçaliz Pereira Dimuro, Tiago da Cruz Asmus
2018 B conf
IJCNN
Rafael A. Berri, Fernando Santos Osório
2018 conf
BRACIS
Rafael A. Berri, Fernando Santos Osório
2016 B conf
IJCNN
Rafael A. Berri, Fernando Santos Osório, Rafael S. Parpinelli, Alexandre Gonçalves Silva
2014 conf
VISAPP (2)
Rafael A. Berri, Alexandre Gonçalves Silva, Rafael S. Parpinelli, Elaine Girardi, Rangel Arthur
2014 J jnl
CoRR
Rafael A. Berri, Alexandre Gonçalves Silva, Rafael S. Parpinelli, Elaine Girardi, Rangel Arthur
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