@mailwoman/classifiers 2.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 (161) hide show
  1. package/out/AdjacencyClassifier.d.ts +16 -0
  2. package/out/AdjacencyClassifier.d.ts.map +1 -0
  3. package/out/AdjacencyClassifier.js +50 -0
  4. package/out/AdjacencyClassifier.js.map +1 -0
  5. package/out/AlphaNumericClassifier.d.ts +10 -0
  6. package/out/AlphaNumericClassifier.d.ts.map +1 -0
  7. package/out/AlphaNumericClassifier.js +23 -0
  8. package/out/AlphaNumericClassifier.js.map +1 -0
  9. package/out/CentralEuropeanStreetNameClassifier.d.ts +16 -0
  10. package/out/CentralEuropeanStreetNameClassifier.d.ts.map +1 -0
  11. package/out/CentralEuropeanStreetNameClassifier.js +36 -0
  12. package/out/CentralEuropeanStreetNameClassifier.js.map +1 -0
  13. package/out/ChainClassifier.d.ts +14 -0
  14. package/out/ChainClassifier.d.ts.map +1 -0
  15. package/out/ChainClassifier.js +25 -0
  16. package/out/ChainClassifier.js.map +1 -0
  17. package/out/CompoundLevelClassifier.d.ts +16 -0
  18. package/out/CompoundLevelClassifier.d.ts.map +1 -0
  19. package/out/CompoundLevelClassifier.js +58 -0
  20. package/out/CompoundLevelClassifier.js.map +1 -0
  21. package/out/CompoundStreetClassifier.d.ts +12 -0
  22. package/out/CompoundStreetClassifier.d.ts.map +1 -0
  23. package/out/CompoundStreetClassifier.js +50 -0
  24. package/out/CompoundStreetClassifier.js.map +1 -0
  25. package/out/CompoundUnitDesignatorClassifier.d.ts +16 -0
  26. package/out/CompoundUnitDesignatorClassifier.d.ts.map +1 -0
  27. package/out/CompoundUnitDesignatorClassifier.js +57 -0
  28. package/out/CompoundUnitDesignatorClassifier.js.map +1 -0
  29. package/out/DirectionalClassifier.d.ts +11 -0
  30. package/out/DirectionalClassifier.d.ts.map +1 -0
  31. package/out/DirectionalClassifier.js +31 -0
  32. package/out/DirectionalClassifier.js.map +1 -0
  33. package/out/GivenNameClassifier.d.ts +11 -0
  34. package/out/GivenNameClassifier.d.ts.map +1 -0
  35. package/out/GivenNameClassifier.js +32 -0
  36. package/out/GivenNameClassifier.js.map +1 -0
  37. package/out/HouseNumberClassifier.d.ts +15 -0
  38. package/out/HouseNumberClassifier.d.ts.map +1 -0
  39. package/out/HouseNumberClassifier.js +79 -0
  40. package/out/HouseNumberClassifier.js.map +1 -0
  41. package/out/IntersectionClassifier.d.ts +11 -0
  42. package/out/IntersectionClassifier.d.ts.map +1 -0
  43. package/out/IntersectionClassifier.js +33 -0
  44. package/out/IntersectionClassifier.js.map +1 -0
  45. package/out/LevelClassifier.d.ts +11 -0
  46. package/out/LevelClassifier.d.ts.map +1 -0
  47. package/out/LevelClassifier.js +28 -0
  48. package/out/LevelClassifier.js.map +1 -0
  49. package/out/LevelDesignatorClassifier.d.ts +11 -0
  50. package/out/LevelDesignatorClassifier.d.ts.map +1 -0
  51. package/out/LevelDesignatorClassifier.js +21 -0
  52. package/out/LevelDesignatorClassifier.js.map +1 -0
  53. package/out/MiddleInitialClassifier.d.ts +10 -0
  54. package/out/MiddleInitialClassifier.d.ts.map +1 -0
  55. package/out/MiddleInitialClassifier.js +18 -0
  56. package/out/MiddleInitialClassifier.js.map +1 -0
  57. package/out/OrdinalClassifier.d.ts +10 -0
  58. package/out/OrdinalClassifier.d.ts.map +1 -0
  59. package/out/OrdinalClassifier.js +23 -0
  60. package/out/OrdinalClassifier.js.map +1 -0
  61. package/out/PersonClassifier.d.ts +11 -0
  62. package/out/PersonClassifier.d.ts.map +1 -0
  63. package/out/PersonClassifier.js +30 -0
  64. package/out/PersonClassifier.js.map +1 -0
  65. package/out/PersonalSuffixClassifier.d.ts +11 -0
  66. package/out/PersonalSuffixClassifier.d.ts.map +1 -0
  67. package/out/PersonalSuffixClassifier.js +31 -0
  68. package/out/PersonalSuffixClassifier.js.map +1 -0
  69. package/out/PersonalTitleClassifier.d.ts +11 -0
  70. package/out/PersonalTitleClassifier.d.ts.map +1 -0
  71. package/out/PersonalTitleClassifier.js +32 -0
  72. package/out/PersonalTitleClassifier.js.map +1 -0
  73. package/out/PlaceClassifier.d.ts +11 -0
  74. package/out/PlaceClassifier.d.ts.map +1 -0
  75. package/out/PlaceClassifier.js +38 -0
  76. package/out/PlaceClassifier.js.map +1 -0
  77. package/out/PostcodeClassifier.d.ts +14 -0
  78. package/out/PostcodeClassifier.d.ts.map +1 -0
  79. package/out/PostcodeClassifier.js +62 -0
  80. package/out/PostcodeClassifier.js.map +1 -0
  81. package/out/RoadTypeClassifier.d.ts +11 -0
  82. package/out/RoadTypeClassifier.d.ts.map +1 -0
  83. package/out/RoadTypeClassifier.js +20 -0
  84. package/out/RoadTypeClassifier.js.map +1 -0
  85. package/out/StopWordClassifier.d.ts +14 -0
  86. package/out/StopWordClassifier.d.ts.map +1 -0
  87. package/out/StopWordClassifier.js +35 -0
  88. package/out/StopWordClassifier.js.map +1 -0
  89. package/out/StreetPrefixClassifier.d.ts +11 -0
  90. package/out/StreetPrefixClassifier.d.ts.map +1 -0
  91. package/out/StreetPrefixClassifier.js +40 -0
  92. package/out/StreetPrefixClassifier.js.map +1 -0
  93. package/out/StreetProperNameClassifier.d.ts +16 -0
  94. package/out/StreetProperNameClassifier.d.ts.map +1 -0
  95. package/out/StreetProperNameClassifier.js +32 -0
  96. package/out/StreetProperNameClassifier.js.map +1 -0
  97. package/out/StreetSuffixClassifier.d.ts +11 -0
  98. package/out/StreetSuffixClassifier.d.ts.map +1 -0
  99. package/out/StreetSuffixClassifier.js +50 -0
  100. package/out/StreetSuffixClassifier.js.map +1 -0
  101. package/out/SurnameClassifier.d.ts +11 -0
  102. package/out/SurnameClassifier.d.ts.map +1 -0
  103. package/out/SurnameClassifier.js +29 -0
  104. package/out/SurnameClassifier.js.map +1 -0
  105. package/out/TokenPositionClassifier.d.ts +20 -0
  106. package/out/TokenPositionClassifier.d.ts.map +1 -0
  107. package/out/TokenPositionClassifier.js +41 -0
  108. package/out/TokenPositionClassifier.js.map +1 -0
  109. package/out/ToponymClassifier.d.ts +11 -0
  110. package/out/ToponymClassifier.d.ts.map +1 -0
  111. package/out/ToponymClassifier.js +26 -0
  112. package/out/ToponymClassifier.js.map +1 -0
  113. package/out/UnitClassifier.d.ts +11 -0
  114. package/out/UnitClassifier.d.ts.map +1 -0
  115. package/out/UnitClassifier.js +43 -0
  116. package/out/UnitClassifier.js.map +1 -0
  117. package/out/UnitDesignatorClassifier.d.ts +11 -0
  118. package/out/UnitDesignatorClassifier.d.ts.map +1 -0
  119. package/out/UnitDesignatorClassifier.js +25 -0
  120. package/out/UnitDesignatorClassifier.js.map +1 -0
  121. package/out/WhosOnFirstClassifier.d.ts +16 -0
  122. package/out/WhosOnFirstClassifier.d.ts.map +1 -0
  123. package/out/WhosOnFirstClassifier.js +148 -0
  124. package/out/WhosOnFirstClassifier.js.map +1 -0
  125. package/out/adapter.d.ts +77 -0
  126. package/out/adapter.d.ts.map +1 -0
  127. package/out/adapter.js +125 -0
  128. package/out/adapter.js.map +1 -0
  129. package/out/composite/index.d.ts +12 -0
  130. package/out/composite/index.d.ts.map +1 -0
  131. package/out/composite/index.js +12 -0
  132. package/out/composite/index.js.map +1 -0
  133. package/out/composite/intersection.d.ts +10 -0
  134. package/out/composite/intersection.d.ts.map +1 -0
  135. package/out/composite/intersection.js +115 -0
  136. package/out/composite/intersection.js.map +1 -0
  137. package/out/composite/person.d.ts +10 -0
  138. package/out/composite/person.d.ts.map +1 -0
  139. package/out/composite/person.js +112 -0
  140. package/out/composite/person.js.map +1 -0
  141. package/out/composite/street.d.ts +10 -0
  142. package/out/composite/street.d.ts.map +1 -0
  143. package/out/composite/street.js +384 -0
  144. package/out/composite/street.js.map +1 -0
  145. package/out/composite/street_name.d.ts +10 -0
  146. package/out/composite/street_name.d.ts.map +1 -0
  147. package/out/composite/street_name.js +78 -0
  148. package/out/composite/street_name.js.map +1 -0
  149. package/out/composite/subdivision.d.ts +10 -0
  150. package/out/composite/subdivision.d.ts.map +1 -0
  151. package/out/composite/subdivision.js +29 -0
  152. package/out/composite/subdivision.js.map +1 -0
  153. package/out/composite/venue.d.ts +10 -0
  154. package/out/composite/venue.d.ts.map +1 -0
  155. package/out/composite/venue.js +213 -0
  156. package/out/composite/venue.js.map +1 -0
  157. package/out/index.d.ts +39 -0
  158. package/out/index.d.ts.map +1 -0
  159. package/out/index.js +39 -0
  160. package/out/index.js.map +1 -0
  161. package/package.json +29 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RoadTypeClassifier.d.ts","sourceRoot":"","sources":["../RoadTypeClassifier.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAsB,IAAI,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAE1E,qBAAa,kBAAmB,SAAQ,cAAc;IACxC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAM5B,OAAO,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI;CAMhC"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * @copyright Sister Software
