Skip to content

StarlangSoftware/DataGenerator-CPP

Repository files navigation

Data Generator

Video Lectures

For Developers

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

Requirements

CPP

To check if you have compatible C++ Compiler installed,

  • Open CLion IDE
  • Preferences >Build,Execution,Deployment > Toolchain

Git

Install the latest version of Git.

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 DataGenerator-CPP will be created. Or you can use below link for exploring the code:

git clone https://github.com/starlangsoftware/DataGenerator-CPP.git

Open project with CLion IDE

To import projects from Git with version control:

  • Open CLion IDE , select Get From Version Control.

  • In the Import window, click URL tab and paste github URL.

  • Click open as Project.

Result: The imported project is listed in the Project Explorer view and files are loaded.

Compile

From IDE

After being done with the downloading and opening project, select Build Project option from Build menu.

Detailed Description

AnnotatedDataSetGenerator

DataSet yaratmak için AnnotatedDataSetGenerator sınıfı önce üretilir.

AnnotatedDataSetGenerator(String directory, String pattern, InstanceGenerator instanceGenerator)

Ardından generate metodu ile DataSet yaratılır.

DataSet generate()

InstanceGenerator

DataGeneratorlerin InstanceGeneratorlere ihtiyacı vardır. Bunlar bir tek kelimeden bir Instance yaratan sınıflardır.

Instance generateInstanceFromSentence(Sentence sentence, int wordIndex)

NER problemi için NerInstanceGenerator, FeaturedNerInstanceGenerator ve VectorizedNerInstanceGeneratorsınıfı

ShallowParse problemi için ShallowParseInstanceGenerator, FeaturedShallowParseInstanceGenerator ve VectorizedShallowParseInstanceGenerator sınıfı

WSD problemi için SemanticInstanceGenerator, FeaturedSemanticInstanceGenerator ve VectorizedSemanticInstanceGenerator sınıfı

Morphological Disambiguation problemi için FeaturedDisambiguationInstanceGenerator sınıfı

Example Generated DataSet

Word Sense Disambiguation Task

The following Table shows the sample text represented with sense labels and three possible features, namely the root form of the word, the part of speech (POS) tag of the word, and a boolean feature for checking the capital case.

Word Root Pos Capital ... Tag
Yüzündeki yüz Noun True ... yüz3
ketçap ketçap Noun False ... ketçap1
lekesi leke Noun False ... leke2
yüzdükten yüz Verb False ... yüz2
sonra sonra PCAbl False ... sonra1
çıkmış çık Verb False ... çık10
. . Punctuation False ... .1

Named Entity Recognition Task

The following Table shows the sample text represented with tag labels and three possible features, namely the root form of the word, the part of speech (POS) tag of the word, and a boolean feature for checking the capital case.

Word Root Pos Capital ... Tag
Türk Türk Noun True ... ORGANIZATION
Hava Hava Noun True ... ORGANIZATION
Yolları Yol Noun True ... ORGANIZATION
bu bu Pronoun False ... NONE
Pazartesi'den Pazartesi Noun True ... TIME
itibaren itibaren Adverb False ... NONE
İstanbul İstanbul Noun True ... LOCATION
Ankara Ankara Noun True ... LOCATION
güzergahı güzergah Noun False ... NONE
için için Adverb False ... NONE
indirimli indirimli Adjective False ... NONE
satışlarını sat Noun False ... NONE
90 90 Number False ... MONEY
TL'den TL Noun True ... MONEY
başlatacağını başlat Noun False ... NONE
açıkladı açıkla Verb False ... NONE
. . Punctuation False ... NONE

Shallow Parse Task

The following Table shows the sample text represented with chunk labels and three possible features, namely the root form of the word, the part of speech (POS) tag of the word, and a boolean feature for checking the capital case.

Word Root Pos Capital ... Tag
Türk Türk Noun True ... ÖZNE
Hava Hava Noun True ... ÖZNE
Yolları yol Noun True ... ÖZNE
Salı Salı Noun True ... ZARF TÜMLECİ
günü gün Noun False ... ZARF TÜMLECİ
yeni yeni Adjective False ... NESNE
indirimli indirimli Adjective False ... NESNE
fiyatlarını fiyat Noun False ... NESNE
açıkladı açıkla Verb False ... YÜKLEM
. . Punctuation False ... HİÇBİRİ

For Contibutors

Conan Setup

  1. First install conan.

pip install conan

Instructions are given in the following page:

https://docs.conan.io/2/installation.html

  1. Add conan remote 'ozyegin' with IP: 104.247.163.162 with the following command:

conan remote add ozyegin http://104.247.163.162:8081/artifactory/api/conan/conan-local --insert

  1. Use the comman conan list to check for installed packages. Probably there are no installed packages.

conan list

