nlptoolkit-morphologicalanalysis 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (65) hide show
  1. package/README.md +144 -0
  2. package/dist/Corpus/DisambiguatedWord.d.ts +20 -0
  3. package/dist/Corpus/DisambiguatedWord.js +38 -0
  4. package/dist/Corpus/DisambiguatedWord.js.map +1 -0
  5. package/dist/Corpus/DisambiguationCorpus.d.ts +4 -0
  6. package/dist/Corpus/DisambiguationCorpus.js +54 -0
  7. package/dist/Corpus/DisambiguationCorpus.js.map +1 -0
  8. package/dist/MorphologicalAnalysis/FiniteStateMachine.d.ts +63 -0
  9. package/dist/MorphologicalAnalysis/FiniteStateMachine.js +178 -0
  10. package/dist/MorphologicalAnalysis/FiniteStateMachine.js.map +1 -0
  11. package/dist/MorphologicalAnalysis/FsmMorphologicalAnalyzer.d.ts +399 -0
  12. package/dist/MorphologicalAnalysis/FsmMorphologicalAnalyzer.js +1255 -0
  13. package/dist/MorphologicalAnalysis/FsmMorphologicalAnalyzer.js.map +1 -0
  14. package/dist/MorphologicalAnalysis/FsmParse.d.ts +290 -0
  15. package/dist/MorphologicalAnalysis/FsmParse.js +684 -0
  16. package/dist/MorphologicalAnalysis/FsmParse.js.map +1 -0
  17. package/dist/MorphologicalAnalysis/FsmParseList.d.ts +96 -0
  18. package/dist/MorphologicalAnalysis/FsmParseList.js +242 -0
  19. package/dist/MorphologicalAnalysis/FsmParseList.js.map +1 -0
  20. package/dist/MorphologicalAnalysis/InflectionalGroup.d.ts +77 -0
  21. package/dist/MorphologicalAnalysis/InflectionalGroup.js +213 -0
  22. package/dist/MorphologicalAnalysis/InflectionalGroup.js.map +1 -0
  23. package/dist/MorphologicalAnalysis/MetamorphicParse.d.ts +63 -0
  24. package/dist/MorphologicalAnalysis/MetamorphicParse.js +592 -0
  25. package/dist/MorphologicalAnalysis/MetamorphicParse.js.map +1 -0
  26. package/dist/MorphologicalAnalysis/MorphologicalParse.d.ts +301 -0
  27. package/dist/MorphologicalAnalysis/MorphologicalParse.js +969 -0
  28. package/dist/MorphologicalAnalysis/MorphologicalParse.js.map +1 -0
  29. package/dist/MorphologicalAnalysis/MorphologicalTag.d.ts +510 -0
  30. package/dist/MorphologicalAnalysis/MorphologicalTag.js +525 -0
  31. package/dist/MorphologicalAnalysis/MorphologicalTag.js.map +1 -0
  32. package/dist/MorphologicalAnalysis/State.d.ts +40 -0
  33. package/dist/MorphologicalAnalysis/State.js +64 -0
  34. package/dist/MorphologicalAnalysis/State.js.map +1 -0
  35. package/dist/MorphologicalAnalysis/Transition.d.ts +159 -0
  36. package/dist/MorphologicalAnalysis/Transition.js +751 -0
  37. package/dist/MorphologicalAnalysis/Transition.js.map +1 -0
  38. package/index.js +12 -0
  39. package/package.json +30 -0
  40. package/penntreebank.txt +208431 -0
  41. package/source/Corpus/DisambiguatedWord.ts +29 -0
  42. package/source/Corpus/DisambiguationCorpus.ts +39 -0
  43. package/source/MorphologicalAnalysis/FiniteStateMachine.ts +165 -0
  44. package/source/MorphologicalAnalysis/FsmMorphologicalAnalyzer.ts +1256 -0
  45. package/source/MorphologicalAnalysis/FsmParse.ts +664 -0
  46. package/source/MorphologicalAnalysis/FsmParseList.ts +238 -0
  47. package/source/MorphologicalAnalysis/InflectionalGroup.ts +210 -0
  48. package/source/MorphologicalAnalysis/MetamorphicParse.ts +589 -0
  49. package/source/MorphologicalAnalysis/MorphologicalParse.ts +995 -0
  50. package/source/MorphologicalAnalysis/MorphologicalTag.ts +510 -0
  51. package/source/MorphologicalAnalysis/State.ts +59 -0
  52. package/source/MorphologicalAnalysis/Transition.ts +733 -0
  53. package/source/tsconfig.json +13 -0
  54. package/tests/DisambiguationCorpusTest.ts +12 -0
  55. package/tests/FiniteStateMachineTest.ts +87 -0
  56. package/tests/FsmMorphologicalAnalyzerTest.ts +204 -0
  57. package/tests/FsmParseListTest.ts +90 -0
  58. package/tests/FsmParseTest.ts +66 -0
  59. package/tests/InflectionalGroupTest.ts +84 -0
  60. package/tests/MorphologicalParseTest.ts +152 -0
  61. package/tests/TransitionTest.ts +174 -0
  62. package/tsconfig.json +15 -0
  63. package/turkish_dictionary.txt +62120 -0
  64. package/turkish_finite_state_machine.xml +1887 -0
  65. package/turkish_misspellings.txt +148932 -0
