Carina Girvan

17 papers Journal 10Unranked 5
YearRankTypeTitle / Venue / Authors
2025 J jnl
Comput.
Bernadette Spieler, Carina Girvan
2023 conf
"MIS4TEL (Workshops)
Marcelo Milrad, Christothea Herodotou, Marianthi Grizioti, Alisa Lincke, Carina Girvan, Sofia Papavlasopoulou, Sagun Shrestha, Feiran Zhang
2021 J jnl
Br. J. Educ. Technol.
Jake Rowan Byrne, Carina Girvan, James Edward Clayson
2020 conf
DeLFI
Bernadette Spieler, Carina Girvan
2020 J jnl
Br. J. Educ. Technol.
Sara Hennessy, Manolis Mavrikis, Carina Girvan, Sara Price, Niall Winters
2019 J jnl
Br. J. Educ. Technol.
Sara Hennessy, Manolis Mavrikis, Carina Girvan, Sara Price, Niall Winters
2019 ch.
Macrotask Crowdsourcing
Fernando Loizides, Kathryn E. Jones, Carina Girvan, Hélène de Ribaupierre, Liam D. Turner, Ceri Bailey, Andy Lloyd
2019 J jnl
Comput. Hum. Behav.
Carina Girvan, Timothy Savage
2018 J jnl
Br. J. Educ. Technol.
Sara Hennessy, Carina Girvan, Manolis Mavrikis, Sara Price, Niall Winters
2018 conf
ICEED
Georg Jäggle, Wilfried Lepuschitz, Carina Girvan, Lisamarie Schuster, Iman Ayatollahi, Markus Vincze
2017 J jnl
Br. J. Educ. Technol.
Carina Girvan, Sara Hennessy, Manolis Mavrikis, Sara Price, Niall Winters
2017 conf
RiE
Ivaylo Gueorguiev, Christina Todorova, Pavel Varbanov, Petar Sharkov, George Sharkov, Carina Girvan, Nikoleta Yiannoutsou, Marianthi Grizioti
2016 conf
RiE
Lara Lammer, Wilfried Lepuschitz, Chronis Kynigos, Angele Giuliano, Carina Girvan
2013
Carina Girvan
2013 J jnl
Comput. Educ.
Carina Girvan, Brendan Tangney, Timothy Savage
2012 J jnl
Interact. Learn. Environ.
Carina Girvan, Timothy Savage
2010 J jnl
Comput. Educ.
Carina Girvan, Timothy Savage
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