Turkish Morphological Disambiguation Library
Project description
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
- Collect a set of sentences to annotate.
- 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.
- Put the sentences in the same folder such as Turkish-Phrase.
- Build the Java project and put the generated sentence-morphological-analyzer.jar file into another folder such as Program.
- Put Turkish-Phrase and Program folders into a parent folder.
Annotation
- Open sentence-morphological-analyzer.jar file.
- Wait until the data load message is displayed.
- Click Open button in the Project menu.
- Choose a file for annotation from the folder Turkish-Phrase.
- For each word in the sentence, click the word, and choose correct morphological analysis for that word.
- 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.
For Developers
You can also see Cython, Java, C++, Js, Swift, 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 install NlpToolkit-MorphologicalDisambiguation
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-Py.git
Open project with Pycharm IDE
Steps for opening the cloned project:
- Start IDE
- Select File | Open from main menu
- Choose
DataStructure-Py
file - Select open as project option
- Couple of seconds, project will be downloaded.
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 analysesmorphologicalDisambiguator = RootFirstDisambiguation()
-
Using
RootWordStatisticsDisambiguation
, the one that chooses the root that is the most frequently used amongst the given analysesmorphologicalDisambiguator = RootWordStatisticsDisambiguation()
-
Using
LongestRootFirstDisambiguation
, the one that chooses the longest root among the given rootsmorphologicalDisambiguator = LongestRootFirstDisambiguation()
-
Using
HmmDisambiguation
, the one that chooses using an Hmm-based algorithmmorphologicalDisambiguator = HmmDisambiguation()
-
Using
DummyDisambiguation
, the one that chooses a random one amongst the given analysesmorphologicalDisambiguator = 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:
corpus = 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.
fsm = FsmMorphologicalAnalyzer()
A sentence can be disambiguated as follows:
sentence = Sentence("Yarın doktora gidecekler")
fsmParseList = fsm.robustMorphologicalAnalysis(sentence)
print("All parses\n")
print("--------------------------\n")
for i in range(len(fsmParseList)):
print(fsmParseList[i])
candidateParses = morphologicalDisambiguator.disambiguate(fsmParseList)
print("Parses after disambiguation\n")
print("--------------------------"\n)
for i in range(candidateParses.size()):
print(candidateParses.get(i) + "\n")
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"
}
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
File details
Details for the file NlpToolkit-MorphologicalDisambiguation-1.0.15.tar.gz
.
File metadata
- Download URL: NlpToolkit-MorphologicalDisambiguation-1.0.15.tar.gz
- Upload date:
- Size: 744.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.26.0 setuptools/47.1.0 requests-toolbelt/0.9.1 tqdm/4.48.2 CPython/3.7.9
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 9a39c6a94edac2101ef97e3d1414c9e387cbd2dd484d2a84c0e3c74ce5494b90 |
|
MD5 | 2d5107d381c57b7ee947255c4badd67d |
|
BLAKE2b-256 | ae6c2825343e0915b54aab0aae2fa539b0842b5fda714084516ec8a9d002b295 |