@@ -0,0 +1,13 @@
1
+ {
2
+ "compilerOptions": {
3
+ "outDir": "../dist",
4
+ "module": "umd",
5
+ "target": "es6",
6
+ "sourceMap": true,
7
+ "noImplicitAny": true,
8
+ "strictNullChecks": false,
9
+ "removeComments": false,
10
+ "moduleResolution": "node",
11
+ "declaration": true
12
+ }
13
+ }
@@ -0,0 +1,12 @@
1
+ import {DisambiguationCorpus} from "../dist/Corpus/DisambiguationCorpus";
2
+ import * as assert from "assert";
3
+
4
+ describe('DisambiguationCorpusTest', function() {
5
+ describe('DisambiguationCorpusTest', function() {
6
+ it('testCorpus', function() {
7
+ let corpus = new DisambiguationCorpus("penntreebank.txt");
8
+ assert.strictEqual(19109, corpus.sentenceCount());
9
+ assert.strictEqual(170211, corpus.numberOfWords());
10
+ });
11
+ });
12
+ });
@@ -0,0 +1,87 @@
1
+ import * as assert from "assert";
2
+ import {FiniteStateMachine} from "../dist/MorphologicalAnalysis/FiniteStateMachine";
3
+ import {CounterHashMap} from "nlptoolkit-datastructure/dist/CounterHashMap";
4
+
5
+ describe('FiniteStateMachineTest', function() {
6
+ describe('FiniteStateMachineTest', function() {
7
+ let fsm = new FiniteStateMachine("turkish_finite_state_machine.xml");
8
+ let stateList = fsm.getStates();
9
+ it('testStateCount', function() {
10
+ assert.strictEqual(139, stateList.length);
11
+ });
12
+ it('testStartEndStates', function() {
13
+ let endStateCount = 0;
14
+ for (let state of stateList){
15
+ if (state.isEndState()){
16
+ endStateCount++;
17
+ }
18
+ }
19
+ assert.strictEqual(35, endStateCount);
20
+ let posCounts = new CounterHashMap<string>();
21
+ for (let state of stateList){
22
+ posCounts.put(state.getPos());
23
+ }
24
+ assert.strictEqual(1, posCounts.get("HEAD"));
25
+ assert.strictEqual(6, posCounts.get("PRON"));
26
+ assert.strictEqual(1, posCounts.get("PROP"));
27
+ assert.strictEqual(8, posCounts.get("NUM"));
28
+ assert.strictEqual(7, posCounts.get("ADJ"));
29
+ assert.strictEqual(1, posCounts.get("INTERJ"));
30
+ assert.strictEqual(1, posCounts.get("DET"));
31
+ assert.strictEqual(1, posCounts.get("ADVERB"));
32
+ assert.strictEqual(1, posCounts.get("QUES"));
33
+ assert.strictEqual(1, posCounts.get("CONJ"));
34
+ assert.strictEqual(26, posCounts.get("VERB"));
35
+ assert.strictEqual(1, posCounts.get("POSTP"));
36
+ assert.strictEqual(1, posCounts.get("DUP"));
37
+ assert.strictEqual(11, posCounts.get("NOUN"));
38
+ });
39
+ it('testTransitionCount', function() {
40
+ let transitionCount = 0;
41
+ for (let state of stateList){
42
+ transitionCount += fsm.getTransitions(state).length;
43
+ }
44
+ assert.strictEqual(779, transitionCount);
45
+ });
46
+ it('testTransitionWith', function() {
47
+ let transitionCounts = new CounterHashMap<string>();
48
+ for (let state of stateList){
49
+ let transitions = fsm.getTransitions(state);
50
+ for (let transition of transitions){
51
+ transitionCounts.put(transition.toString());
52
+ }
53
+ }
54
+ let topList = transitionCounts.topN(5);
55
+ assert.strictEqual("0", topList[0][0]);
56
+ assert.strictEqual(111, topList[0][1]);
57
+ assert.strictEqual("lAr", topList[1][0]);
58
+ assert.strictEqual(37, topList[1][1]);
59
+ assert.strictEqual("DHr", topList[2][0]);
60
+ assert.strictEqual(28, topList[2][1]);
61
+ assert.strictEqual("Hn", topList[3][0]);
62
+ assert.strictEqual(24, topList[3][1]);
63
+ assert.strictEqual("lArH", topList[4][0]);
64
+ assert.strictEqual(23, topList[4][1]);
65
+ });
66
+ it('testTransitionWithName', function() {
67
+ let transitionCounts = new CounterHashMap<string>();
68
+ for (let state of stateList){
69
+ let transitions = fsm.getTransitions(state);
70
+ for (let transition of transitions){
71
+ transitionCounts.put(transition.getWith());
72
+ }
73
+ }
74
+ let topList = transitionCounts.topN(5);
75
+ assert.strictEqual("", topList[0][0]);
76
+ assert.strictEqual(52, topList[0][1]);
77
+ assert.strictEqual("^DB+VERB+CAUS", topList[1][0]);
78
+ assert.strictEqual(33, topList[1][1]);
79
+ assert.strictEqual("^DB+VERB+PASS", topList[2][0]);
80
+ assert.strictEqual(31, topList[2][1]);
81
+ assert.strictEqual("A3PL", topList[3][0]);
82
+ assert.strictEqual(28, topList[3][1]);
83
+ assert.strictEqual("LOC", topList[4][0]);
84
+ assert.strictEqual(24, topList[4][1]);
85
+ });
86
+ });
87
+ });
@@ -0,0 +1,204 @@
1
+ import * as assert from "assert";
2
+ import {FsmMorphologicalAnalyzer} from "../dist/MorphologicalAnalysis/FsmMorphologicalAnalyzer";
3
+ import {TxtWord} from "nlptoolkit-dictionary/dist/Dictionary/TxtWord";
4
+ import {State} from "../dist/MorphologicalAnalysis/State";
5
+ import {Transition} from "../dist/MorphologicalAnalysis/Transition";
6
+ import {Sentence} from "nlptoolkit-corpus/dist/Sentence";
7
+
8
+ describe('FsmMorphologicalAnalyzerTest', function() {
9
+ describe('FsmMorphologicalAnalyzerTest', function() {
10
+ let fsm = new FsmMorphologicalAnalyzer();
11
+ it('morphologicalAnalysisDataTimeNumber', function() {
12
+ assert.ok(fsm.morphologicalAnalysis("3/4").size() != 0);
13
+ assert.ok(fsm.morphologicalAnalysis("3\\/4").size() != 0);
14
+ assert.ok(fsm.morphologicalAnalysis("4/2/1973").size() != 0);
15
+ assert.ok(fsm.morphologicalAnalysis("14/2/1993").size() != 0);
16
+ assert.ok(fsm.morphologicalAnalysis("14/12/1933").size() != 0);
17
+ assert.ok(fsm.morphologicalAnalysis("6/12/1903").size() != 0);
18
+ assert.ok(fsm.morphologicalAnalysis("%34.5").size() != 0);
19
+ assert.ok(fsm.morphologicalAnalysis("%3").size() != 0);
20
+ assert.ok(fsm.morphologicalAnalysis("%56").size() != 0);
21
+ assert.ok(fsm.morphologicalAnalysis("2:3").size() != 0);
22
+ assert.ok(fsm.morphologicalAnalysis("12:3").size() != 0);
23
+ assert.ok(fsm.morphologicalAnalysis("4:23").size() != 0);
24
+ assert.ok(fsm.morphologicalAnalysis("11:56").size() != 0);
25
+ assert.ok(fsm.morphologicalAnalysis("1:2:3").size() != 0);
26
+ assert.ok(fsm.morphologicalAnalysis("3:12:3").size() != 0);
27
+ assert.ok(fsm.morphologicalAnalysis("5:4:23").size() != 0);
28
+ assert.ok(fsm.morphologicalAnalysis("7:11:56").size() != 0);
29
+ assert.ok(fsm.morphologicalAnalysis("12:2:3").size() != 0);
30
+ assert.ok(fsm.morphologicalAnalysis("10:12:3").size() != 0);
31
+ assert.ok(fsm.morphologicalAnalysis("11:4:23").size() != 0);
32
+ assert.ok(fsm.morphologicalAnalysis("22:11:56").size() != 0);
33
+ assert.ok(fsm.morphologicalAnalysis("45").size() != 0);
34
+ assert.ok(fsm.morphologicalAnalysis("34.23").size() != 0);
35
+ });
36
+ it('morphologicalAnalysisProperNoun', function() {
37
+ let dictionary = fsm.getDictionary();
38
+ for (let i = 0; i < 30000; i++){
39
+ let word = <TxtWord> dictionary.getWord(Math.floor(Math.random() * dictionary.size()));
40
+ if (word.isProperNoun()){
41
+ assert.ok(fsm.morphologicalAnalysis(word.getName().toLocaleUpperCase("tr")).size() != 0);
42
+ }
43
+ }
44
+ });
45
+ it('morphologicalAnalysisNounSoftenDuringSuffixation', function() {
46
+ let dictionary = fsm.getDictionary();
47
+ for (let i = 0; i < dictionary.size(); i++){
48
+ let word = <TxtWord> dictionary.getWord(i);
49
+ if (word.isNominal() && word.nounSoftenDuringSuffixation()){
50
+ let transitionState = new State("Possessive", false, false);
51
+ let startState = new State("NominalRoot", true, false);
52
+ let transition = new Transition("yH", "ACC", transitionState);
53
+ let surfaceForm = transition.makeTransition(word, word.getName(), startState);
54
+ assert.ok(fsm.morphologicalAnalysis(surfaceForm).size() != 0);
55
+ }
56
+ }
57
+ });
58
+ it('morphologicalAnalysisVowelAChangesToIDuringYSuffixation', function() {
59
+ let dictionary = fsm.getDictionary();
60
+ for (let i = 0; i < dictionary.size(); i++){
61
+ let word = <TxtWord> dictionary.getWord(i);
62
+ if (word.isVerb() && word.vowelAChangesToIDuringYSuffixation()){
63
+ let transitionState = new State("VerbalStem", false, false);
64
+ let startState = new State("VerbalRoot", true, false);
65
+ let transition = new Transition("Hyor", "PROG1", transitionState);
66
+ let surfaceForm = transition.makeTransition(word, word.getName(), startState);
67
+ assert.ok(fsm.morphologicalAnalysis(surfaceForm).size() != 0);
68
+ }
69
+ }
70
+ });
71
+ it('morphologicalAnalysisIsPortmanteau', function() {
72
+ let dictionary = fsm.getDictionary();
73
+ for (let i = 0; i < dictionary.size(); i++){
74
+ let word = <TxtWord> dictionary.getWord(i);
75
+ if (word.isNominal() && word.isPortmanteau() && !word.isPlural() && !word.isPortmanteauFacedVowelEllipsis()){
76
+ let transitionState = new State("CompoundNounRoot", true, false);
77
+ let startState = new State("CompoundNounRoot", true, false);
78
+ let transition = new Transition("lArH", "A3PL+P3PL", transitionState);
79
+ let exceptLast2 = word.getName().substring(0, word.getName().length - 2);
80
+ let exceptLast = word.getName().substring(0, word.getName().length - 1);
81
+ let rootForm
82
+ if (word.isPortmanteauFacedSoftening()){
83
+ switch (word.getName().charAt(word.getName().length - 2)) {
84
+ case 'b':
85
+ rootForm = exceptLast2 + 'p';
86
+ break;
87
+ case 'c':
88
+ rootForm = exceptLast2 + 'ç';
89
+ break;
90
+ case 'd':
91
+ rootForm = exceptLast2 + 't';
92
+ break;
93
+ case 'ğ':
94
+ rootForm = exceptLast2 + 'k';
95
+ break;
96
+ default:
97
+ rootForm = exceptLast;
98
+ }
99
+ } else {
100
+ if (word.isPortmanteauEndingWithSI()){
101
+ rootForm = exceptLast2;
102
+ } else {
103
+ rootForm = exceptLast;
104
+ }
105
+ }
106
+ let surfaceForm = transition.makeTransition(word, rootForm, startState);
107
+ assert.ok(fsm.morphologicalAnalysis(surfaceForm).size() != 0);
108
+ }
109
+ }
110
+ });
111
+ it('morphologicalAnalysisNotObeysVowelHarmonyDuringAgglutination', function() {
112
+ let dictionary = fsm.getDictionary();
113
+ for (let i = 0; i < dictionary.size(); i++){
114
+ let word = <TxtWord> dictionary.getWord(i);
115
+ if (word.isNominal() && word.notObeysVowelHarmonyDuringAgglutination()){
116
+ let transitionState = new State("Possessive", false, false);
117
+ let startState = new State("NominalRoot", true, false);
118
+ let transition = new Transition("yH", "ACC", transitionState);
119
+ let surfaceForm = transition.makeTransition(word, word.getName(), startState);
120
+ assert.ok(fsm.morphologicalAnalysis(surfaceForm).size() != 0);
121
+ }
122
+ }
123
+ });
124
+ it('morphologicalAnalysisLastIdropsDuringSuffixation', function() {
125
+ let dictionary = fsm.getDictionary();
126
+ for (let i = 0; i < dictionary.size(); i++){
127
+ let word = <TxtWord> dictionary.getWord(i);
128
+ if (word.isNominal() && word.lastIdropsDuringSuffixation()){
129
+ let transitionState = new State("Possessive", false, false);
130
+ let startState = new State("NominalRoot", true, false);
131
+ let transition = new Transition("yH", "ACC", transitionState);
132
+ let surfaceForm = transition.makeTransition(word, word.getName(), startState);
133
+ assert.ok(fsm.morphologicalAnalysis(surfaceForm).size() != 0);
134
+ }
135
+ }
136
+ });
137
+ it('morphologicalAnalysisVerbSoftenDuringSuffixation', function() {
138
+ let dictionary = fsm.getDictionary();
139
+ for (let i = 0; i < dictionary.size(); i++){
140
+ let word = <TxtWord> dictionary.getWord(i);
141
+ if (word.isVerb() && word.verbSoftenDuringSuffixation()){
142
+ let transitionState = new State("VerbalStem", false, false);
143
+ let startState = new State("VerbalRoot", true, false);
144
+ let transition = new Transition("Hyor", "PROG1", transitionState);
145
+ let surfaceForm = transition.makeTransition(word, word.getName(), startState);
146
+ assert.ok(fsm.morphologicalAnalysis(surfaceForm).size() != 0);
147
+ }
148
+ }
149
+ });
150
+ it('morphologicalAnalysisDuplicatesDuringSuffixation', function() {
151
+ let dictionary = fsm.getDictionary();
152
+ for (let i = 0; i < dictionary.size(); i++){
153
+ let word = <TxtWord> dictionary.getWord(i);
154
+ if (word.isNominal() && word.duplicatesDuringSuffixation()){
155
+ let transitionState = new State("Possessive", false, false);
156
+ let startState = new State("NominalRoot", true, false);
157
+ let transition = new Transition("yH", "ACC", transitionState);
158
+ let surfaceForm = transition.makeTransition(word, word.getName(), startState);
159
+ assert.ok(fsm.morphologicalAnalysis(surfaceForm).size() != 0);
160
+ }
161
+ }
162
+ });
163
+ it('morphologicalAnalysisEndingKChangesIntoG', function() {
164
+ let dictionary = fsm.getDictionary();
165
+ for (let i = 0; i < dictionary.size(); i++){
166
+ let word = <TxtWord> dictionary.getWord(i);
167
+ if (word.isNominal() && word.endingKChangesIntoG()){
168
+ let transitionState = new State("Possessive", false, false);
169
+ let startState = new State("NominalRoot", true, false);
170
+ let transition = new Transition("yH", "ACC", transitionState);
171
+ let surfaceForm = transition.makeTransition(word, word.getName(), startState);
172
+ assert.ok(fsm.morphologicalAnalysis(surfaceForm).size() != 0);
173
+ }
174
+ }
175
+ });
176
+ it('morphologicalAnalysisLastIdropsDuringPassiveSuffixation', function() {
177
+ let dictionary = fsm.getDictionary();
178
+ for (let i = 0; i < dictionary.size(); i++){
179
+ let word = <TxtWord> dictionary.getWord(i);
180
+ if (word.isVerb() && word.lastIdropsDuringPassiveSuffixation()){
181
+ let transitionState = new State("VerbalStem", false, false);
182
+ let startState = new State("VerbalRoot", true, false);
183
+ let transition = new Transition("Hl", "^DB+VERB+PASS", transitionState);
184
+ let surfaceForm = transition.makeTransition(word, word.getName(), startState);
185
+ assert.ok(fsm.morphologicalAnalysis(surfaceForm).size() != 0);
186
+ }
187
+ }
188
+ });
189
+ it('testReplaceWord', function() {
190
+ assert.strictEqual("Şvesterine söyle kazağı güzelmiş", fsm.replaceWord(new Sentence("Hemşirene söyle kazağı güzelmiş"), "hemşire", "şvester").toString());
191
+ assert.strictEqual("Burada çok abartma var", fsm.replaceWord(new Sentence("Burada çok mübalağa var"), "mübalağa", "abartma").toString());
192
+ assert.strictEqual("Bu bina çok kötü şekilsizleştirildi", fsm.replaceWord(new Sentence("Bu bina çok kötü biçimsizleştirildi"), "biçimsizleş", "şekilsizleş").toString());
193
+ assert.strictEqual("Abim geçen yıl ölmüştü gibi", fsm.replaceWord(new Sentence("Abim geçen yıl son yolculuğa çıkmıştı gibi"), "son yolculuğa çık", "öl").toString());
194
+ assert.strictEqual("Hemşirenle evlendim", fsm.replaceWord(new Sentence("Kız kardeşinle evlendim"), "kız kardeş", "hemşire").toString());
195
+ assert.strictEqual("Dün yaptığı güreş maçında yenildi", fsm.replaceWord(new Sentence("Dün yaptığı güreş maçında mağlup oldu"), "mağlup ol", "yenil").toString());
196
+ assert.strictEqual("Abim geçen yıl son yolculuğa çıkmıştı gibi", fsm.replaceWord(new Sentence("Abim geçen yıl ölmüştü gibi"), "öl", "son yolculuğa çık").toString());
197
+ assert.strictEqual("Kız kardeşinle evlendim", fsm.replaceWord(new Sentence("Hemşirenle evlendim"), "hemşire", "kız kardeş").toString());
198
+ assert.strictEqual("Dün yaptığı güreş maçında mağlup oldu", fsm.replaceWord(new Sentence("Dün yaptığı güreş maçında yenildi"), "yenil", "mağlup ol").toString());
199
+ assert.strictEqual("Dün yaptığı güreş maçında alt oldu sanki", fsm.replaceWord(new Sentence("Dün yaptığı güreş maçında mağlup oldu sanki"), "mağlup ol", "alt ol").toString());
200
+ assert.strictEqual("Yemin billah vermişlerdi vazoyu kırmadığına", fsm.replaceWord(new Sentence("Yemin etmişlerdi vazoyu kırmadığına"), "yemin et", "yemin billah ver").toString());
201
+ assert.strictEqual("Yemin etmişlerdi vazoyu kırmadığına", fsm.replaceWord(new Sentence("Yemin billah vermişlerdi vazoyu kırmadığına"), "yemin billah ver", "yemin et").toString());
202
+ });
203
+ });
204
+ });
@@ -0,0 +1,90 @@
1
+ import * as assert from "assert";
2
+ import {FsmMorphologicalAnalyzer} from "../dist/MorphologicalAnalysis/FsmMorphologicalAnalyzer";
3
+ import {Word} from "nlptoolkit-dictionary/dist/Dictionary/Word";
4
+
5
+ describe('FsmParseTest', function() {
6
+ describe('FsmParseTest', function() {
7
+ let fsm = new FsmMorphologicalAnalyzer();
8
+ let parse1 = fsm.morphologicalAnalysis("açılır");
9
+ let parse2 = fsm.morphologicalAnalysis("koparılarak");
10
+ let parse3 = fsm.morphologicalAnalysis("toplama");
11
+ let parse4 = fsm.morphologicalAnalysis("değerlendirmede");
12
+ let parse5 = fsm.morphologicalAnalysis("soruşturmasının");
13
+ let parse6 = fsm.morphologicalAnalysis("karşılaştırmalı");
14
+ let parse7 = fsm.morphologicalAnalysis("esaslarını");
15
+ let parse8 = fsm.morphologicalAnalysis("güçleriyle");
16
+ let parse9 = fsm.morphologicalAnalysis("bulmayacakları");
17
+ let parse10 = fsm.morphologicalAnalysis("kitabı");
18
+ let parse11 = fsm.morphologicalAnalysis("kitapları");
19
+ let parse12 = fsm.morphologicalAnalysis("o");
20
+ let parse13 = fsm.morphologicalAnalysis("arabası");
21
+ let parse14 = fsm.morphologicalAnalysis("sana");
22
+ it('testSize', function() {
23
+ assert.strictEqual(2, parse1.size());
24
+ assert.strictEqual(2, parse2.size());
25
+ assert.strictEqual(6, parse3.size());
26
+ assert.strictEqual(4, parse4.size());
27
+ assert.strictEqual(5, parse5.size());
28
+ assert.strictEqual(12, parse6.size());
29
+ assert.strictEqual(8, parse7.size());
30
+ assert.strictEqual(6, parse8.size());
31
+ assert.strictEqual(5, parse9.size());
32
+ assert.strictEqual(4, parse14.size());
33
+ });
34
+ it('testRootWords', function() {
35
+ assert.strictEqual("aç", parse1.rootWords());
36
+ assert.strictEqual("kop$kopar", parse2.rootWords());
37
+ assert.strictEqual("topla$toplam$toplama", parse3.rootWords());
38
+ assert.strictEqual("değer$değerlen$değerlendir$değerlendirme", parse4.rootWords());
39
+ assert.strictEqual("sor$soru$soruş$soruştur$soruşturma", parse5.rootWords());
40
+ assert.strictEqual("karşı$karşıla$karşılaş$karşılaştır$karşılaştırma$karşılaştırmalı", parse6.rootWords());
41
+ assert.strictEqual("esas", parse7.rootWords());
42
+ assert.strictEqual("güç", parse8.rootWords());
43
+ assert.strictEqual("bul", parse9.rootWords());
44
+ });
45
+ it('testGetParseWithLongestRootWord', function() {
46
+ assert.strictEqual("kopar", parse2.getParseWithLongestRootWord().getWord().getName());
47
+ assert.strictEqual("toplama", parse3.getParseWithLongestRootWord().getWord().getName());
48
+ assert.strictEqual("değerlendirme", parse4.getParseWithLongestRootWord().getWord().getName());
49
+ assert.strictEqual("soruşturma", parse5.getParseWithLongestRootWord().getWord().getName());
50
+ assert.strictEqual("karşılaştırmalı", parse6.getParseWithLongestRootWord().getWord().getName());
51
+ });
52
+ it('testReduceToParsesWithSameRootAndPos', function() {
53
+ parse2.reduceToParsesWithSameRootAndPos(new Word("kop+VERB"));
54
+ assert.strictEqual(1, parse2.size());
55
+ parse3.reduceToParsesWithSameRootAndPos(new Word("topla+VERB"));
56
+ assert.strictEqual(2, parse3.size());
57
+ parse6.reduceToParsesWithSameRootAndPos(new Word("karşıla+VERB"));
58
+ assert.strictEqual(2, parse6.size());
59
+ });
60
+ it('testReduceToParsesWithSameRoot', function() {
61
+ parse2.reduceToParsesWithSameRoot("kop");
62
+ assert.strictEqual(1, parse2.size());
63
+ parse3.reduceToParsesWithSameRoot("topla");
64
+ assert.strictEqual(3, parse3.size());
65
+ parse6.reduceToParsesWithSameRoot("karşı");
66
+ assert.strictEqual(4, parse6.size());
67
+ parse7.reduceToParsesWithSameRoot("esas");
68
+ assert.strictEqual(8, parse7.size());
69
+ parse8.reduceToParsesWithSameRoot("güç");
70
+ assert.strictEqual(6, parse8.size());
71
+ });
72
+ it('testConstructParseListForDifferentRootWithPos', function() {
73
+ assert.strictEqual(1, parse1.constructParseListForDifferentRootWithPos().length);
74
+ assert.strictEqual(2, parse2.constructParseListForDifferentRootWithPos().length);
75
+ assert.strictEqual(5, parse3.constructParseListForDifferentRootWithPos().length);
76
+ assert.strictEqual(4, parse4.constructParseListForDifferentRootWithPos().length);
77
+ assert.strictEqual(5, parse5.constructParseListForDifferentRootWithPos().length);
78
+ assert.strictEqual(7, parse6.constructParseListForDifferentRootWithPos().length);
79
+ assert.strictEqual(2, parse7.constructParseListForDifferentRootWithPos().length);
80
+ assert.strictEqual(2, parse8.constructParseListForDifferentRootWithPos().length);
81
+ assert.strictEqual(1, parse9.constructParseListForDifferentRootWithPos().length);
82
+ });
83
+ it('testParsesWithoutPrefixAndSuffix', function() {
84
+ assert.strictEqual("P3SG+NOM$PNON+ACC", parse10.parsesWithoutPrefixAndSuffix());
85
+ assert.strictEqual("A3PL+P3PL+NOM$A3PL+P3SG+NOM$A3PL+PNON+ACC$A3SG+P3PL+NOM", parse11.parsesWithoutPrefixAndSuffix());
86
+ assert.strictEqual("DET$PRON+DEMONSP+A3SG+PNON+NOM$PRON+PERS+A3SG+PNON+NOM", parse12.parsesWithoutPrefixAndSuffix());
87
+ assert.strictEqual("NOUN+A3SG+P3SG+NOM$NOUN^DB+ADJ+ALMOST", parse13.parsesWithoutPrefixAndSuffix());
88
+ });
89
+ });
90
+ });
@@ -0,0 +1,66 @@
1
+ import * as assert from "assert";
2
+ import {FsmMorphologicalAnalyzer} from "../dist/MorphologicalAnalysis/FsmMorphologicalAnalyzer";
3
+
4
+ describe('FsmParseTest', function() {
5
+ describe('FsmParseTest', function() {
6
+ let fsm = new FsmMorphologicalAnalyzer();
7
+ let parse1 = fsm.morphologicalAnalysis("açılır").getFsmParse(1);
8
+ let parse2 = fsm.morphologicalAnalysis("koparılarak").getFsmParse(0);
9
+ let parse3 = fsm.morphologicalAnalysis("toplama").getFsmParse(0);
10
+ let parse4 = fsm.morphologicalAnalysis("değerlendirmede").getFsmParse(0);
11
+ let parse5 = fsm.morphologicalAnalysis("soruşturmasının").getFsmParse(0);
12
+ let parse6 = fsm.morphologicalAnalysis("karşılaştırmalı").getFsmParse(1);
13
+ let parse7 = fsm.morphologicalAnalysis("esaslarını").getFsmParse(0);
14
+ let parse8 = fsm.morphologicalAnalysis("güçleriyle").getFsmParse(0);
15
+ let parse9 = fsm.morphologicalAnalysis("bulmayacakları").getFsmParse(0);
16
+ let parse10 = fsm.morphologicalAnalysis("mü").getFsmParse(0);
17
+ it('testGetLastLemmaWithTag', function() {
18
+ assert.strictEqual("açıl", parse1.getLastLemmaWithTag("VERB"));
19
+ assert.strictEqual("koparıl", parse2.getLastLemmaWithTag("VERB"));
20
+ assert.strictEqual("değerlendir", parse4.getLastLemmaWithTag("VERB"));
21
+ assert.strictEqual("soruştur", parse5.getLastLemmaWithTag("VERB"));
22
+ assert.strictEqual("karşı", parse6.getLastLemmaWithTag("ADJ"));
23
+ });
24
+ it('testGetLastLemma', function() {
25
+ assert.strictEqual("açıl", parse1.getLastLemma());
26
+ assert.strictEqual("koparılarak", parse2.getLastLemma());
27
+ assert.strictEqual("değerlendirme", parse4.getLastLemma());
28
+ assert.strictEqual("soruşturma", parse5.getLastLemma());
29
+ assert.strictEqual("karşılaştır", parse6.getLastLemma());
30
+ });
31
+ it('testGetTransitionList', function() {
32
+ assert.strictEqual("aç+VERB^DB+VERB+PASS+POS+AOR+A3SG", parse1.toString());
33
+ assert.strictEqual("kop+VERB^DB+VERB+CAUS^DB+VERB+PASS+POS^DB+ADV+BYDOINGSO", parse2.toString());
34
+ assert.strictEqual("topla+NOUN+A3SG+P1SG+DAT", parse3.toString());
35
+ assert.strictEqual("değer+NOUN+A3SG+PNON+NOM^DB+VERB+ACQUIRE^DB+VERB+CAUS+POS^DB+NOUN+INF2+A3SG+PNON+LOC", parse4.toString());
36
+ assert.strictEqual("sor+VERB+RECIP^DB+VERB+CAUS+POS^DB+NOUN+INF2+A3SG+P3SG+GEN", parse5.toString());
37
+ assert.strictEqual("karşı+ADJ^DB+VERB+BECOME^DB+VERB+CAUS+POS+NECES+A3SG", parse6.toString());
38
+ assert.strictEqual("esas+ADJ^DB+NOUN+ZERO+A3PL+P2SG+ACC", parse7.toString());
39
+ assert.strictEqual("güç+ADJ^DB+NOUN+ZERO+A3PL+P3PL+INS", parse8.toString());
40
+ assert.strictEqual("bul+VERB+NEG^DB+ADJ+FUTPART+P3PL", parse9.toString());
41
+ assert.strictEqual("mi+QUES+PRES+A3SG", parse10.toString());
42
+ });
43
+ it('testWithList', function() {
44
+ assert.strictEqual("aç+Hl+Hr", parse1.getWithList());
45
+ assert.strictEqual("kop+Ar+Hl+yArAk", parse2.getWithList());
46
+ assert.strictEqual("topla+Hm+yA", parse3.getWithList());
47
+ assert.strictEqual("değer+lAn+DHr+mA+DA", parse4.getWithList());
48
+ assert.strictEqual("sor+Hs+DHr+mA+sH+nHn", parse5.getWithList());
49
+ assert.strictEqual("karşı+lAs+DHr+mAlH", parse6.getWithList());
50
+ assert.strictEqual("esas+lAr+Hn+yH", parse7.getWithList());
51
+ assert.strictEqual("güç+lArH+ylA", parse8.getWithList());
52
+ assert.strictEqual("bul+mA+yAcAk+lArH", parse9.getWithList());
53
+ });
54
+ it('testSuffixList', function() {
55
+ assert.strictEqual("VerbalRoot(F5PR)(aç)+PassiveHl(açıl)+OtherTense2(açılır)", parse1.getSuffixList());
56
+ assert.strictEqual("VerbalRoot(F1P1)(kop)+CausativeAr(kopar)+PassiveHl(koparıl)+Adverb1(koparılarak)", parse2.getSuffixList());
57
+ assert.strictEqual("NominalRoot(topla)+Possessive(toplam)+Case1(toplama)", parse3.getSuffixList());
58
+ assert.strictEqual("NominalRoot(değer)+VerbalRoot(F5PR)(değerlen)+CausativeDHr(değerlendir)+NominalRoot(değerlendirme)+Case1(değerlendirmede)", parse4.getSuffixList());
59
+ assert.strictEqual("VerbalRoot(F5PR)(sor)+Reciprocal(soruş)+CausativeDHr(soruştur)+NominalRoot(soruşturma)+Possessive3(soruşturması)+Case1(soruşturmasının)", parse5.getSuffixList());
60
+ assert.strictEqual("AdjectiveRoot(karşı)+VerbalRoot(F5PR)(karşılaş)+CausativeDHr(karşılaştır)+OtherTense(karşılaştırmalı)", parse6.getSuffixList());
61
+ assert.strictEqual("AdjectiveRoot(esas)+Plural(esaslar)+Possessive(esasların)+AccusativeNoun(esaslarını)", parse7.getSuffixList());
62
+ assert.strictEqual("AdjectiveRoot(güç)+Possesive3(güçleri)+Case1(güçleriyle)", parse8.getSuffixList());
63
+ assert.strictEqual("VerbalRoot(F5PW)(bul)+Negativema(bulma)+AdjectiveParticiple(bulmayacak)+Adjective(bulmayacakları)", parse9.getSuffixList());
64
+ });
65
+ });
66
+ });
@@ -0,0 +1,84 @@
1
+ import * as assert from "assert";
2
+ import {InflectionalGroup} from "../dist/MorphologicalAnalysis/InflectionalGroup";
3
+ import {MorphologicalTag} from "../dist/MorphologicalAnalysis/MorphologicalTag";
4
+
5
+ describe('InflectionalGroupTest', function() {
6
+ describe('InflectionalGroupTest', function() {
7
+ it('testGetMorphologicalTag', function() {
8
+ assert.strictEqual(InflectionalGroup.getMorphologicalTag("noun"), MorphologicalTag.NOUN);
9
+ assert.strictEqual(InflectionalGroup.getMorphologicalTag("without"), MorphologicalTag.WITHOUT);
10
+ assert.strictEqual(InflectionalGroup.getMorphologicalTag("interj"), MorphologicalTag.INTERJECTION);
11
+ assert.strictEqual(InflectionalGroup.getMorphologicalTag("inf2"), MorphologicalTag.INFINITIVE2);
12
+ });
13
+ it('size', function() {
14
+ let inflectionalGroup1 = new InflectionalGroup("ADJ");
15
+ assert.strictEqual(1, inflectionalGroup1.size());
16
+ let inflectionalGroup2 = new InflectionalGroup("ADJ+JUSTLIKE");
17
+ assert.strictEqual(2, inflectionalGroup2.size());
18
+ let inflectionalGroup3 = new InflectionalGroup("ADJ+FUTPART+P1PL");
19
+ assert.strictEqual(3, inflectionalGroup3.size());
20
+ let inflectionalGroup4 = new InflectionalGroup("NOUN+A3PL+P1PL+ABL");
21
+ assert.strictEqual(4, inflectionalGroup4.size());
22
+ let inflectionalGroup5 = new InflectionalGroup("ADJ+WITH+A3SG+P3SG+ABL");
23
+ assert.strictEqual(5, inflectionalGroup5.size());
24
+ let inflectionalGroup6 = new InflectionalGroup("VERB+ABLE+NEG+FUT+A3PL+COP");
25
+ assert.strictEqual(6, inflectionalGroup6.size());
26
+ let inflectionalGroup7 = new InflectionalGroup("VERB+ABLE+NEG+AOR+A3SG+COND+A1SG");
27
+ assert.strictEqual(7, inflectionalGroup7.size());
28
+ });
29
+ it('containsCase', function() {
30
+ let inflectionalGroup1 = new InflectionalGroup("NOUN+ACTOF+A3PL+P1PL+NOM");
31
+ assert.notStrictEqual(undefined, inflectionalGroup1.containsCase());
32
+ let inflectionalGroup2 = new InflectionalGroup("NOUN+A3PL+P1PL+ACC");
33
+ assert.notStrictEqual(undefined, inflectionalGroup2.containsCase());
34
+ let inflectionalGroup3 = new InflectionalGroup("NOUN+ZERO+A3SG+P3PL+DAT");
35
+ assert.notStrictEqual(undefined, inflectionalGroup3.containsCase());
36
+ let inflectionalGroup4 = new InflectionalGroup("PRON+QUANTP+A1PL+P1PL+LOC");
37
+ assert.notStrictEqual(undefined, inflectionalGroup4.containsCase());
38
+ let inflectionalGroup5 = new InflectionalGroup("NOUN+AGT+A3SG+P2SG+ABL");
39
+ assert.notStrictEqual(undefined, inflectionalGroup5.containsCase());
40
+ });
41
+ it('containsPlural', function() {
42
+ let inflectionalGroup1 = new InflectionalGroup("VERB+NEG+NECES+A1PL");
43
+ assert.ok(inflectionalGroup1.containsPlural());
44
+ let inflectionalGroup2 = new InflectionalGroup("PRON+PERS+A2PL+PNON+NOM");
45
+ assert.ok(inflectionalGroup2.containsPlural());
46
+ let inflectionalGroup3 = new InflectionalGroup("NOUN+DIM+A3PL+P2SG+GEN");
47
+ assert.ok(inflectionalGroup3.containsPlural());
48
+ let inflectionalGroup4 = new InflectionalGroup("NOUN+A3PL+P1PL+GEN");
49
+ assert.ok(inflectionalGroup4.containsPlural());
50
+ let inflectionalGroup5 = new InflectionalGroup("NOUN+ZERO+A3SG+P2PL+INS");
51
+ assert.ok(inflectionalGroup5.containsPlural());
52
+ let inflectionalGroup6 = new InflectionalGroup("PRON+QUANTP+A3PL+P3PL+LOC");
53
+ assert.ok(inflectionalGroup6.containsPlural());
54
+ });
55
+ it('containsTag', function() {
56
+ let inflectionalGroup1 = new InflectionalGroup("NOUN+ZERO+A3SG+P1SG+NOM");
57
+ assert.ok(inflectionalGroup1.containsTag(MorphologicalTag.NOUN));
58
+ let inflectionalGroup2 = new InflectionalGroup("NOUN+AGT+A3PL+P2SG+ABL");
59
+ assert.ok(inflectionalGroup2.containsTag(MorphologicalTag.AGENT));
60
+ let inflectionalGroup3 = new InflectionalGroup("NOUN+INF2+A3PL+P3SG+NOM");
61
+ assert.ok(inflectionalGroup3.containsTag(MorphologicalTag.NOMINATIVE));
62
+ let inflectionalGroup4 = new InflectionalGroup("NOUN+ZERO+A3SG+P1PL+ACC");
63
+ assert.ok(inflectionalGroup4.containsTag(MorphologicalTag.ZERO));
64
+ let inflectionalGroup5 = new InflectionalGroup("NOUN+ZERO+A3SG+P2PL+INS");
65
+ assert.ok(inflectionalGroup5.containsTag(MorphologicalTag.P2PL));
66
+ let inflectionalGroup6 = new InflectionalGroup("PRON+QUANTP+A3PL+P3PL+LOC");
67
+ assert.ok(inflectionalGroup6.containsTag(MorphologicalTag.QUANTITATIVEPRONOUN));
68
+ });
69
+ it('containsPossessive', function() {
70
+ let inflectionalGroup1 = new InflectionalGroup("NOUN+ZERO+A3SG+P1SG+NOM");
71
+ assert.ok(inflectionalGroup1.containsPossessive());
72
+ let inflectionalGroup2 = new InflectionalGroup("NOUN+AGT+A3PL+P2SG+ABL");
73
+ assert.ok(inflectionalGroup2.containsPossessive());
74
+ let inflectionalGroup3 = new InflectionalGroup("NOUN+INF2+A3PL+P3SG+NOM");
75
+ assert.ok(inflectionalGroup3.containsPossessive());
76
+ let inflectionalGroup4 = new InflectionalGroup("NOUN+ZERO+A3SG+P1PL+ACC");
77
+ assert.ok(inflectionalGroup4.containsPossessive());
78
+ let inflectionalGroup5 = new InflectionalGroup("NOUN+ZERO+A3SG+P2PL+INS");
79
+ assert.ok(inflectionalGroup5.containsPossessive());
80
+ let inflectionalGroup6 = new InflectionalGroup("PRON+QUANTP+A3PL+P3PL+LOC");
81
+ assert.ok(inflectionalGroup6.containsPossessive());
82
+ });
83
+ });
84
+ });