Kanlaya Naruedomkul

35 papers B 1C 2Misc 4Journal 13Unranked 7
YearRankTypeTitle / Venue / Authors
2016 J jnl
Pattern Anal. Appl.
Ekawat Chaowicharat, Kanlaya Naruedomkul, Nick Cercone
2013 C conf
ICCE
Wararat Wongkia, Kanlaya Naruedomkul
2013 book
Computational Approaches to Assistive Technologies for People with Disabilities
Nick Cercone, Kanlaya Naruedomkul
2013 ch.
Computational Approaches to Assistive Technologies for People with Disabilities
Kanlaya Naruedomkul, Nick Cercone
2013 ch.
Rough Sets and Intelligent Systems (1)
Sumalee Sonamthiang, Kanlaya Naruedomkul, Nick Cercone
2013 ch.
Computational Approaches to Assistive Technologies for People with Disabilities
Sumalee Sonamthiang, Kanlaya Naruedomkul, Nick Cercone
2013 ch.
Computational Approaches to Assistive Technologies for People with Disabilities
Wararat Wongkia, Kanlaya Naruedomkul, Nick Cercone
2013 ch.
Computational Approaches to Assistive Technologies for People with Disabilities
Wanintorn Supap, Kanlaya Naruedomkul, Nick Cercone
2013 ch.
Computational Approaches to Assistive Technologies for People with Disabilities
Ekawat Chaowicharat, Nick Cercone, Kanlaya Naruedomkul
2013 Misc conf
FLAIRS
Ekawat Chaowicharat, Nick Cercone, Kanlaya Naruedomkul
2013 ch.
Computational Approaches to Assistive Technologies for People with Disabilities
Nadh Ditcharoen, Kanlaya Naruedomkul, Nick Cercone
2012 J jnl
Comput. Math. Appl.
Wararat Wongkia, Kanlaya Naruedomkul, Nick Cercone
2011 Misc conf
FLAIRS
Ekawat Chaowicharat, Kanlaya Naruedomkul
2010 conf
CSEDU (1)
Wanintorn Supap, Kanlaya Naruedomkul, Nick Cercone
2010 J jnl
Comput. Educ.
Nadh Ditcharoen, Kanlaya Naruedomkul, Nick Cercone
2010 conf
CSEDU (1)
Wararat Wongkia, Kanlaya Naruedomkul, Nick Cercone
2009 J jnl
Appl. Math. Lett.
Puntip Pattaraintakorn, Kanlaya Naruedomkul, K. Palasit
2008 J jnl
Comput. Educ.
Atorn Nuntiyagul, Kanlaya Naruedomkul, Nick Cercone, Damras Wongsawang
2008 J jnl
Comput. Educ.
Srisavakon Dangsaart, Kanlaya Naruedomkul, Nick Cercone, Booncharoen Sirinaovakul
2007 conf
RSEISP
Sumalee Sonamthiang, Nick Cercone, Kanlaya Naruedomkul
2007 Misc conf
GrC
Sumalee Sonamthiang, Nick Cercone, Kanlaya Naruedomkul
2007 J jnl
Trans. Rough Sets
Puntip Pattaraintakorn, Nick Cercone, Kanlaya Naruedomkul
2007 J jnl
Comput. Intell.
Atorn Nuntiyagul, Kanlaya Naruedomkul, Nick Cercone, Damras Wongsawang
2006 Misc conf
GrC
Puntip Pattaraintakorn, Nick Cercone, Kanlaya Naruedomkul
2006 J jnl
Appl. Math. Lett.
Puntip Pattaraintakorn, Nick Cercone, Kanlaya Naruedomkul
2005 conf
COMPSAC (1)
Puntip Pattaraintakorn, Nick Cercone, Kanlaya Naruedomkul
2005 B conf
ICTAI
Atorn Nuntiyagul, Kanlaya Naruedomkul, Nick Cercone, Damras Wongsawang
2005 conf
COMPSAC (2)
Atorn Nuntiyagul, Nick Cercone, Kanlaya Naruedomkul
2005 conf
RSFDGrC (2)
Puntip Pattaraintakorn, Nick Cercone, Kanlaya Naruedomkul
2005 C conf
ICMLA
Thammanoon Ditcharoen, Kanlaya Naruedomkul, Nick Cercone, Bundit Tipakorn
2004 conf
International Conference on Internet Computing
Puntip Pattaraintakorn, Kanlaya Naruedomkul, Nick Cercone
2002 J jnl
Computer
Nick Cercone, Lijun Hou, Vlado Keselj, Aijun An, Kanlaya Naruedomkul, Xiaohua Hu
2002 J jnl
Comput. Intell.
Kanlaya Naruedomkul, Nick Cercone
2000 J jnl
Comput. Intell.
Nick Cercone, Kiyoshi Kogure, Kanlaya Naruedomkul
1999 J jnl
Comput. Intell.
Kanlaya Naruedomkul, Nick Cercone, Booncharoen Sirinaovakul
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