ahmetaa / zemberek-nlp

NLP tools for Turkish.
Other
1.14k stars 207 forks source link

NullPointerException During Word Generation #200

Closed ozturkberkay closed 5 years ago

ozturkberkay commented 5 years ago

I was trying out the GenerateWords example using Python:

word = 'armut'

number = ['A3sg', 'A3p1']
possessives = ['P1sg', 'P2sg', 'P3sg']
cases = ['Dat', 'Loc', 'Abl']

morphology = TurkishMorphology.builder().setLexicon(word).disableCache().build()

dictionary_item = morphology.getLexicon().getMatchingItems(word).get(0)

for numberM in number:
    for possessiveM in possessives:
        for caseM in cases:
            try:
                results = morphology.getWordGenerator().generate(dictionary_item, numberM, possessiveM, caseM)
                for result in results:
                    print('Surface Form: %s' % result.surface)
                    print('Analysis: %s\n' % result.analysis)
            except jp.JavaException as e:
                print(e.message())
                print(e.stacktrace())
Surface Form: armuduma
Analysis: [armut:Noun] armud:Noun+A3sg+um:P1sg+a:Dat
Surface Form: armudumda
Analysis: [armut:Noun] armud:Noun+A3sg+um:P1sg+da:Loc
Surface Form: armudumdan
Analysis: [armut:Noun] armud:Noun+A3sg+um:P1sg+dan:Abl
Surface Form: armuduna
Analysis: [armut:Noun] armud:Noun+A3sg+un:P2sg+a:Dat
Surface Form: armudunda
Analysis: [armut:Noun] armud:Noun+A3sg+un:P2sg+da:Loc
Surface Form: armudundan
Analysis: [armut:Noun] armud:Noun+A3sg+un:P2sg+dan:Abl
Surface Form: armuduna
Analysis: [armut:Noun] armud:Noun+A3sg+u:P3sg+na:Dat
Surface Form: armudunda
Analysis: [armut:Noun] armud:Noun+A3sg+u:P3sg+nda:Loc
Surface Form: armudundan
Analysis: [armut:Noun] armud:Noun+A3sg+u:P3sg+ndan:Abl
None
java.lang.NullPointerException
        at zemberek.morphology.generator.WordGenerator.generate(WordGenerator.java:114)
        at zemberek.morphology.generator.WordGenerator.generate(WordGenerator.java:91)

None
java.lang.NullPointerException
        at zemberek.morphology.generator.WordGenerator.generate(WordGenerator.java:114)
        at zemberek.morphology.generator.WordGenerator.generate(WordGenerator.java:91)

None
java.lang.NullPointerException
        at zemberek.morphology.generator.WordGenerator.generate(WordGenerator.java:114)
        at zemberek.morphology.generator.WordGenerator.generate(WordGenerator.java:91)

None
java.lang.NullPointerException
        at zemberek.morphology.generator.WordGenerator.generate(WordGenerator.java:114)
        at zemberek.morphology.generator.WordGenerator.generate(WordGenerator.java:91)

None
java.lang.NullPointerException
        at zemberek.morphology.generator.WordGenerator.generate(WordGenerator.java:114)
        at zemberek.morphology.generator.WordGenerator.generate(WordGenerator.java:91)

None
java.lang.NullPointerException
        at zemberek.morphology.generator.WordGenerator.generate(WordGenerator.java:114)
        at zemberek.morphology.generator.WordGenerator.generate(WordGenerator.java:91)

None
java.lang.NullPointerException
        at zemberek.morphology.generator.WordGenerator.generate(WordGenerator.java:114)
        at zemberek.morphology.generator.WordGenerator.generate(WordGenerator.java:91)

None
java.lang.NullPointerException
        at zemberek.morphology.generator.WordGenerator.generate(WordGenerator.java:114)tor.generate(WordGenerator.java:114)               tor.generate(WordGenerator.java:91)
        at zemberek.morphology.generator.WordGenerator.generate(WordGenerator.java:91)

None
java.lang.NullPointerException
        at zemberek.morphology.generator.WordGenerator.generate(WordGenerator.java:114)        at zemberek.morphology.generator.WordGenerator.generate(WordGenerator.java:91)

Also I noticed that in the README.md of the morphology folder, this line of code was in the Word Generation example:

TurkishMorphology morphology =
    TurkishMorphology.builder().addDictionaryLines("armut").disableCache().build();

Using addDictionaryLines() instead of setLexicon() gives me this error:

AttributeError: 'zemberek.morphology.TurkishMorphology$Builder' object has no attribute 'addDictionaryLines

Probably I'm doing something wrong. Any help is much appreciated.

ahmetaa commented 5 years ago

Error is caused by A3p1 . it must be A3pl

After 0.16.0, There were some changes in TurkishMorphology building mechanism, so correct way is

TurkishMorphology morphology =
    TurkishMorphology.builder().setLexicon("armut").disableCache().build();
ozturkberkay commented 5 years ago

@ahmetaa Thanks for pointing out! I did not noticed that. Also I'll make a pull request to fix the example in the README.md

ahmetaa commented 5 years ago

it is better we change the Readme file after releasing the next version. Because most people are using stable version so doc should reflect the stable version.