lem-entries-parser.service.ts 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. import { Injectable } from '@angular/core';
  2. import { ParserRegister } from '.';
  3. import { LemEntry, Reading, Witness, XMLElement } from '../../models/evt-models';
  4. @Injectable({
  5. providedIn: 'root',
  6. })
  7. export class LemEntriesParserService {
  8. private lemEntryTagName = 'app[type="lemma"]';
  9. public parseLemEntries(document: XMLElement) {
  10. const lemParser = ParserRegister.get('evt-lem-entry-parser');
  11. return Array.from(document.querySelectorAll<XMLElement>(this.lemEntryTagName))
  12. .map((lemEntry) => lemParser.parse(lemEntry) as LemEntry);
  13. }
  14. public getSignificantReadings(lems: LemEntry[]) {
  15. const signRdgs = {};
  16. lems.forEach((lem) => {
  17. signRdgs[lem.id] = lem.readings.concat(lem.lemma).filter((rdg: Reading) => rdg.significant);
  18. });
  19. return signRdgs;
  20. }
  21. public getSignificantReadingsNumber(signRdgs: { [key: string]: LemEntry[] }) {
  22. const signRdgsNumber = {};
  23. Object.keys(signRdgs).forEach((lem) => {
  24. signRdgsNumber[lem] = signRdgs[lem].length;
  25. });
  26. return signRdgsNumber;
  27. }
  28. public getLemVariance(signRdgsNum: { [key: string]: number }, witList: Witness[]) {
  29. const lemsVariance = {};
  30. if (Object.keys(witList).length > 1) {
  31. Object.keys(signRdgsNum).forEach((x) => {
  32. lemsVariance[x] = signRdgsNum[x] / Object.keys(witList).length;
  33. });
  34. }
  35. return lemsVariance;
  36. }
  37. }