3
+ * @license AGPL-3.0
4
+ * @author Teffen Ellis, et al.
5
+ */
6
+ import { prepareLocaleIndex, Span, WordClassifier } from "@mailwoman/core";
7
+ export class RoadTypeClassifier extends WordClassifier {
8
+ async ready() {
9
+ this.index = await prepareLocaleIndex(this.languages, "road_types.txt");
10
+ return this;
11
+ }
12
+ explore(span) {
13
+ if (span.flags.has("numeral"))
14
+ return;
15
+ if (!this.index.has(span.normalized))
16
+ return;
17
+ span.classifications.add("road_type", span.normalized.length < 2 ? 0.2 : 1);
18
+ }
19
+ }
20
+ //# sourceMappingURL=RoadTypeClassifier.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RoadTypeClassifier.js","sourceRoot":"","sources":["../RoadTypeClassifier.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,kBAAkB,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAE1E,MAAM,OAAO,kBAAmB,SAAQ,cAAc;IAC9C,KAAK,CAAC,KAAK;QACjB,IAAI,CAAC,KAAK,GAAG,MAAM,kBAAkB,CAAC,IAAI,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAA;QAEvE,OAAO,IAAI,CAAA;IACZ,CAAC;IAEM,OAAO,CAAC,IAAU;QACxB,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC;YAAE,OAAM;QACrC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC;YAAE,OAAM;QAE5C,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,WAAW,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IAC5E,CAAC;CACD"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * @copyright Sister Software
3
+ * @license AGPL-3.0
4
+ * @author Teffen Ellis, et al.
5
+ */
6
+ import { Span, WordClassifier } from "@mailwoman/core";
7
+ /**
8
+ * A classifier that identifies stop words, i.e. prepositions and articles.
9
+ */
10
+ export declare class StopWordClassifier extends WordClassifier {
11
+ ready(): Promise<this>;
12
+ explore(span: Span): void;
13
+ }
14
+ //# sourceMappingURL=StopWordClassifier.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StopWordClassifier.d.ts","sourceRoot":"","sources":["../StopWordClassifier.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAA0C,IAAI,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAE9F;;GAEG;AACH,qBAAa,kBAAmB,SAAQ,cAAc;IACxC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAe5B,OAAO,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI;CAehC"}
@@ -0,0 +1,35 @@
1
+ /**
2
+ * @copyright Sister Software
3
+ * @license AGPL-3.0
4
+ * @author Teffen Ellis, et al.
5
+ */
6
+ import { Alpha2LanguageCode, prepareLocaleIndex, Span, WordClassifier } from "@mailwoman/core";
7
+ /**
8
+ * A classifier that identifies stop words, i.e. prepositions and articles.
9
+ */
10
+ export class StopWordClassifier extends WordClassifier {
11
+ async ready() {
12
+ const languages = this.languages ?? [
13
+ //---
14
+ Alpha2LanguageCode.French,
15
+ Alpha2LanguageCode.German,
16
+ Alpha2LanguageCode.English,
17
+ Alpha2LanguageCode.Portuguese,
18
+ ];
19
+ this.index = await prepareLocaleIndex(languages, "stopwords.txt");
20
+ return this;
21
+ }
22
+ explore(span) {
23
+ if (span.flags.has("numeral"))
24
+ return;
25
+ let confidence = 0.75;
26
+ const languages = this.index.get(span.normalized);
27
+ if (languages) {
28
+ if (span.normalized.length < 2) {
29
+ confidence = 0.2;
30
+ }
31
+ span.classifications.add({ classification: "stop_word", confidence, languages });
32
+ }
33
+ }
34
+ }
35
+ //# sourceMappingURL=StopWordClassifier.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StopWordClassifier.js","sourceRoot":"","sources":["../StopWordClassifier.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAE9F;;GAEG;AACH,MAAM,OAAO,kBAAmB,SAAQ,cAAc;IAC9C,KAAK,CAAC,KAAK;QACjB,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI;YACnC,KAAK;YAEL,kBAAkB,CAAC,MAAM;YACzB,kBAAkB,CAAC,MAAM;YACzB,kBAAkB,CAAC,OAAO;YAC1B,kBAAkB,CAAC,UAAU;SAC7B,CAAA;QAED,IAAI,CAAC,KAAK,GAAG,MAAM,kBAAkB,CAAC,SAAS,EAAE,eAAe,CAAC,CAAA;QAEjE,OAAO,IAAI,CAAA;IACZ,CAAC;IAEM,OAAO,CAAC,IAAU;QACxB,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC;YAAE,OAAM;QAErC,IAAI,UAAU,GAAG,IAAI,CAAA;QAErB,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;QAEjD,IAAI,SAAS,EAAE,CAAC;YACf,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAChC,UAAU,GAAG,GAAG,CAAA;YACjB,CAAC;YAED,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,cAAc,EAAE,WAAW,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,CAAA;QACjF,CAAC;IACF,CAAC;CACD"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * @copyright Sister Software
3
+ * @license AGPL-3.0
4
+ * @author Teffen Ellis, et al.
5
+ */
6
+ import { Span, WordClassifier } from "@mailwoman/core";
7
+ export declare class StreetPrefixClassifier extends WordClassifier {
8
+ ready(): Promise<this>;
9
+ explore(span: Span): void;
10
+ }
11
+ //# sourceMappingURL=StreetPrefixClassifier.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StreetPrefixClassifier.d.ts","sourceRoot":"","sources":["../StreetPrefixClassifier.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,IAAI,EAAE,cAAc,EAAyC,MAAM,iBAAiB,CAAA;AAE7F,qBAAa,sBAAuB,SAAQ,cAAc;IAC5C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAQ5B,OAAO,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI;CA8BhC"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * @copyright Sister Software
3
+ * @license AGPL-3.0
4
+ * @author Teffen Ellis, et al.
5
+ */
6
+ import { Span, WordClassifier, prefixedLanguages, prepareLocaleIndex } from "@mailwoman/core";
7
+ export class StreetPrefixClassifier extends WordClassifier {
8
+ async ready() {
9
+ const languages = Array.from(this.languages ?? prefixedLanguages);
10
+ this.index = await prepareLocaleIndex(languages, "street_types.txt");
11
+ return this;
12
+ }
13
+ explore(span) {
14
+ if (span.flags.has("numeral"))
15
+ return;
16
+ let languages = this.index.get(span.normalized);
17
+ if (languages) {
18
+ span.classifications.add({
19
+ classification: "street_prefix",
20
+ // Single letter streets are uncommon.
21
+ confidence: span.normalized.length < 2 ? 0.2 : 1,
22
+ languages,
23
+ });
24
+ return;
25
+ }
26
+ // Try again for abbreviations denoted by a period such as 'str.'
27
+ if (!span.flags.has("ends_with_period"))
28
+ return;
29
+ languages = this.index.get(span.normalized.slice(0, -1));
30
+ if (!languages)
31
+ return;
32
+ span.classifications.add({
33
+ classification: "street_prefix",
34
+ // Similar to single letter streets, short abbreviations are uncommon.
35
+ confidence: span.normalized.length < 3 ? 0.2 : 1,
36
+ languages,
37
+ });
38
+ }
39
+ }
40
+ //# sourceMappingURL=StreetPrefixClassifier.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StreetPrefixClassifier.js","sourceRoot":"","sources":["../StreetPrefixClassifier.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAA;AAE7F,MAAM,OAAO,sBAAuB,SAAQ,cAAc;IAClD,KAAK,CAAC,KAAK;QACjB,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,iBAAiB,CAAC,CAAA;QAEjE,IAAI,CAAC,KAAK,GAAG,MAAM,kBAAkB,CAAC,SAAS,EAAE,kBAAkB,CAAC,CAAA;QAEpE,OAAO,IAAI,CAAA;IACZ,CAAC;IAEM,OAAO,CAAC,IAAU;QACxB,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC;YAAE,OAAM;QAErC,IAAI,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;QAE/C,IAAI,SAAS,EAAE,CAAC;YACf,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC;gBACxB,cAAc,EAAE,eAAe;gBAC/B,sCAAsC;gBACtC,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBAChD,SAAS;aACT,CAAC,CAAA;YAEF,OAAM;QACP,CAAC;QAED,iEAAiE;QACjE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,kBAAkB,CAAC;YAAE,OAAM;QAE/C,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;QAExD,IAAI,CAAC,SAAS;YAAE,OAAM;QAEtB,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC;YACxB,cAAc,EAAE,eAAe;YAC/B,sEAAsE;YACtE,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAChD,SAAS;SACT,CAAC,CAAA;IACH,CAAC;CACD"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * @copyright Sister Software
3
+ * @license AGPL-3.0
4
+ * @author Teffen Ellis, et al.
5
+ */
6
+ import { type LibPostalLanguageCode, LocaleIndex, Span, WordClassifier } from "@mailwoman/core";
7
+ /**
8
+ * Special handling of streets with no suffix
9
+ *
10
+ * @see {@link https://github.com/pelias/parser/issues/140 | Issue #140}
11
+ */
12
+ export declare class StreetProperNameClassifier extends WordClassifier {
13
+ index: LocaleIndex<LibPostalLanguageCode>;
14
+ explore(span: Span): void;
15
+ }
16
+ //# sourceMappingURL=StreetProperNameClassifier.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StreetProperNameClassifier.d.ts","sourceRoot":"","sources":["../StreetProperNameClassifier.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,KAAK,qBAAqB,EAAE,WAAW,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAE/F;;;;GAIG;AACH,qBAAa,0BAA2B,SAAQ,cAAc;IAC7C,KAAK,qCAQpB;IAEM,OAAO,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI;CAahC"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * @copyright Sister Software
3
+ * @license AGPL-3.0
4
+ * @author Teffen Ellis, et al.
5
+ */
6
+ import { LocaleIndex, Span, WordClassifier } from "@mailwoman/core";
7
+ /**
8
+ * Special handling of streets with no suffix
9
+ *
10
+ * @see {@link https://github.com/pelias/parser/issues/140 | Issue #140}
11
+ */
12
+ export class StreetProperNameClassifier extends WordClassifier {
13
+ index = new LocaleIndex([
14
+ ["broadway", ["en"]],
15
+ ["esplanade", ["en"]],
16
+ ], {
17
+ displayName: "libpostal",
18
+ });
19
+ explore(span) {
20
+ if (span.flags.has("numeral"))
21
+ return;
22
+ const languages = this.index.get(span.normalized);
23
+ if (!languages)
24
+ return;
25
+ span.classifications.add({
26
+ classification: "street_proper_name",
27
+ confidence: 0.7,
28
+ languages,
29
+ });
30
+ }
31
+ }
32
+ //# sourceMappingURL=StreetProperNameClassifier.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StreetProperNameClassifier.js","sourceRoot":"","sources":["../StreetProperNameClassifier.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAA8B,WAAW,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAE/F;;;;GAIG;AACH,MAAM,OAAO,0BAA2B,SAAQ,cAAc;IAC7C,KAAK,GAAG,IAAI,WAAW,CACtC;QACC,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,CAAC;QACpB,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,CAAC;KACrB,EACD;QACC,WAAW,EAAE,WAAW;KACxB,CACD,CAAA;IAEM,OAAO,CAAC,IAAU;QACxB,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC;YAAE,OAAM;QAErC,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;QAEjD,IAAI,CAAC,SAAS;YAAE,OAAM;QAEtB,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC;YACxB,cAAc,EAAE,oBAAoB;YACpC,UAAU,EAAE,GAAG;YACf,SAAS;SACT,CAAC,CAAA;IACH,CAAC;CACD"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * @copyright Sister Software
3
+ * @license AGPL-3.0
4
+ * @author Teffen Ellis, et al.
5
+ */
6
+ import { Span, WordClassifier } from "@mailwoman/core";
7
+ export declare class StreetSuffixClassifier extends WordClassifier {
8
+ ready(): Promise<this>;
9
+ explore(span: Span, _sectionIndex?: number, childIndex?: number): void;
10
+ }
11
+ //# sourceMappingURL=StreetSuffixClassifier.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StreetSuffixClassifier.d.ts","sourceRoot":"","sources":["../StreetSuffixClassifier.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAA6D,IAAI,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAEjH,qBAAa,sBAAuB,SAAQ,cAAc;IAC5C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAe5B,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,aAAa,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI;CAiC7E"}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * @copyright Sister Software
3
+ * @license AGPL-3.0
4
+ * @author Teffen Ellis, et al.
5
+ */
6
+ import { availableLanguages, prefixedLanguages, prepareLocaleIndex, Span, WordClassifier } from "@mailwoman/core";
7
+ export class StreetSuffixClassifier extends WordClassifier {
8
+ async ready() {
9
+ const compatibleLanguages = Iterator
10
+ // ---
11
+ .from(this.languages ?? availableLanguages)
12
+ .filter((language) => !prefixedLanguages.has(language))
13
+ .toArray();
14
+ this.index = await prepareLocaleIndex(compatibleLanguages, "street_types.txt", {
15
+ // Likely to be noise.
16
+ minLength: 2,
17
+ });
18
+ return this;
19
+ }
20
+ explore(span, _sectionIndex, childIndex) {
21
+ if (span.flags.has("numeral"))
22
+ return;
23
+ // Assuming that a street suffix should not appear as the first child token.
24
+ if (childIndex === 0)
25
+ return;
26
+ const languages = this.index.get(span.normalized);
27
+ if (languages) {
28
+ span.classifications.add({
29
+ classification: "street_suffix",
30
+ languages,
31
+ // Single letter streets are uncommon.
32
+ confidence: span.normalized.length === 1 ? 0.2 : 1,
33
+ });
34
+ return;
35
+ }
36
+ // Try again for abbreviations denoted by a period such as 'str.'
37
+ if (span.flags.has("ends_with_period")) {
38
+ const languagesViaAbbreviation = this.index.get(span.normalized.slice(0, -1));
39
+ if (!languagesViaAbbreviation)
40
+ return;
41
+ span.classifications.add({
42
+ classification: "street_suffix",
43
+ languages: languagesViaAbbreviation,
44
+ // Similar to single letter streets, short abbreviations are uncommon.
45
+ confidence: span.normalized.length < 3 ? 0.2 : 1,
46
+ });
47
+ }
48
+ }
49
+ }
50
+ //# sourceMappingURL=StreetSuffixClassifier.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StreetSuffixClassifier.js","sourceRoot":"","sources":["../StreetSuffixClassifier.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAEjH,MAAM,OAAO,sBAAuB,SAAQ,cAAc;IAClD,KAAK,CAAC,KAAK;QACjB,MAAM,mBAAmB,GAAG,QAAQ;YACnC,MAAM;aACL,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,kBAAkB,CAAC;aAC1C,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,iBAAiB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;aACtD,OAAO,EAAE,CAAA;QAEX,IAAI,CAAC,KAAK,GAAG,MAAM,kBAAkB,CAAC,mBAAmB,EAAE,kBAAkB,EAAE;YAC9E,sBAAsB;YACtB,SAAS,EAAE,CAAC;SACZ,CAAC,CAAA;QAEF,OAAO,IAAI,CAAA;IACZ,CAAC;IAEM,OAAO,CAAC,IAAU,EAAE,aAAsB,EAAE,UAAmB;QACrE,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC;YAAE,OAAM;QAErC,4EAA4E;QAC5E,IAAI,UAAU,KAAK,CAAC;YAAE,OAAM;QAE5B,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;QAEjD,IAAI,SAAS,EAAE,CAAC;YACf,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC;gBACxB,cAAc,EAAE,eAAe;gBAC/B,SAAS;gBACT,sCAAsC;gBACtC,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;aAClD,CAAC,CAAA;YAEF,OAAM;QACP,CAAC;QAED,iEAAiE;QACjE,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,kBAAkB,CAAC,EAAE,CAAC;YACxC,MAAM,wBAAwB,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;YAE7E,IAAI,CAAC,wBAAwB;gBAAE,OAAM;YAErC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC;gBACxB,cAAc,EAAE,eAAe;gBAC/B,SAAS,EAAE,wBAAwB;gBACnC,sEAAsE;gBACtE,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;aAChD,CAAC,CAAA;QACH,CAAC;IACF,CAAC;CACD"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * @copyright Sister Software
3
+ * @license AGPL-3.0
4
+ * @author Teffen Ellis, et al.
5
+ */
6
+ import { PhraseClassifier, Span } from "@mailwoman/core";
7
+ export declare class SurnameClassifier extends PhraseClassifier {
8
+ ready(): Promise<this>;
9
+ explore(span: Span): void;
10
+ }
11
+ //# sourceMappingURL=SurnameClassifier.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SurnameClassifier.d.ts","sourceRoot":"","sources":["../SurnameClassifier.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,gBAAgB,EAAsB,IAAI,EAAE,MAAM,iBAAiB,CAAA;AAE5E,qBAAa,iBAAkB,SAAQ,gBAAgB;IACzC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAY5B,OAAO,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI;CAYhC"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * @copyright Sister Software
3
+ * @license AGPL-3.0
4
+ * @author Teffen Ellis, et al.
5
+ */
6
+ import { PhraseClassifier, prepareLocaleIndex, Span } from "@mailwoman/core";
7
+ export class SurnameClassifier extends PhraseClassifier {
8
+ async ready() {
9
+ const languages = this.languages || ["all"];
10
+ this.index = await prepareLocaleIndex(languages, "surnames.txt", {
11
+ lowercase: true,
12
+ // Omit short names
13
+ minLength: 3,
14
+ });
15
+ return this;
16
+ }
17
+ explore(span) {
18
+ if (span.flags.has("numeral"))
19
+ return;
20
+ const languages = this.index.get(span.normalized);
21
+ if (languages) {
22
+ span.classifications.add({
23
+ classification: "surname",
24
+ languages,
25
+ });
26
+ }
27
+ }
28
+ }
29
+ //# sourceMappingURL=SurnameClassifier.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SurnameClassifier.js","sourceRoot":"","sources":["../SurnameClassifier.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAA;AAE5E,MAAM,OAAO,iBAAkB,SAAQ,gBAAgB;IAC/C,KAAK,CAAC,KAAK;QACjB,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,CAAC,KAAK,CAAC,CAAA;QAE3C,IAAI,CAAC,KAAK,GAAG,MAAM,kBAAkB,CAAC,SAAS,EAAE,cAAc,EAAE;YAChE,SAAS,EAAE,IAAI;YACf,mBAAmB;YACnB,SAAS,EAAE,CAAC;SACZ,CAAC,CAAA;QAEF,OAAO,IAAI,CAAA;IACZ,CAAC;IAEM,OAAO,CAAC,IAAU;QACxB,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC;YAAE,OAAM;QAErC,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;QAEjD,IAAI,SAAS,EAAE,CAAC;YACf,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC;gBACxB,cAAc,EAAE,SAAS;gBACzB,SAAS;aACT,CAAC,CAAA;QACH,CAAC;IACF,CAAC;CACD"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * @copyright Sister Software
3
+ * @license AGPL-3.0
4
+ * @author Teffen Ellis, et al.
5
+ */
6
+ import { type Classifier, Span, TokenContext } from "@mailwoman/core";
7
+ /**
8
+ * Classify the first and last tokens in a section.
9
+ *
10
+ * This is used to identify the start and end of a section, as well as improving autocomplete by
11
+ * identifying single-character tokens.
12
+ */
13
+ export declare class TokenPositionClassifier implements Classifier {
14
+ classifyTokens(context: TokenContext): void;
15
+ /**
16
+ * @deprecated Use "classifyTokens" instead.
17
+ */
18
+ classify(_input: Span | string): Span;
19
+ }
20
+ //# sourceMappingURL=TokenPositionClassifier.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TokenPositionClassifier.d.ts","sourceRoot":"","sources":["../TokenPositionClassifier.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,KAAK,UAAU,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAErE;;;;;GAKG;AACH,qBAAa,uBAAwB,YAAW,UAAU;IAClD,cAAc,CAAC,OAAO,EAAE,YAAY,GAAG,IAAI;IAyBlD;;OAEG;IACI,QAAQ,CAAC,MAAM,EAAE,IAAI,GAAG,MAAM,GAAG,IAAI;CAG5C"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * @copyright Sister Software
3
+ * @license AGPL-3.0
4
+ * @author Teffen Ellis, et al.
5
+ */
6
+ import { Span, TokenContext } from "@mailwoman/core";
7
+ /**
8
+ * Classify the first and last tokens in a section.
9
+ *
10
+ * This is used to identify the start and end of a section, as well as improving autocomplete by
11
+ * identifying single-character tokens.
12
+ */
13
+ export class TokenPositionClassifier {
14
+ classifyTokens(context) {
15
+ const [firstSection] = context.sections;
16
+ if (!firstSection)
17
+ return;
18
+ Iterator.from(firstSection.children)
19
+ .filter((s) => !s.previousSibling)
20
+ .forEach((firstChild) => {
21
+ firstChild.classifications.add("start_token");
22
+ });
23
+ // End token.
24
+ const lastSection = context.sections[context.sections.length - 1];
25
+ Iterator.from(lastSection.children)
26
+ .filter(({ nextSibling }) => !nextSibling)
27
+ .forEach((lastChild) => {
28
+ lastChild.classifications.add("end_token");
29
+ if (lastChild.normalized.length === 1) {
30
+ lastChild.classifications.add("end_token_single_character");
31
+ }
32
+ });
33
+ }
34
+ /**
35
+ * @deprecated Use "classifyTokens" instead.
36
+ */
37
+ classify(_input) {
38
+ throw new TypeError('This classifier cannot be used to classify a span directly. Use "classifyTokens" instead.');
39
+ }
40
+ }
41
+ //# sourceMappingURL=TokenPositionClassifier.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TokenPositionClassifier.js","sourceRoot":"","sources":["../TokenPositionClassifier.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAmB,IAAI,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAErE;;;;;GAKG;AACH,MAAM,OAAO,uBAAuB;IAC5B,cAAc,CAAC,OAAqB;QAC1C,MAAM,CAAC,YAAY,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAA;QAEvC,IAAI,CAAC,YAAY;YAAE,OAAM;QAEzB,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC;aAClC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC;aACjC,OAAO,CAAC,CAAC,UAAU,EAAE,EAAE;YACvB,UAAU,CAAC,eAAe,CAAC,GAAG,CAAC,aAAa,CAAC,CAAA;QAC9C,CAAC,CAAC,CAAA;QAEH,aAAa;QACb,MAAM,WAAW,GAAG,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAE,CAAA;QAElE,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC;aACjC,MAAM,CAAC,CAAC,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC,CAAC,WAAW,CAAC;aACzC,OAAO,CAAC,CAAC,SAAS,EAAE,EAAE;YACtB,SAAS,CAAC,eAAe,CAAC,GAAG,CAAC,WAAW,CAAC,CAAA;YAE1C,IAAI,SAAS,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACvC,SAAS,CAAC,eAAe,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAA;YAC5D,CAAC;QACF,CAAC,CAAC,CAAA;IACJ,CAAC;IAED;;OAEG;IACI,QAAQ,CAAC,MAAqB;QACpC,MAAM,IAAI,SAAS,CAAC,2FAA2F,CAAC,CAAA;IACjH,CAAC;CACD"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * @copyright Sister Software
3
+ * @license AGPL-3.0
4
+ * @author Teffen Ellis, et al.
5
+ */
6
+ import { Span, WordClassifier } from "@mailwoman/core";
7
+ export declare class ToponymClassifier extends WordClassifier {
8
+ ready(): Promise<this>;
9
+ explore(span: Span): void;
10
+ }
11
+ //# sourceMappingURL=ToponymClassifier.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ToponymClassifier.d.ts","sourceRoot":"","sources":["../ToponymClassifier.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAA0C,IAAI,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAE9F,qBAAa,iBAAkB,SAAQ,cAAc;IACvC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAQ5B,OAAO,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI;CAahC"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * @copyright Sister Software
3
+ * @license AGPL-3.0
4
+ * @author Teffen Ellis, et al.
5
+ */
6
+ import { Alpha2LanguageCode, prepareLocaleIndex, Span, WordClassifier } from "@mailwoman/core";
7
+ export class ToponymClassifier extends WordClassifier {
8
+ async ready() {
9
+ const languages = this.languages ?? [Alpha2LanguageCode.English];
10
+ this.index = await prepareLocaleIndex(languages, "toponyms.txt");
11
+ return this;
12
+ }
13
+ explore(span) {
14
+ if (span.flags.has("numeral"))
15
+ return;
16
+ const languages = this.index.get(span.normalized);
17
+ if (!languages)
18
+ return;
19
+ span.classifications.add({
20
+ classification: "toponym",
21
+ confidence: 1,
22
+ languages,
23
+ });
24
+ }
25
+ }
26
+ //# sourceMappingURL=ToponymClassifier.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ToponymClassifier.js","sourceRoot":"","sources":["../ToponymClassifier.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAE9F,MAAM,OAAO,iBAAkB,SAAQ,cAAc;IAC7C,KAAK,CAAC,KAAK;QACjB,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAA;QAEhE,IAAI,CAAC,KAAK,GAAG,MAAM,kBAAkB,CAAC,SAAS,EAAE,cAAc,CAAC,CAAA;QAEhE,OAAO,IAAI,CAAA;IACZ,CAAC;IAEM,OAAO,CAAC,IAAU;QACxB,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC;YAAE,OAAM;QAErC,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;QAEjD,IAAI,CAAC,SAAS;YAAE,OAAM;QAEtB,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC;YACxB,cAAc,EAAE,SAAS;YACzB,UAAU,EAAE,CAAC;YACb,SAAS;SACT,CAAC,CAAA;IACH,CAAC;CACD"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * @copyright Sister Software
3
+ * @license AGPL-3.0
4
+ * @author Teffen Ellis, et al.
5
+ */
6
+ import { Span, WordClassifier } from "@mailwoman/core";
7
+ export declare class UnitClassifier extends WordClassifier {
8
+ explore(span: Span): void;
9
+ classify(input: Span | string, prev?: Span | string): Span;
10
+ }
11
+ //# sourceMappingURL=UnitClassifier.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UnitClassifier.d.ts","sourceRoot":"","sources":["../UnitClassifier.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAqBtD,qBAAa,cAAe,SAAQ,cAAc;IAC1C,OAAO,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI;IAiBhB,QAAQ,CAAC,KAAK,EAAE,IAAI,GAAG,MAAM,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG,MAAM,GAAG,IAAI;CAe1E"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * @copyright Sister Software
3
+ * @license AGPL-3.0
4
+ * @author Teffen Ellis, et al.
5
+ */
6
+ import { Span, WordClassifier } from "@mailwoman/core";
7
+ const AllNumbersPattern = /^#?\d+$/;
8
+ const SingleLetterPattern = /^#?[A-Za-z]$/;
9
+ const NumbersThenLetterPattern = /^#?\d+-?[A-Za-z]$/;
10
+ const LetterThenNumbersPattern = /^#?[A-Za-z]-?\d+$/;
11
+ function combinePatterns(...patterns) {
12
+ const components = patterns.map((arg) => arg.source);
13
+ const combined = new RegExp("(?:" + components.join(")|(?:") + ")");
14
+ return combined;
15
+ }
16
+ const combinedUnitRegexp = combinePatterns(AllNumbersPattern, SingleLetterPattern, NumbersThenLetterPattern, LetterThenNumbersPattern);
17
+ export class UnitClassifier extends WordClassifier {
18
+ explore(span) {
19
+ const prev = span.previousSibling;
20
+ const hasPrevUnitToken = prev?.is("unit_designator");
21
+ // If the previous token in a unit word, like apt or suite
22
+ // and this token is something like A2, 3b, 120, A, label it as a unit (number)
23
+ if (hasPrevUnitToken && combinedUnitRegexp.test(span.body)) {
24
+ span.classifications.add("unit");
25
+ }
26
+ // A token that starts with a '#' and is not the first token in the query
27
+ // and matches our regexp is always labeled as a unit
28
+ if (span.body[0] === "#" && prev && combinedUnitRegexp.test(span.body)) {
29
+ span.classifications.add("unit");
30
+ }
31
+ }
32
+ classify(input, prev) {
33
+ const span = Span.from(input);
34
+ if (prev) {
35
+ span.previousSiblings.add(Span.from(prev, {
36
+ classifications: ["unit_designator"],
37
+ }));
38
+ }
39
+ this.explore(span);
40
+ return span;
41
+ }
42
+ }
43
+ //# sourceMappingURL=UnitClassifier.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UnitClassifier.js","sourceRoot":"","sources":["../UnitClassifier.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAEtD,MAAM,iBAAiB,GAAG,SAAS,CAAA;AACnC,MAAM,mBAAmB,GAAG,cAAc,CAAA;AAC1C,MAAM,wBAAwB,GAAG,mBAAmB,CAAA;AACpD,MAAM,wBAAwB,GAAG,mBAAmB,CAAA;AAEpD,SAAS,eAAe,CAAC,GAAG,QAAkB;IAC7C,MAAM,UAAU,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;IAEpD,MAAM,QAAQ,GAAG,IAAI,MAAM,CAAC,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,GAAG,CAAC,CAAA;IACnE,OAAO,QAAQ,CAAA;AAChB,CAAC;AAED,MAAM,kBAAkB,GAAG,eAAe,CACzC,iBAAiB,EACjB,mBAAmB,EACnB,wBAAwB,EACxB,wBAAwB,CACxB,CAAA;AAED,MAAM,OAAO,cAAe,SAAQ,cAAc;IAC1C,OAAO,CAAC,IAAU;QACxB,MAAM,IAAI,GAAG,IAAI,CAAC,eAAe,CAAA;QACjC,MAAM,gBAAgB,GAAG,IAAI,EAAE,EAAE,CAAC,iBAAiB,CAAC,CAAA;QAEpD,0DAA0D;QAC1D,+EAA+E;QAC/E,IAAI,gBAAgB,IAAI,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAC5D,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;QACjC,CAAC;QAED,yEAAyE;QACzE,qDAAqD;QACrD,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,IAAI,IAAI,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACxE,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;QACjC,CAAC;IACF,CAAC;IAEe,QAAQ,CAAC,KAAoB,EAAE,IAAoB;QAClE,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QAE7B,IAAI,IAAI,EAAE,CAAC;YACV,IAAI,CAAC,gBAAgB,CAAC,GAAG,CACxB,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;gBACf,eAAe,EAAE,CAAC,iBAAiB,CAAC;aACpC,CAAC,CACF,CAAA;QACF,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;QAElB,OAAO,IAAI,CAAA;IACZ,CAAC;CACD"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * @copyright Sister Software
3
+ * @license AGPL-3.0
4
+ * @author Teffen Ellis, et al.
5
+ */
6
+ import { Span, WordClassifier } from "@mailwoman/core";
7
+ export declare class UnitDesignatorClassifier extends WordClassifier {
8
+ ready(): Promise<this>;
9
+ explore(span: Span): void;
10
+ }
11
+ //# sourceMappingURL=UnitDesignatorClassifier.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UnitDesignatorClassifier.d.ts","sourceRoot":"","sources":["../UnitDesignatorClassifier.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAA0C,IAAI,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAE9F,qBAAa,wBAAyB,SAAQ,cAAc;IAC9C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAQ5B,OAAO,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI;CAYhC"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * @copyright Sister Software
3
+ * @license AGPL-3.0
4
+ * @author Teffen Ellis, et al.
5
+ */
6
+ import { Alpha2LanguageCode, prepareLocaleIndex, Span, WordClassifier } from "@mailwoman/core";
7
+ export class UnitDesignatorClassifier extends WordClassifier {
8
+ async ready() {
9
+ const languages = this.languages ?? [Alpha2LanguageCode.English];
10
+ this.index = await prepareLocaleIndex(languages, "unit_types_numbered.txt");
11
+ return this;
12
+ }
13
+ explore(span) {
14
+ if (span.flags.has("numeral"))
15
+ return;
16
+ const languages = this.index.get(span.normalized);
17
+ if (languages) {
18
+ span.classifications.add({
19
+ classification: "unit_designator",
20
+ languages,
21
+ });
22
+ }
23
+ }
24
+ }
25
+ //# sourceMappingURL=UnitDesignatorClassifier.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UnitDesignatorClassifier.js","sourceRoot":"","sources":["../UnitDesignatorClassifier.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAE9F,MAAM,OAAO,wBAAyB,SAAQ,cAAc;IACpD,KAAK,CAAC,KAAK;QACjB,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAA;QAEhE,IAAI,CAAC,KAAK,GAAG,MAAM,kBAAkB,CAAC,SAAS,EAAE,yBAAyB,CAAC,CAAA;QAE3E,OAAO,IAAI,CAAA;IACZ,CAAC;IAEM,OAAO,CAAC,IAAU;QACxB,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC;YAAE,OAAM;QAErC,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;QAEjD,IAAI,SAAS,EAAE,CAAC;YACf,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC;gBACxB,cAAc,EAAE,iBAAiB;gBACjC,SAAS;aACT,CAAC,CAAA;QACH,CAAC;IACF,CAAC;CACD"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * @copyright Sister Software
3
+ * @license AGPL-3.0
4
+ * @author Teffen Ellis, et al.
5
+ */
6
+ import { type Classification, PhraseClassifier, Span, type WhosOnFirstPlacetype, WOFPlacenameCache } from "@mailwoman/core";
7
+ export interface WhosOnFirstPlacetypeConfig {
8
+ files: string[];
9
+ classifications: Classification[];
10
+ }
11
+ export declare class WhosOnFirstClassifier extends PhraseClassifier {
12
+ placetypeToCacheMap: Map<WhosOnFirstPlacetype, WOFPlacenameCache>;
13
+ ready(): Promise<this>;
14
+ explore(span: Span): void;
15
+ }
16
+ //# sourceMappingURL=WhosOnFirstClassifier.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WhosOnFirstClassifier.d.ts","sourceRoot":"","sources":["../WhosOnFirstClassifier.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACN,KAAK,cAAc,EACnB,gBAAgB,EAChB,IAAI,EAEJ,KAAK,oBAAoB,EACzB,iBAAiB,EACjB,MAAM,iBAAiB,CAAA;AAaxB,MAAM,WAAW,0BAA0B;IAC1C,KAAK,EAAE,MAAM,EAAE,CAAA;IACf,eAAe,EAAE,cAAc,EAAE,CAAA;CACjC;AAyED,qBAAa,qBAAsB,SAAQ,gBAAgB;IACnD,mBAAmB,+CAAqD;IAEzE,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAkCrB,OAAO,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI;CAgDhC"}