expose accent counting functions and allow for plural forms on non inflecting nouns
This commit is contained in:
parent
c1fd83b8de
commit
02ff873536
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "@lingdocs/pashto-inflector",
|
"name": "@lingdocs/pashto-inflector",
|
||||||
"version": "1.2.5",
|
"version": "1.2.6",
|
||||||
"author": "lingdocs.com",
|
"author": "lingdocs.com",
|
||||||
"description": "A Pashto inflection and verb conjugation engine, inculding React components for displaying Pashto text, inflections, and conjugations",
|
"description": "A Pashto inflection and verb conjugation engine, inculding React components for displaying Pashto text, inflections, and conjugations",
|
||||||
"homepage": "https://verbs.lingdocs.com",
|
"homepage": "https://verbs.lingdocs.com",
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { makePsString } from "./p-text-helpers";
|
import { makePsString, removeFVarients } from "./p-text-helpers";
|
||||||
import * as T from "../types";
|
import * as T from "../types";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -54,8 +54,13 @@ export function accentPastParticiple(s: T.PsString): T.PsString {
|
||||||
return makePsString(s.p, accentedF);
|
return makePsString(s.p, accentedF);
|
||||||
}
|
}
|
||||||
|
|
||||||
export function splitUpSyllables(s: string): string[] {
|
export function splitUpSyllables(f: string): string[] {
|
||||||
return s.match(/ |([^a|e|i|o|u| ]*(aa|a|ey|ee|e|oo|o|i|u)[^a|e|i|o|u| ]*)/g) as string[];
|
return f.match(/ |([^a|e|i|o|u| ]*(aa|a|ey|ee|e|oo|o|i|u)[^a|e|i|o|u| ]*)/g) as string[];
|
||||||
|
}
|
||||||
|
|
||||||
|
export function countSyllables(f: T.PsString | string): number {
|
||||||
|
if (typeof f !== "string") return countSyllables(f.f);
|
||||||
|
return splitUpSyllables(removeFVarients(f)).length;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -584,6 +584,17 @@ const nouns: Array<{
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
in: {"ts":1527813508,"i":7058,"p":"زړه","f":"zRu","g":"zRu","e":"heart","c":"n. m.","noInf":true},
|
||||||
|
out: {
|
||||||
|
plural: {
|
||||||
|
masc: [
|
||||||
|
[{ p: "زړونه", f: "zRóona" }],
|
||||||
|
[{ p: "زړونو", f: "zRóono" }],
|
||||||
|
],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
// fem plural
|
// fem plural
|
||||||
{
|
{
|
||||||
in: {"ts":1527815129,"i":1013,"p":"اوبه","f":"oobú","g":"oobu","e":"water","c":"n. f. pl."},
|
in: {"ts":1527815129,"i":1013,"p":"اوبه","f":"oobú","g":"oobu","e":"water","c":"n. f. pl."},
|
||||||
|
|
|
@ -35,9 +35,6 @@ export function inflectWord(word: T.DictionaryEntry): T.InflectorOutput {
|
||||||
// If it's a noun/adj, inflect accordingly
|
// If it's a noun/adj, inflect accordingly
|
||||||
// TODO: What about n. f. / adj. that end in ي ??
|
// TODO: What about n. f. / adj. that end in ي ??
|
||||||
const w = removeFVarients(word);
|
const w = removeFVarients(word);
|
||||||
if (w.noInf) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
if (w.c?.includes("doub.")) {
|
if (w.c?.includes("doub.")) {
|
||||||
const words = splitDoubleWord(w);
|
const words = splitDoubleWord(w);
|
||||||
const inflected = words.map((x) => ensureUnisexInflections(inflectWord(x), x));
|
const inflected = words.map((x) => ensureUnisexInflections(inflectWord(x), x));
|
||||||
|
@ -70,6 +67,9 @@ function handleUnisexWord(word: T.DictionaryEntryNoFVars): T.InflectorOutput {
|
||||||
// TODO: !!! Handle weird endings / symbols ' etc.
|
// TODO: !!! Handle weird endings / symbols ' etc.
|
||||||
const pEnd = word.p.slice(-1);
|
const pEnd = word.p.slice(-1);
|
||||||
const plurals = makePlural(word);
|
const plurals = makePlural(word);
|
||||||
|
if (word.noInf) {
|
||||||
|
return !plurals ? false : { ...plurals };
|
||||||
|
}
|
||||||
if (word.infap && word.infaf && word.infbp && word.infbf) {
|
if (word.infap && word.infaf && word.infbp && word.infbf) {
|
||||||
return {
|
return {
|
||||||
inflections: inflectIrregularUnisex(word.p, word.f, [
|
inflections: inflectIrregularUnisex(word.p, word.f, [
|
||||||
|
@ -104,6 +104,9 @@ function handleUnisexWord(word: T.DictionaryEntryNoFVars): T.InflectorOutput {
|
||||||
function handlePluralNoun(w: T.DictionaryEntryNoFVars): T.InflectorOutput {
|
function handlePluralNoun(w: T.DictionaryEntryNoFVars): T.InflectorOutput {
|
||||||
if (!w.c || !w.c.includes("n.")) return false;
|
if (!w.c || !w.c.includes("n.")) return false;
|
||||||
const plurals = makePlural(w);
|
const plurals = makePlural(w);
|
||||||
|
if (w.noInf) {
|
||||||
|
return !plurals ? false : { ...plurals };
|
||||||
|
}
|
||||||
if (!plurals) return false;
|
if (!plurals) return false;
|
||||||
return { ...plurals };
|
return { ...plurals };
|
||||||
}
|
}
|
||||||
|
@ -112,6 +115,9 @@ function handleMascNoun(w: T.DictionaryEntryNoFVars): T.InflectorOutput {
|
||||||
// Get last letter of Pashto and last two letters of phonetics
|
// Get last letter of Pashto and last two letters of phonetics
|
||||||
// TODO: !!! Handle weird endings / symbols ' etc.
|
// TODO: !!! Handle weird endings / symbols ' etc.
|
||||||
const plurals = makePlural(w);
|
const plurals = makePlural(w);
|
||||||
|
if (w.noInf) {
|
||||||
|
return !plurals ? false : { ...plurals };
|
||||||
|
}
|
||||||
const pEnd = w.p.slice(-1);
|
const pEnd = w.p.slice(-1);
|
||||||
const fEnd = w.f.slice(-2);
|
const fEnd = w.f.slice(-2);
|
||||||
if (w.infap && w.infaf && w.infbp && w.infbf) {
|
if (w.infap && w.infaf && w.infbp && w.infbf) {
|
||||||
|
@ -144,6 +150,9 @@ function handleFemNoun(word: T.DictionaryEntryNoFVars): T.InflectorOutput {
|
||||||
const pEnd = word.p.slice(-1);
|
const pEnd = word.p.slice(-1);
|
||||||
|
|
||||||
const plurals = makePlural(word);
|
const plurals = makePlural(word);
|
||||||
|
if (word.noInf) {
|
||||||
|
return !plurals ? false : { ...plurals };
|
||||||
|
}
|
||||||
|
|
||||||
if (endingInHeyOrAynRegex.test(word.p) && endingInSingleARegex.test(word.f)) {
|
if (endingInHeyOrAynRegex.test(word.p) && endingInSingleARegex.test(word.f)) {
|
||||||
return { inflections: inflectRegularAFem(word.p, word.f), ...plurals };
|
return { inflections: inflectRegularAFem(word.p, word.f), ...plurals };
|
||||||
|
|
|
@ -91,6 +91,8 @@ import {
|
||||||
import {
|
import {
|
||||||
removeAccents,
|
removeAccents,
|
||||||
hasAccents,
|
hasAccents,
|
||||||
|
splitUpSyllables,
|
||||||
|
countSyllables,
|
||||||
} from "./lib/accent-helpers";
|
} from "./lib/accent-helpers";
|
||||||
import defaultTextOptions from "./lib/default-text-options";
|
import defaultTextOptions from "./lib/default-text-options";
|
||||||
import * as grammarUnits from "./lib/grammar-units";
|
import * as grammarUnits from "./lib/grammar-units";
|
||||||
|
@ -134,6 +136,8 @@ export {
|
||||||
addEnglish,
|
addEnglish,
|
||||||
parseEc,
|
parseEc,
|
||||||
endsWith,
|
endsWith,
|
||||||
|
splitUpSyllables,
|
||||||
|
countSyllables,
|
||||||
// protobuf helpers
|
// protobuf helpers
|
||||||
readDictionary,
|
readDictionary,
|
||||||
writeDictionary,
|
writeDictionary,
|
||||||
|
|
Loading…
Reference in New Issue