conanfile.py file

  1. Put the correct dependencies in the requires part
    requires = ["math/1.0.0", "classification/1.0.0"]
  1. Default settings are:
    settings = "os", "compiler", "build_type", "arch"
    options = {"shared": [True, False], "fPIC": [True, False]}
    default_options = {"shared": True, "fPIC": True}
    exports_sources = "src/*", "Test/*"

    def layout(self):
        cmake_layout(self, src_folder="src")

    def generate(self):
        tc = CMakeToolchain(self)
        tc.generate()
        deps = CMakeDeps(self)
        deps.generate()

    def build(self):
        cmake = CMake(self)
        cmake.configure()
        cmake.build()

    def package(self):
        copy(conanfile=self, keep_path=False, src=join(self.source_folder), dst=join(self.package_folder, "include"), pattern="*.h")
        copy(conanfile=self, keep_path=False, src=self.build_folder, dst=join(self.package_folder, "lib"), pattern="*.a")
        copy(conanfile=self, keep_path=False, src=self.build_folder, dst=join(self.package_folder, "lib"), pattern="*.so")
        copy(conanfile=self, keep_path=False, src=self.build_folder, dst=join(self.package_folder, "lib"), pattern="*.dylib")
        copy(conanfile=self, keep_path=False, src=self.build_folder, dst=join(self.package_folder, "bin"), pattern="*.dll")

    def package_info(self):
        self.cpp_info.libs = ["ComputationalGraph"]

CMakeLists.txt file

  1. Set the C++ standard with compiler flags.
	set(CMAKE_CXX_STANDARD 20)
	set(CMAKE_CXX_FLAGS "-O3")
  1. Dependent packages should be given with find_package.
	find_package(util_c REQUIRED)
	find_package(data_structure_c REQUIRED)
  1. For library part, use add_library and target_link_libraries commands. Use m library for math linker in Linux.
	add_library(Math src/Distribution.cpp src/Distribution.h src/DiscreteDistribution.cpp src/DiscreteDistribution.h src/Vector.cpp src/Vector.h src/Eigenvector.cpp src/Eigenvector.h src/Matrix.cpp src/Matrix.h src/Tensor.cpp src/Tensor.h)
	target_link_libraries(Math util_c::util_c data_structure_c::data_structure_c m)
  1. For executable tests, use add_executable and target_link_libraries commands. Use m library for math linker in Linux.
	add_executable(DiscreteDistributionTest src/Distribution.cpp src/Distribution.h src/DiscreteDistribution.cpp src/DiscreteDistribution.h src/Vector.cpp src/Vector.h src/Eigenvector.cpp src/Eigenvector.h src/Matrix.cpp src/Matrix.h src/Tensor.cpp src/Tensor.h Test/DiscreteDistributionTest.cpp)
	target_link_libraries(DiscreteDistributionTest util_c::util_c data_structure_c::data_structure_c m)

Data files

  1. Add data files to the cmake-build-debug folder.

C++ files

  1. If needed, comparator operators == and < should be implemented for map and set data structures.
    bool operator==(const Word &anotherWord) const{
        return (name == anotherWord.name);
    }
    bool operator<(const Word &anotherWord) const{
        return (name < anotherWord.name);
    }
  1. Do not forget to comment each function.
	/**
 	* A constructor of Word class which gets a String name as an input and assigns to the name variable.
	*
	* @param _name String input.
 	*/
	Word::Word(const string &_name) {
  1. Function names should follow caml case.
	int Word::charCount() const
  1. Write getter and setter methods.
	string Word::getName() const
	void Word::setName(const string &_name)
  1. Use catch.hpp for testing purposes. Add
#define CATCH_CONFIG_MAIN  // This tells Catch to provide a main() - only do this in one cpp file

line in only one of the test files. Add

#include "catch.hpp"

line in all test files. Example test file is given below:

TEST_CASE("DictionaryTest") {
    TxtDictionary lowerCaseDictionary = TxtDictionary("lowercase.txt", "turkish_misspellings.txt");
    TxtDictionary mixedCaseDictionary = TxtDictionary("mixedcase.txt", "turkish_misspellings.txt");
    TxtDictionary dictionary = TxtDictionary();
    SECTION("testSize"){
        REQUIRE(29 == lowerCaseDictionary.size());
        REQUIRE(58 == mixedCaseDictionary.size());
        REQUIRE(62113 == dictionary.size());
    }
    SECTION("testGetWord"){
        for (int i = 0; i < dictionary.size(); i++){
            REQUIRE_FALSE(nullptr == dictionary.getWord(i));
        }
    }
    SECTION("testLongestWordSize"){
        REQUIRE(1 == lowerCaseDictionary.longestWordSize());
        REQUIRE(1 == mixedCaseDictionary.longestWordSize());
        REQUIRE(21 == dictionary.longestWordSize());
    }
  1. Enumerated types should be declared with enum class.
	enum class Pos {
		ADJECTIVE,
		NOUN,
		VERB,
		ADVERB,
  1. Every header file should start with
	#ifndef MATH_DISTRIBUTION_H
	#define MATH_DISTRIBUTION_H

and end with

	#endif //MATH_DISTRIBUTION_H
  1. Do not forget to use const expression for parameters, if they will not be changed in the function.
	void Word::setName(const string &_name);
  1. Do not forget to use const expression for methods, which do not modify any class attribute. Also use [[dodiscard]]
	[[nodiscard]] bool isPunctuation() const;
  1. Use xmlparser package for parsing xml files.
    auto* doc = new XmlDocument("test.xml");
    doc->parse();
    XmlElement* root = doc->getFirstChild();
    XmlElement* firstChild = root->getFirstChild();
  1. Data structures: Use map for hash map, unordered_map for linked hash map, vector for array list, unordered_set for hash set

Releases

No releases published

Packages

 
 
 

Contributors