affixi
v1.1.0
Published
Affixi is a helper library for Turkish suffixes for nouns and proper nouns written in typescript.
Maintainers
Readme
Affixi
A helper library for Turkish noun suffixes written in typescript.
Table
Functions
- getPluralSuffix
- makePlural
- getEqualitySuffix
- makeEqual
- getPossesiveSuffix
- makePossesive
- getCaseSuffix
- makeCase
- getCompoundSuffix
- makeCompound
- getVoicedConsonant
- alterToVoicedConsonant
- alterToVowelDrop
- util
Classes
Objects
Enums
Interfaces
Usage
install
npm install affixiThere is no default export in the library, so you can import whatever you need and only the things you need. This makes the library tree-shakable.
import { makePlural, makePossesive, Pronoun } from 'affixi';
makePlural('O'); // Onlar
makePossesive('Akıl', Pronoun.PluralFirst); // Aklımız
makeCase(makePossesive('Ongözlü Köprü', Pronoun.SingularThird), Case.Locative, true); // Ongözlü Köprüsü'ndeReference
Functions
getPluralSuffix
getPluralSuffix(base: string) => stringReturns the appropriate plural suffix for a given noun. Suffixes are affected by vowel harmony rules.
e.g:
- Araç > lar
- Bebek > ler
makePlural
makePlural(base: string) => stringReturns the word base concatenated with the appropriate plural suffix for a given noun.
e.g:
- Araç > Araçlar
- Bebek > Bebekler
getEqualitySuffix
getEqualitySuffix(base: string) => stringReturns the appropriate equality suffix for a given noun. These types of suffixes are affected by both vowel harmony, consonant softening, consonant assimilation and buch of other rules.
e.g:
- Çocuk > ça
- Sen > ce
makeEqual
makeEqual(base: string) => stringReturns the word base concatenated with the appropriate equality suffix for a given noun.
e.g:
- Çocuk > Çocukça
- Sen > Sence
getPossesiveSuffix
getPossesiveSuffix(base: string, pronoun: Pronoun) => stringReturns the appropriate possesive suffix for a given noun and pronoun. These types of suffixes are affected by vowel harmony and given pronoun.
e.g:
getPossesiveSuffix("Çocuk", Pronoun.SingularFirst) // umgetPossesiveSuffix("Çocuk", Pronoun.SingularSecond) // ungetPossesiveSuffix("Sen", Pronoun.SingularSecond) // in
makePossesive
makePossesive(base: string, pronoun: Pronoun, isProperNoun: boolean = false) => stringReturns the word base concatenated with the appropriate possesive suffix for a given noun and pronoun.
Proper nouns are seperated with an apostrophe character.
e.g:
makePossesive("Çocuk", Pronoun.SingularFirst) // ÇocuğummakePossesive("Çocuk", Pronoun.SingularSecond) // ÇocuğunmakePossesive("Sen", Pronoun.SingularSecond) // SeninmakePossesive("Ayşe", Pronoun.SingularFirst, true) // Ayşe'm
getCaseSuffix
getCaseSuffix(base: string, _case: Case) => stringReturns the appropriate case suffix for a given base word and a case
makeCase('Ev', Case.Ablative) // denmakeCase('Şehir', Case.Dative) // emakeCase('Sinema', Case.Dative) // ya
makeCase
makeCase(base: string, _case: Case, isProperNoun: boolean = false) => stringReturns the word base concatenated with the appropriate case suffix for a given base word and a case Proper nouns are seperated with an apostrophe character.
makeCase('Ev', Case.Ablative) // EvdenmakeCase('Balıkesir', Case.Ablative, true) // Balıkesir'denmakeCase('Şehir', Case.Dative) // ŞehremakeCase('Sinema', Case.Dative) // Sinemaya
getCompoundSuffix
getCompoundSuffix(base: string, compound: Compound) => stringReturns the appropriate compound suffix for a given base word and a compound
getCompoundSuffix('Köprü', Compound.Compounder) // nüngetCompoundSuffix('Öğretmen', Compound.Compounder) // ingetCompoundSuffix('Köprü', Compound.Compoundee) // sügetCompoundSuffix('Akıl', Compound.Compoundee) // ı
makeCompound
makeCompound(base: string, compound: Compound, isProperNoun: boolean = false) => stringReturns the word base concatenated with the appropriate compound suffix for a given base word and a compound Proper nouns are seperated with an apostrophe character.
makeCompound('Köprü', Compound.Compounder) // KöprününmakeCompound('Öğretmen', Compound.Compounder) // ÖğretmeninmakeCompound('Köprü', Compound.Compoundee) // KöprüsümakeCompound('Akıl', Compound.Compoundee) // Aklı
getVoicedConsonant
getVoicedConsonant(base: string) => string | undefinedSome words that end with an unvoiced consonants (p,ç,t,k) may be converted into their voiced counterparts (b,c,d,ğ). If extist, this function returns the voiced consonant. If not returns undefined.
- Ağaç > c
- Sebep > b
- Akıllı > undefined
alterToVoicedConsonant
alterToVoicedConsonant(base: string) => stringThis function returns the mutated version of a word with its voiced consonant. If base does not have a voiced counterpart, the base itself is returned.
- Ağaç > Ağac
- Sebep > Sebeb
- Akıllı > Akıllı
- Renk > Reng
alterToVowelDrop
alterToVowelDrop(base: string) => stringSome two syllable words that has acute vowels in their last syllable drop that vowel after they are conjugated with a suffix. This function returns the words mutated version with the dropped vowel.
Note: Because certain words are subjected to this phenomenon, these words are kept in an exceptions array. Contributions to this limited list is appreciated.
- Akıl > Akl
- Bağır > Bağr
- Şehir > Şehr
Util
Some utility functions that may help word generation.
getComponents
util.getComponents(base: string) => WordComponentThis method returns the last letter and the last vowel in the last syllable of a given word. It returns a WordComponent interface.
export interface WordComponent {
letter: string;
vowel: string;
}- Araba >
{ letter: "a", vowel: "a" } - Oyuncak >
{ letter: "k", vowel: "a" } - Sebep >
{ letter: "p", vowel: "e" }
getSyllableCount
util.getSyllableCount(base: string) => numberThis method returns the syllable count of a base word. Almost always the syllabale count of a word is equal to the vowel count of a word in Turkish because the stress is delimited by vowels.
- Muvaffak > 3
- Elma > 2
- Süpermarket > 4
Classes
AffixiWord
AffixiWord is a construct that makes it easier to handle nouns in a complex manner. It holds a state that can be undone and handles aspects like compoundness in itslef. It has a toString method that returns the resulting word and can be used with String(word). All its methods apart from toString return the instance itself so they are chainable.
Properties
base: string; // Given base word
word: string; // Current state of the word
isCompound: boolean;
isProperNoun: boolean;
history: AffixiWordState[] = [];See: AffixiWordState
Methods
AffixiWord.makeCompound
Concatenates the word with the appropriate compound suffix for a given compound type.
makeCompound(type: Compound): AffixiWordAffixiWord.makeCase
Concatenates the word with the appropriate case suffix for a given case.
makeCase(_case: Case): AffixiWordAffixiWord.makeComplete
Concatenates the word with the completion suffix.
makeComplete(): AffixiWordAffixiWord.makePossesive
Concatenates the word with the possesive suffix for a given pronoun.
makePossesive(pronoun: Pronoun): AffixiWordAffixiWord.makeEqual
Transforms the word into equal form.
makeEqual(): AffixiWordAffixiWord.makePlural
Transforms the word into plural form.
makePlural(): AffixiWordAffixiWord.undo
Undoes the last operation
undo(): AffixiWordObjects
sounds
Turkish sounds categorized by different metrics.
interface sounds {
unvoicedStoppingConsonants: string[];
unvoicedContinuousConsonants: string[];
voicedStoppingConsonants: string[];
concatentorConsonants: string[];
unvoicedConsonants: string[];
roundedVowels: string[];
unRoundedVowels: string[];
backVowels: string[];
frontVowels: string[];
acuteVowels: string[];
wideVowels: string[];
vowels: string[];
}Enums
Pronoun
enum Pronoun {
SingularFirst, // I
SingularSecond, // You (singular)
SingularThird, // He/She/It
PluralFirst, // We
PluralSecond, // You (plural)
PluralThird, // They
}I think this one is pretty self-explanatory.
Case
enum Case {
Absolute,
Accusative, // -i
Ablative, // -den
Locative, // -de
Instrumental, // -le
Dative, // -e
}Turkish noun case names.
Compound
enum Compound {
Compounder, // tamlayan
Compoundee, // tamlanan
}Turkish compound types
Interfaces
AffixiWordState
export interface AffixiWordState {
word: string;
isCompound: boolean;
isProperNoun: boolean;
}