PHPackages                             olcaytaner/morphologicaldisambiguation - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. olcaytaner/morphologicaldisambiguation

ActiveLibrary[Utility &amp; Helpers](/categories/utility)

olcaytaner/morphologicaldisambiguation
======================================

Turkish Morphological Disambiguation library

1.0.2(2mo ago)05GPL-3.0-or-laterPHP

Since Apr 22Pushed 1mo agoCompare

[ Source](https://github.com/StarlangSoftware/TurkishMorphologicalDisambiguation-Php)[ Packagist](https://packagist.org/packages/olcaytaner/morphologicaldisambiguation)[ RSS](/packages/olcaytaner-morphologicaldisambiguation/feed)WikiDiscussions main Synced 3w ago

READMEChangelog (2)Dependencies (8)Versions (3)Used By (0)

Morphological Disambiguation
============================

[](#morphological-disambiguation)

Task Definition
---------------

[](#task-definition)

Morphological disambiguation is the problem of selecting accurate morphological parse of a word given its possible parses. These parses are generated by a morphological analyzer. In morphologically rich languages like Turkish, the number of possible parses for a given word is generally more than one. Each parse is considered as a different interpretation of a single word. Each interpretation consists of a root word and sequence of inflectional and derivational suffixes. The following table illustrates different interpretations of the word ‘‘üzerine’’.

üzer+Noun+A3sg+P3sg+Dat
üzer+Noun+A3sg+P2sg+Dat
üz+Verb+Pos+Aor+^DB+Adj+Zero+^DB+Noun+Zero+A3sg+P3sg+Dat
üz+Verb+Pos+Aor+^DB+Adj+Zero+^DB+Noun+Zero+A3sg+P2sg+Dat

As seen above, the first two parses share the same root but different suffix sequences. Similarly, the last two parses also share the same root, however sequence of morphemes are different. Given a parse such as

üz+Verb+Pos+Aor+^DB+Adj+Zero+^DB+Noun+Zero+A3sg+P3sg+Dat

each item is separated by ‘‘+’’ is a morphological feature such as Pos or Aor. Inflectional groups are identified as sequence of morphological features separated by derivational boundaries ^DB. The sequence of inflectional groups forms the term tag. Root word plus tag is named as word form. So, a word form is defined as follows:

IGroot+IG1+^DB+IG2+^DB+...+^DB+IGn

Then the morphological disambiguation problem can be defined as follows: For a given sentence represented by a sequence of words W = w1n = w1, w2, ..., wn, determine the sequence of parses T = t1n = t1, t2, ..., tn; where ti represents the correct parse of the word wi.

Data Annotation
---------------

[](#data-annotation)

### Preparation

[](#preparation)

1. Collect a set of sentences to annotate.
2. Each sentence in the collection must be named as xxxx.yyyyy in increasing order. For example, the first sentence to be annotated will be 0001.train, the second 0002.train, etc.
3. Put the sentences in the same folder such as *Turkish-Phrase*.
4. Build the [Java](https://github.com/starlangsoftware/TurkishMorphologicalDisambiguation) project and put the generated sentence-morphological-analyzer.jar file into another folder such as *Program*.
5. Put *Turkish-Phrase* and *Program* folders into a parent folder.

### Annotation

[](#annotation)

1. Open sentence-morphological-analyzer.jar file.
2. Wait until the data load message is displayed.
3. Click Open button in the Project menu.
4. Choose a file for annotation from the folder *Turkish-Phrase*.
5. For each word in the sentence, click the word, and choose correct morphological analysis for that word.
6. Click one of the next buttons to go to other files.

Classification DataSet Generation
---------------------------------

[](#classification-dataset-generation)

After annotating sentences, you can use [DataGenerator](https://github.com/starlangsoftware/DataGenerator-Py) package to generate classification dataset for the Morphological Disambiguation task.

Generation of ML Models
-----------------------

[](#generation-of-ml-models)

After generating the classification dataset as above, one can use the [Classification](https://github.com/starlangsoftware/Classification-Py) package to generate machine learning models for the Morphological Disambiguation task.

Simple Web Interface
====================

[](#simple-web-interface)

[Link 1](http://104.247.163.162/nlptoolkit/turkish-morphological-disambiguation.html) [Link 2](https://starlangsoftware.github.io/nlptoolkit-web-simple/turkish-morphological-disambiguation.html)

Annotated Datasets
==================

[](#annotated-datasets)

[Framenet &amp; Tourism](http://104.247.163.162/nlptoolkit/turkish-disambiguation1.html)

[Atis &amp; Gb &amp; Pud &amp; Imst &amp; Boun](http://104.247.163.162/nlptoolkit/turkish-disambiguation2.html)

[Kenet](http://104.247.163.162/nlptoolkit/turkish-disambiguation3.html)

[Penn-Treebank](http://104.247.163.162/nlptoolkit/turkish-disambiguation4.html)

Video Lectures
==============

[](#video-lectures)

[![](https://github.com/StarlangSoftware/TurkishMorphologicalDisambiguation/raw/master/video1.jpg)](https://youtu.be/vhp6Mse1vdM)[![](https://github.com/StarlangSoftware/TurkishMorphologicalDisambiguation/raw/master/video2.jpg)](https://youtu.be/lkFhIKdDSvw)[![](https://github.com/StarlangSoftware/TurkishMorphologicalDisambiguation/raw/master/video3.jpg)](https://youtu.be/ajXkhb8Hg3c)

For Developers
==============

[](#for-developers)

You can also see [Python](https://github.com/starlangsoftware/TurkishMorphologicalDisambiguation-Py), [Cython](https://github.com/starlangsoftware/TurkishMorphologicalDisambiguation-Cy), [Java](https://github.com/starlangsoftware/TurkishMorphologicalDisambiguation), [C](https://github.com/starlangsoftware/TurkishMorphologicalDisambiguation-C), [C++](https://github.com/starlangsoftware/TurkishMorphologicalDisambiguation-CPP), [Swift](https://github.com/starlangsoftware/TurkishMorphologicalDisambiguation-Swift), [Js](https://github.com/starlangsoftware/TurkishMorphologicalDisambiguation-Js), or [C#](https://github.com/starlangsoftware/TurkishMorphologicalDisambiguation-CS) repository.

Requirements
------------

[](#requirements)

- [Php 8.4 or higher](#php)
- [Git](#git)

### Php

[](#php)

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

```
php -V

```

You can find the latest version of Php [here](https://www.php.net/downloads/).

### Git

[](#git)

Install the [latest version of Git](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git).

Download Code
-------------

[](#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

```

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

```
git clone https://github.com/starlangsoftware/TurkishMorphologicalDisambiguation-Php.git

```

Open project with PhpStorm IDE
------------------------------

[](#open-project-with-phpstorm-ide)

Steps for opening the cloned project:

- Start IDE
- Select **File | Open** from main menu
- Choose `MorphologicalDisambiguation-Php` file
- Select open as project option
- Couple of seconds, dependencies will be downloaded.

For Contibutors
===============

[](#for-contibutors)

### composer.json file

[](#composerjson-file)

1. autoload is important when this package will be imported.

```
  "autoload": {
    "psr-4": {
      "olcaytaner\\WordNet\\": "src/"
    }
  },

```

2. Dependencies should be maximum (not only direct but also indirect references should also be given), everything directly in the code should be given here.

```
  "require-dev": {
    "phpunit/phpunit": "11.4.0",
    "olcaytaner/dictionary": "1.0.0",
    "olcaytaner/xmlparser": "1.0.1",
    "olcaytaner/morphologicalanalysis": "1.0.0"
  }

```

### Data files

[](#data-files)

1. Add data files to the project folder. Subprojects should include all data files of the parent projects.

### Php files

[](#php-files)

1. Do not forget to comment each function.

```
    /**
     * Returns true if specified semantic relation type presents in the relations list.
     *
     * @param SemanticRelationType $relationType element whose presence in the list is to be tested
     * @return bool true if specified semantic relation type presents in the relations list
     */
    public function containsRelationType(SemanticRelationType $relationType): bool{
        foreach ($this->relations as $relation){
            if ($relation instanceof SematicRelation && $relation->getRelationType() == $relationType){
                return true;
            }
        }
        return false;
    }

```

2. Function names should follow caml case.

```
    public function getRelation(int $index): Relation{

```

3. Write getter and setter methods.

```
    public function getOrigin(): ?string
    public function setName(string $name): void

```

4. Use standard javascript test style by extending the TestCase class. Use setup when necessary.

```
class WordNetTest extends TestCase
{
    private WordNet $turkish;

    protected function setUp(): void
    {
        ini_set('memory_limit', '450M');
        $this->turkish = new WordNet();
    }

    public function testSize()
    {
        $this->assertEquals(78327, $this->turkish->size());
    }

```

5. Enumerated types should be declared with enum.

```
enum CategoryType
{
    case MATHEMATICS;
    case SPORT;
    case MUSIC;
    case SLANG;
    case BOTANIC;

```

6. If there are multiple constructors for a class, define them as constructor1, constructor2, ..., then from the original constructor call these methods.

```
    public function constructor1(string $path, string $fileName): void
    public function constructor2(string $path, string $extension, int $index): void
    public function __construct(string $path, string $extension, ?int $index = null)

```

7. Use \_\_toString method if necessary to create strings from objects.

```
    public function __toString(): string

```

8. Use xmlparser package for parsing xml files.

```
  $doc = new XmlDocument("../test.xml");

```

###  Health Score

34

—

LowBetter than 75% of packages

Maintenance87

Actively maintained with recent releases

Popularity4

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity35

Early-stage or recently created project

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~16 days

Total

2

Last Release

77d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/8903e2f2ee6f2b7849f720cf76786a074796f23ac27e12bde3036de5ca12de3f?d=identicon)[olcaytaner](/maintainers/olcaytaner)

---

Top Contributors

[![olcaytaner](https://avatars.githubusercontent.com/u/39756553?v=4)](https://github.com/olcaytaner "olcaytaner (4 commits)")

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/olcaytaner-morphologicaldisambiguation/health.svg)

```
[![Health](https://phpackages.com/badges/olcaytaner-morphologicaldisambiguation/health.svg)](https://phpackages.com/packages/olcaytaner-morphologicaldisambiguation)
```

###  Alternatives

[typo3/cms-styleguide

TYPO3 extension to showcase TYPO3 Backend capabilities

106760.3k34](/packages/typo3-cms-styleguide)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
