Skip to content

StarlangSoftware/DataStructure-Cy

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

33 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Cache

The idea of caching items for fast retrieval goes back nearly to the beginning of the computer science. We also use that idea and use a LRU cache for storing morphological analyses of surface forms. Before analyzing a surface form, we first look up to the cache, and if there is an hit, we just take the analyses from the cache. If there is a miss, we analyze the surface form and put the morphological analyses of that surface form in the LRU cache. As can be expected, the speed of the caching mechanism surely depends on the size of the cache.

For Developers

You can also see Python, Java, C, C++, Swift, Php, Js, or C# repository.

Requirements

Python

To check if you have a compatible version of Python installed, use the following command:

python -V

You can find the latest version of Python here.

Git

Install the latest version of Git.

Pip Install

pip3.9 install NlpToolkit-DataStructure-Cy

Download Code

In order to work on code, create a fork from GitHub page. Use Git for cloning the code to your local or below line for Ubuntu:

git clone <your-fork-git-link>

A directory called DataStructure will be created. Or you can use below link for exploring the code:

git clone https://github.com/starlangsoftware/DataStructure-Cy.git

Open project with Pycharm IDE

Steps for opening the cloned project:

  • Start IDE
  • Select File | Open from main menu
  • Choose DataStructure-CY file
  • Select open as project option
  • Couple of seconds, dependencies will be downloaded.

For Developers

CounterHashMap

CounterHashMap bir veri tipinin kaç kere geçtiğini hafızada tutmak için kullanılmaktadır.

Bir CounterHashMap yaratmak için

a = CounterHashMap()

Hafızaya veri eklemek için

put(self, key: object)

Örneğin,

a.put("ali");

Bu aşamanın ardından "ali" nin sayacı 1 olur.

Hafızaya o veriyi birden fazla kez eklemek için

putNTimes(self, key: object, N: int)

Örneğin,

a.putNTimes("veli", 5)

Bu aşamanın ardından "ali"'nin sayacı 5 olur.

Hafızada o verinin kaç kere geçtiğini bulmak için

count(self, key: object) -> int

Örneğin, "veli" nin kaç kere geçtiğini bulmak için

kacKere = a.count("veli")

Bu aşamanın ardından kacKere değişkeninin değeri 5 olur.

Hafızada hangi verinin en çok geçtiğini bulmak için

max(self) -> object

Örneğin,

kelime = a.max()

Bu aşamanın ardından kelime "veli" olur.

LRUCache

LRUCache veri cachelemek için kullanılan bir veri yapısıdır. LRUCache en yakın zamanda kullanılan verileri öncelikli olarak hafızada tutar. Bir LRUCache yaratmak için

LRUCache(self, cacheSize: int)

kullanılır. cacheSize burada cachelenecek verinin büyüklüğünün limitini göstermektedir.

Cache'e bir veri eklemek için

add(self, key: object, data: object)

kullanılır. data burada eklenecek veriyi, key anahtar göstergeyi göstermektedir.

Cache'de bir veri var mı diye kontrol etmek için

contains(self, key: object) -> bool

kullanılır.

Cache'deki veriyi anahtarına göre getirmek için

get(self, key: object) -> object

kullanılır.

For Contibutors

Setup.py file

  1. Do not forget to set package list. All subfolders should be added to the package list.
    packages=['Classification', 'Classification.Model', 'Classification.Model.DecisionTree',
              'Classification.Model.Ensemble', 'Classification.Model.NeuralNetwork',
              'Classification.Model.NonParametric', 'Classification.Model.Parametric',
              'Classification.Filter', 'Classification.DataSet', 'Classification.Instance', 'Classification.Attribute',
              'Classification.Parameter', 'Classification.Experiment',
              'Classification.Performance', 'Classification.InstanceList', 'Classification.DistanceMetric',
              'Classification.StatisticalTest', 'Classification.FeatureSelection'],
  1. Package name should be lowercase and only may include _ character.
    name='nlptoolkit_math',
  1. Package data should be defined and must ibclude pyx, pxd, c and py files.
    package_data={'NGram': ['*.pxd', '*.pyx', '*.c', '*.py']},
  1. Setup should include ext_modules with compiler directives.
    ext_modules=cythonize(["NGram/*.pyx"],
                          compiler_directives={'language_level': "3"}),

