Giter Club home page Giter Club logo

turkishmorphologicaldisambiguation's Introduction

Morphological Disambiguation

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

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 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. Main Folder

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. Open File
  4. Choose a file for annotation from the folder Turkish-Phrase.
    Choose File
  5. For each word in the sentence, click the word, and choose correct morphological analysis for that word. Morphology Annotation
  6. Click one of the next buttons to go to other files.

Classification DataSet Generation

After annotating sentences, you can use DataGenerator package to generate classification dataset for the Morphological Disambiguation task.

Generation of ML Models

After generating the classification dataset as above, one can use the Classification package to generate machine learning models for the Morphological Disambiguation task.

Video Lectures

For Developers

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

Requirements

Java

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

java -version

If you don't have a compatible version, you can download either Oracle JDK or OpenJDK

Maven

To check if you have Maven installed, use the following command:

mvn --version

To install Maven, you can follow the instructions here.

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

git clone https://github.com/starlangsoftware/TurkishMorphologicalDisambiguation.git

Open project with IntelliJ IDEA

Steps for opening the cloned project:

  • Start IDE
  • Select File | Open from main menu
  • Choose MorphologicalDisambiguation/pom.xml file
  • Select open as project option
  • Couple of seconds, dependencies with Maven will be downloaded.

Compile

From IDE

After being done with the downloading and Maven indexing, select Build Project option from Build menu. After compilation process, user can run MorphologicalDisambiguation.

From Console

Use below line to generate jar file:

 mvn install

Maven Usage

    <dependency>
        <groupId>io.github.starlangsoftware</groupId>
        <artifactId>MorphologicalDisambiguation</artifactId>
        <version>1.0.11</version>
    </dependency>

Detailed Description

Creating MorphologicalDisambiguator

MorphologicalDisambiguator provides Turkish morphological disambiguation. There are possible disambiguation techniques. Depending on the technique used, disambiguator can be instantiated as follows:

  • Using RootFirstDisambiguation, the one that chooses only the root amongst the given analyses

      morphologicalDisambiguator = new RootFirstDisambiguation();
    
  • Using RootWordStatisticsDisambiguation, the one that chooses the root that is the most frequently used amongst the given analyses

      morphologicalDisambiguator = new RootWordStatisticsDisambiguation();
    
  • Using LongestRootFirstDisambiguation, the one that chooses the longest root among the given roots

      morphologicalDisambiguator = new LongestRootFirstDisambiguation();
    
  • Using HmmDisambiguation, the one that chooses using an Hmm-based algorithm

      morphologicalDisambiguator = new HmmDisambiguation();
    
  • Using DummyDisambiguation, the one that chooses a random one amongst the given analyses

      morphologicalDisambiguator = new DummyDisambiguation();
    

Training MorphologicalDisambiguator

To train the disambiguator, an instance of DisambiguationCorpus object is needed. This can be instantiated and the disambiguator can be trained and saved as follows:

DisambiguationCorpus corpus = new DisambiguationCorpus("penn_treebank.txt");
morphologicalDisambiguator.train(corpus);
morphologicalDisambiguator.saveModel();

Sentence Disambiguation

To disambiguate a sentence, a FsmMorphologicalAnalyzer instance is required. This can be created as below, further information can be found here.

FsmMorphologicalAnalyzer fsm = new FsmMorphologicalAnalyzer();

A sentence can be disambiguated as follows:

Sentence sentence = new Sentence("Yarın doktora gidecekler");
FsmParseList[] fsmParseList = fsm.robustMorphologicalAnalysis(sentence);
System.out.println("All parses");
System.out.println("--------------------------");
for(int i = 0; i < fsmParseList.length; i++){
    System.out.println(fsmParseList[i]);
}
ArrayList<FsmParse> candidateParses = morphologicalDisambiguator.disambiguate(fsmParseList);
System.out.println("Parses after disambiguation");
System.out.println("--------------------------");
for(int i = 0; i < candidateParses.size(); i++){
    System.out.println(candidateParses.get(i));
}

Output

All parses
--------------------------
yar+NOUN+A3SG+P2SG+NOM
yar+NOUN+A3SG+PNON+GEN
yar+VERB+POS+IMP+A2PL
yarı+NOUN+A3SG+P2SG+NOM
yarın+NOUN+A3SG+PNON+NOM

doktor+NOUN+A3SG+PNON+DAT
doktora+NOUN+A3SG+PNON+NOM

git+VERB+POS+FUT+A3PL
git+VERB+POS^DB+NOUN+FUTPART+A3PL+PNON+NOM

Parses after disambiguation
--------------------------
yarın+NOUN+A3SG+PNON+NOM
doktor+NOUN+A3SG+PNON+DAT
git+VERB+POS+FUT+A3PL

Cite

@InProceedings{gorgunyildiz12,
author="G{\"o}rg{\"u}n, Onur
and Yildiz, Olcay Taner",
editor="Gelenbe, Erol
and Lent, Ricardo
and Sakellari, Georgia",
title="A Novel Approach to Morphological Disambiguation for Turkish",
booktitle="Computer and Information Sciences II",
year="2012",
publisher="Springer London",
address="London",
pages="77--83",
isbn="978-1-4471-2155-8"
}

turkishmorphologicaldisambiguation's People

Contributors

barbaros-durusoy avatar dependabot[bot] avatar gokceuludogan avatar ilkay500 avatar oguzkeremyildiz avatar olcaytaner avatar pselen avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

turkishmorphologicaldisambiguation's Issues

error on mvn install

Here my error:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-javadoc-plugin:2.9.1:jar (attach-javadocs) on project MorphologicalDisambiguation: MavenReportException: Error while creating archive:

More robust serialization mechanism needed - json serialization would be better in terms of robustness and performance

Serialized object highly dependent on class types and hierarchies. NGram or similar java object serialization are sensitive to member changes of such class types. Library users should frequently update such serialized resource files on their implementations. If a serialized file "word2.gram" file was serialized by the previous version of the class NGram or Word, loading previous models would yields exceptions like the following:

java.io.InvalidClassException: Dictionary.Word; local class incompatible: stream classdesc serialVersionUID = 2071394599407976767, local class serialVersionUID = -2752853122563649172
at java.io.ObjectStreamClass.initNonProxy(ObjectStreamClass.java:621)
at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1623)
at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1518)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1774)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1351)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:371)
at java.util.HashMap.readObject(HashMap.java:1394)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:483)
at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:1017)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1896)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1801)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1351)
at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1993)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1918)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1801)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1351)
at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1993)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1918)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1801)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1351)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:371)
at MorphologicalDisambiguation.NaiveDisambiguation.loadModel(NaiveDisambiguation.java:32)
at MorphologicalDisambiguation.RootFirstDisambiguation.loadModel(RootFirstDisambiguation.java:187)

https://github.com/olcaytaner/MorphologicalDisambiguation/blob/master/src/main/java/MorphologicalDisambiguation/NaiveDisambiguation.java#L27

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.