Giter VIP home page Giter VIP logo

turkishmorphologicalanalysis-py's Introduction

Morphological Analysis

Morphology

In linguistics, the term morphology refers to the study of the internal structure of words. Each word is assumed to consist of one or more morphemes, which can be defined as the smallest linguistic unit having a particular meaning or grammatical function. One can come across morphologically simplex words, i.e. roots, as well as morphologically complex ones, such as compounds or affixed forms.

Batı-lı-laş-tır-ıl-ama-yan-lar-dan-mış-ız west-With-Make-Caus-Pass-Neg.Abil-Nom-Pl-Abl-Evid-A3Pl ‘It appears that we are among the ones that cannot be westernized.’

The morphemes that constitute a word combine in a (more or less) strict order. Most morphologically complex words are in the ”ROOT-SUFFIX1-SUFFIX2-...” structure. Affixes have two types: (i) derivational affixes, which change the meaning and sometimes also the grammatical category of the base they are attached to, and (ii) inflectional affixes serving particular grammatical functions. In general, derivational suffixes precede inflectional ones. The order of derivational suffixes is reflected on the meaning of the derived form. For instance, consider the combination of the noun göz ‘eye’ with two derivational suffixes -lIK and -CI: Even though the same three morphemes are used, the meaning of a word like gözcülük ‘scouting’ is clearly different from that of gözlükçü ‘optician’.

Dilbaz

Here we present a new morphological analyzer, which is (i) open: The latest version of source codes, the lexicon, and the morphotactic rule engine are all available here, (ii) extendible: One of the disadvantages of other morphological analyzers is that their lexicons are fixed or unmodifiable, which prevents to add new bare-forms to the morphological analyzer. In our morphological analyzer, the lexicon is in text form and is easily modifiable, (iii) fast: Morphological analysis is one of the core components of any NLP process. It must be very fast to handle huge corpora. Compared to other morphological analyzers, our analyzer is capable of analyzing hundreds of thousands words per second, which makes it one of the fastest Turkish morphological analyzers available.

The morphological analyzer consists of five main components, namely, a lexicon, a finite state transducer, a rule engine for suffixation, a trie data structure, and a least recently used (LRU) cache.