Cython files

  1. Define the class variables and class methods in the pxd file.
cdef class DiscreteDistribution(dict):

    cdef float __sum

    cpdef addItem(self, str item)
    cpdef removeItem(self, str item)
    cpdef addDistribution(self, DiscreteDistribution distribution)
  1. For default values in class method declarations, use *.
    cpdef list constructIdiomLiterals(self, FsmMorphologicalAnalyzer fsm, MorphologicalParse morphologicalParse1,
                               MetamorphicParse metaParse1, MorphologicalParse morphologicalParse2,
                               MetamorphicParse metaParse2, MorphologicalParse morphologicalParse3 = *,
                               MetamorphicParse metaParse3 = *)
  1. Define the class name as cdef, class methods as cpdef, and __init__ as def.
cdef class DiscreteDistribution(dict):

    def __init__(self, **kwargs):
        """
        A constructor of DiscreteDistribution class which calls its super class.
        """
        super().__init__(**kwargs)
        self.__sum = 0.0

    cpdef addItem(self, str item):
  1. Do not forget to comment each function.
    cpdef addItem(self, str item):
        """
        The addItem method takes a String item as an input and if this map contains a mapping for the item it puts the
        item with given value + 1, else it puts item with value of 1.

        PARAMETERS
        ----------
        item : string
            String input.
        """
  1. Function names should follow caml case.
    cpdef addItem(self, str item):
  1. Local variables should follow snake case.
	det = 1.0
	copy_of_matrix = copy.deepcopy(self)
  1. Variable types should be defined for function parameters, class variables.
    cpdef double getValue(self, int rowNo, int colNo):
  1. Local variables should be defined with types.
    cpdef sortDefinitions(self):
        cdef int i, j
        cdef str tmp
  1. For abstract methods, use ABC package and declare them with @abstractmethod.
    @abstractmethod
    def train(self, train_set: list[Tensor]):
        pass
  1. For private methods, use __ as prefix in their names.
    cpdef list __linearRegressionOnCountsOfCounts(self, list countsOfCounts)
  1. For private class variables, use __ as prefix in their names.
cdef class NGram:
    cdef int __N
    cdef double __lambda1, __lambda2
    cdef bint __interpolated
    cdef set __vocabulary
    cdef list __probability_of_unseen
  1. Write __repr__ class methods as toString methods
  2. Write getter and setter class methods.
    cpdef int getN(self)
    cpdef setN(self, int N)
  1. If there are multiple constructors for a class, define them as constructor1, constructor2, ..., then from the original constructor call these methods.
cdef class NGram:

    cpdef constructor1(self, int N, list corpus):
    cpdef constructor2(self, str fileName):
    def __init__(self,
                 NorFileName,
                 corpus=None):
        if isinstance(NorFileName, int):
            self.constructor1(NorFileName, corpus)
        else:
            self.constructor2(NorFileName)
  1. Extend test classes from unittest and use separate unit test methods.
class NGramTest(unittest.TestCase):

    def test_GetCountSimple(self):
  1. For undefined types use object as type in the type declarations.
cdef class WordNet:

    cdef object __syn_set_list
    cdef object __literal_list
  1. For boolean types use bint as type in the type declarations.
	cdef bint is_done
  1. Enumerated types should be used when necessary as enum classes, and should be declared in py files.
class AttributeType(Enum):
    """
    Continuous Attribute
    """
    CONTINUOUS = auto()
    """
  1. Resource files should be taken from pkg_recources package.
	fileName = pkg_resources.resource_filename(__name__, 'data/turkish_wordnet.xml')

About

Simple Data Structures Library

Topics

Resources

License

Code of conduct

Stars

Watchers

Forks

Packages

 
 
 

Contributors