In this analyzer, we assume all idiosyncratic information to be encoded in the lexicon. While phonologically conditioned allomorphy will be dealt with by the transducer, other types of allomorphy, all exceptional forms to otherwise regular processes, as well as words formed through derivation (except for the few transparently compositional derivational suffixes are considered to be included in the lexicon.

In our morphological analyzer, finite state transducer is encoded in an xml file.

To overcome the irregularities and also to accelerate the search for the bareforms, we use a trie data structure in our morphological analyzer, and store all words in our lexicon in that data structure. For the regular words, we only store that word in our trie, whereas for irregular words we store both the original form and some prefix of that word.

Video Lectures

For Developers

You can also see Cython, Java, C++, C, Swift, 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 install NlpToolkit-MorphologicalAnalysis

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/TurkishMorphologicalAnalysis-Py.git

Open project with Pycharm IDE

Steps for opening the cloned project:

  • Start IDE
  • Select File | Open from main menu
  • Choose MorphologicalAnalysis-Py file
  • Select open as project option

Detailed Description

Creating FsmMorphologicalAnalyzer

FsmMorphologicalAnalyzer provides Turkish morphological analysis. This class can be created as follows:

fsm = FsmMorphologicalAnalyzer()

This generates a new TxtDictionary type dictionary from turkish_dictionary.txt with fixed cache size 100000 and by using turkish_finite_state_machine.xml.

Creating a morphological analyzer with different cache size, dictionary or finite state machine is also possible.

  • With different cache size,

      fsm = FsmMorphologicalAnalyzer(50000);   
    
  • Using a different dictionary,

      fsm = FsmMorphologicalAnalyzer("my_turkish_dictionary.txt");   
    
  • Specifying both finite state machine and dictionary,

      fsm = FsmMorphologicalAnalyzer("fsm.xml", "my_turkish_dictionary.txt") ;      
    
  • Giving finite state machine and cache size with creating TxtDictionary object,

      dictionary = TxtDictionary("my_turkish_dictionary.txt");
      fsm = FsmMorphologicalAnalyzer("fsm.xml", dictionary, 50000) ;
    
  • With different finite state machine and creating TxtDictionary object,

      dictionary = TxtDictionary("my_turkish_dictionary.txt", "my_turkish_misspelled.txt");
      fsm = FsmMorphologicalAnalyzer("fsm.xml", dictionary);
    

Word level morphological analysis

For morphological analysis, morphologicalAnalysis(String word) method of FsmMorphologicalAnalyzer is used. This returns FsmParseList object.

fsm = FsmMorphologicalAnalyzer()
word = "yarına"
fsmParseList = fsm.morphologicalAnalysis(word)
for i in range(fsmParseList.size()):
  	print(fsmParseList.getFsmParse(i).transitionList())

Output

yar+NOUN+A3SG+P2SG+DAT
yar+NOUN+A3SG+P3SG+DAT
yarı+NOUN+A3SG+P2SG+DAT
yarın+NOUN+A3SG+PNON+DAT

From FsmParseList, a single FsmParse can be obtained as follows:

parse = fsmParseList.getFsmParse(0)
print(parse.transitionList())  

Output

yar+NOUN+A3SG+P2SG+DAT

Sentence level morphological analysis

morphologicalAnalysis(Sentence sentence) method of FsmMorphologicalAnalyzer is used. This returns FsmParseList[] object.

fsm = FsmMorphologicalAnalyzer()
sentence = Sentence("Yarın doktora gidecekler")
parseLists = fsm.morphologicalAnalysis(sentence)
for i in range(len(parseLists)):
    for j in range(parseLists[i].size()):
        parse = parseLists[i].getFsmParse(j)
        print(parse.transitionList())
    print("-----------------")

Output

-----------------
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

Cite

@inproceedings{yildiz-etal-2019-open,
	title = "An Open, Extendible, and Fast {T}urkish Morphological Analyzer",
	author = {Y{\i}ld{\i}z, Olcay Taner  and
  	Avar, Beg{\"u}m  and
  	Ercan, G{\"o}khan},
	booktitle = "Proceedings of the International Conference on Recent Advances in Natural Language Processing (RANLP 2019)",
	month = sep,
	year = "2019",
	address = "Varna, Bulgaria",
	publisher = "INCOMA Ltd.",
	url = "https://www.aclweb.org/anthology/R19-1156",
	doi = "10.26615/978-954-452-056-4_156",
	pages = "1364--1372",
}

turkishmorphologicalanalysis-py's People

Contributors

gokhanercan avatar ilkay500 avatar olcaytaner avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

turkishmorphologicalanalysis-py's Issues

Biraz Dökümantasyon ve Örnek

Merhaba, elinize sağlık çok güzel bir tool yaratmışsınız. Machine Learning insanları olarak Türkçe ile uğraşmak bizim için zor oluyor eklerden dolayı. Ama bu kodu nasıl çalıştıracağız, ne hangi anlama geliyor (OA: özel isim vb) gibi şeyleri daha detaylı tanıtırsanız yanlış kullanmamış oluruz. İnsan aklına kolay yatana daha yatkın oluyor bu gibi durumlarda, yanlış çıkarımlar olabiliyor.

Yeniden teşekküreler, iyi çalışmalar

Soru : Görece karmaşık fiil çekim için kabiliyetleri

Merhabalar
Doğal dil işleme jargonuna pek hakim değilim hatam varsa bağışlayın.
Mevcutta "yap" şeklindeki bir fiili State ve Transformation kullanarak gelecek zaman ("yapacak") gibi çekimlere dönüştürebiliyorum. Fakat "yapılması" formatına çevirmeyini sağlayamadım. Mevcutta bu nasıl mümkün olabilir? birden çok state ve transformation kullanmayı düşündüm fakat başarılı olamadım.

Python 3.10.4 üzerinde kurulum hatası

Python 3.10.4 te, pip üzerinden install ile veya Github dan indirilen kodun local de 'python -m setup.py install' komutuyla kurulumu esnasında aşağıdaki hatayı alıyorum.Github dan indirdiğim repoda, 'C:\Users<kullanici.adi>\Downloads\TurkishMorphologicalAnalysis-Py-master' konumunda bulunan Readme.md dosyasının içini boşalttığım zaman kurulumu başarıyla gerçekleştirebildim. Sanırım normalde utf-8 kodlanmış belge, cp-1254 kodlaması ile okunmaya çalışılıyor. Okuma hatası kurulumu durduruyor.
C:\Users\<kullanici.adi>\Downloads\TurkishMorphologicalAnalysis-Py-master>python -m setup.py install Traceback (most recent call last): File "C:\Users\<kullanici.adi>\AppData\Local\Programs\Python\Python310\lib\runpy.py", line 187, in _run_module_as_main mod_name, mod_spec, code = _get_module_details(mod_name, _Error) File "C:\Users\<kullanici.adi>\AppData\Local\Programs\Python\Python310\lib\runpy.py", line 110, in _get_module_details __import__(pkg_name) File "C:\Users\<kullanici.adi>\Downloads\TurkishMorphologicalAnalysis-Py-master\setup.py", line 5, in <module> long_description = (this_directory / "README.md").read_text() File "C:\Users\<kullanici.adi>\AppData\Local\Programs\Python\Python310\lib\pathlib.py", line 1133, in read_text return f.read() File "C:\Users\<kullanici.adi>\AppData\Local\Programs\Python\Python310\lib\encodings\cp1254.py", line 23, in decode return codecs.charmap_decode(input,self.errors,decoding_table)[0] UnicodeDecodeError: 'charmap' codec can't decode byte 0x9d in position 755: character maps to <undefined>

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.