@echogarden/text-segmentation 0.6.0 → 0.8.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 (55) hide show
  1. package/dist/exports/Exports.d.ts +3 -0
  2. package/dist/exports/Exports.d.ts.map +1 -0
  3. package/dist/exports/Exports.js +3 -0
  4. package/dist/exports/Exports.js.map +1 -0
  5. package/dist/patterns/EastAsianCharacterPatterns.d.ts.map +1 -0
  6. package/dist/patterns/EastAsianCharacterPatterns.js.map +1 -0
  7. package/dist/{Patterns.d.ts → patterns/Patterns.d.ts} +1 -0
  8. package/dist/patterns/Patterns.d.ts.map +1 -0
  9. package/dist/{Patterns.js → patterns/Patterns.js} +9 -8
  10. package/dist/patterns/Patterns.js.map +1 -0
  11. package/dist/patterns/Suppressions.d.ts.map +1 -0
  12. package/dist/patterns/Suppressions.js.map +1 -0
  13. package/dist/{TextSegmentation.d.ts → segmentation/TextSegmentation.d.ts} +0 -1
  14. package/dist/segmentation/TextSegmentation.d.ts.map +1 -0
  15. package/dist/segmentation/TextSegmentation.js +575 -0
  16. package/dist/segmentation/TextSegmentation.js.map +1 -0
  17. package/dist/segmentation/WordSequence.d.ts.map +1 -0
  18. package/dist/segmentation/WordSequence.js.map +1 -0
  19. package/dist/tests/Test.d.ts.map +1 -0
  20. package/dist/{Test.js → tests/Test.js} +7 -5
  21. package/dist/tests/Test.js.map +1 -0
  22. package/dist/utilities/Timer.d.ts +7 -3
  23. package/dist/utilities/Timer.d.ts.map +1 -1
  24. package/dist/utilities/Timer.js +41 -39
  25. package/dist/utilities/Timer.js.map +1 -1
  26. package/package.json +7 -7
  27. package/src/exports/Exports.ts +2 -0
  28. package/src/{Patterns.ts → patterns/Patterns.ts} +11 -10
  29. package/src/segmentation/TextSegmentation.ts +743 -0
  30. package/src/{Test.ts → tests/Test.ts} +7 -5
  31. package/src/utilities/Timer.ts +50 -48
  32. package/dist/EastAsianCharacterPatterns.d.ts.map +0 -1
  33. package/dist/EastAsianCharacterPatterns.js.map +0 -1
  34. package/dist/Patterns.d.ts.map +0 -1
  35. package/dist/Patterns.js.map +0 -1
  36. package/dist/Suppressions.d.ts.map +0 -1
  37. package/dist/Suppressions.js.map +0 -1
  38. package/dist/Test.d.ts.map +0 -1
  39. package/dist/Test.js.map +0 -1
  40. package/dist/TextSegmentation.d.ts.map +0 -1
  41. package/dist/TextSegmentation.js +0 -364
  42. package/dist/TextSegmentation.js.map +0 -1
  43. package/dist/WordSequence.d.ts.map +0 -1
  44. package/dist/WordSequence.js.map +0 -1
  45. package/src/TextSegmentation.ts +0 -520
  46. /package/dist/{EastAsianCharacterPatterns.d.ts → patterns/EastAsianCharacterPatterns.d.ts} +0 -0
  47. /package/dist/{EastAsianCharacterPatterns.js → patterns/EastAsianCharacterPatterns.js} +0 -0
  48. /package/dist/{Suppressions.d.ts → patterns/Suppressions.d.ts} +0 -0
  49. /package/dist/{Suppressions.js → patterns/Suppressions.js} +0 -0
  50. /package/dist/{WordSequence.d.ts → segmentation/WordSequence.d.ts} +0 -0
  51. /package/dist/{WordSequence.js → segmentation/WordSequence.js} +0 -0
  52. /package/dist/{Test.d.ts → tests/Test.d.ts} +0 -0
  53. /package/src/{EastAsianCharacterPatterns.ts → patterns/EastAsianCharacterPatterns.ts} +0 -0
  54. /package/src/{Suppressions.ts → patterns/Suppressions.ts} +0 -0
  55. /package/src/{WordSequence.ts → segmentation/WordSequence.ts} +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"file":"TextSegmentation.js","sourceRoot":"","sources":["../src/TextSegmentation.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"WordSequence.d.ts","sourceRoot":"","sources":["../src/WordSequence.ts"],"names":[],"mappings":"AAAA,qBAAa,YAAY;IACxB,OAAO,EAAE,SAAS,EAAE,CAAK;IAEzB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE,aAAa,EAAE,OAAO,QAUpE;IAED,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,YAEhD;IAEA,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,oCAIrD;IAED,SAAS,CAAC,KAAK,EAAE,MAAM,UAEtB;IAED,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,eAEjD;IAEA,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,uCAItD;IAED,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAEnC;IAED,KAAK,iBAEJ;IAED,KAAK,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,gBAMzC;IAED,IAAI,SAAS,aAEZ;IAED,IAAI,SAAS,WAEZ;IAED,IAAI,QAAQ,WAEX;IAED,IAAI,UAAU,cAEb;IAED,IAAI,SAAS,cAEZ;IAED,IAAI,kBAAkB,gBAErB;IAED,IAAI,gBAAgB,aAEnB;IAED,IAAI,qBAAqB,gBAExB;IAED,IAAI,mBAAmB,aAEtB;IAED,IAAI,IAAI,WAEP;IAED,IAAI,MAAM,WAET;CACD;AAED,MAAM,WAAW,SAAS;IACzB,IAAI,EAAE,MAAM,CAAA;IAEZ,WAAW,EAAE,MAAM,CAAA;IACnB,SAAS,EAAE,MAAM,CAAA;IAEjB,aAAa,EAAE,OAAO,CAAA;CACtB"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"WordSequence.js","sourceRoot":"","sources":["../src/WordSequence.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,YAAY;IACxB,OAAO,GAAgB,EAAE,CAAA;IAEzB,OAAO,CAAC,IAAY,EAAE,eAAuB,EAAE,aAAsB;QACpE,MAAM,WAAW,GAAG,eAAe,CAAA;QACnC,MAAM,SAAS,GAAG,WAAW,GAAG,IAAI,CAAC,MAAM,CAAA;QAE3C,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;YACjB,IAAI;YACJ,WAAW;YACX,SAAS;YACT,aAAa;SACb,CAAC,CAAA;IACH,CAAC;IAED,YAAY,CAAC,UAAkB,EAAE,QAAgB;QAChD,OAAO,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;IACzE,CAAC;IAED,CAAC,gBAAgB,CAAC,UAAkB,EAAE,QAAgB;QACrD,KAAK,IAAI,CAAC,GAAG,UAAU,EAAE,CAAC,GAAG,QAAQ,EAAE,CAAC,EAAE,EAAE,CAAC;YAC5C,MAAM,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA;QACxB,CAAC;IACF,CAAC;IAED,SAAS,CAAC,KAAa;QACtB,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,IAAI,CAAA;IACjC,CAAC;IAED,aAAa,CAAC,UAAkB,EAAE,QAAgB;QACjD,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAA;IAChD,CAAC;IAED,CAAC,iBAAiB,CAAC,UAAkB,EAAE,QAAgB;QACtD,KAAK,IAAI,CAAC,GAAG,UAAU,EAAE,CAAC,GAAG,QAAQ,EAAE,CAAC,EAAE,EAAE,CAAC;YAC5C,MAAM,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAA;QACzB,CAAC;IACF,CAAC;IAED,UAAU,CAAC,KAAa;QACvB,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;IAC3B,CAAC;IAED,KAAK;QACJ,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;IAClC,CAAC;IAED,KAAK,CAAC,UAAkB,EAAE,QAAgB;QACzC,MAAM,cAAc,GAAG,IAAI,YAAY,EAAE,CAAA;QAEzC,cAAc,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAA;QAEjE,OAAO,cAAc,CAAA;IACtB,CAAC;IAED,IAAI,SAAS;QACZ,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;IAC7C,CAAC;IAED,IAAI,SAAS;QACZ,OAAO,IAAI,CAAC,UAAU,EAAE,IAAI,CAAA;IAC7B,CAAC;IAED,IAAI,QAAQ;QACX,OAAO,IAAI,CAAC,SAAS,EAAE,IAAI,CAAA;IAC5B,CAAC;IAED,IAAI,UAAU;QACb,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;IACvB,CAAC;IAED,IAAI,SAAS;QACZ,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;IACrC,CAAC;IAED,IAAI,kBAAkB;QACrB,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,aAAa,KAAK,IAAI,CAAC,CAAA;IAClE,CAAC;IAED,IAAI,gBAAgB;QACnB,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,aAAa,KAAK,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;IAC3F,CAAC;IAED,IAAI,qBAAqB;QACxB,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,aAAa,KAAK,KAAK,CAAC,CAAA;IACnE,CAAC;IAED,IAAI,mBAAmB;QACtB,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,aAAa,KAAK,KAAK,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;IAC5F,CAAC;IAED,IAAI,IAAI;QACP,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IAC/B,CAAC;IAED,IAAI,MAAM;QACT,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAA;IAC3B,CAAC;CACD"}
@@ -1,520 +0,0 @@
1
- import { buildWordOrNumberPattern as buildWordSplitterPattern, phraseSeparatorRegExp, sentenceSeparatorTrailingPunctuationCharacterRegExp, sentenceSeparatorCharacterRegExp, whitespacePatternRegExp, letterPatternGlobalRegExp, startsWithWhitespacePattern, endsWithWhitespacePattern } from './Patterns.js'
2
- import { cldrSuppressions, additionalSuppressions, leadingApostropheContractionSuppressions, nounSuppressions, tldSuppressions } from './Suppressions.js'
3
- import { eastAsianCharRangesRegExp } from './EastAsianCharacterPatterns.js'
4
- import { WordSequence } from './WordSequence.js'
5
- import { getShortLanguageCode } from './utilities/Utilities.js'
6
- export { WordSequence, type WordEntry } from './WordSequence.js'
7
-
8
- import { buildRegExp } from 'regexp-composer'
9
-
10
- ////////////////////////////////////////////////////////////////////////////////////////////////
11
- // Exported methods
12
- ////////////////////////////////////////////////////////////////////////////////////////////////
13
- export async function segmentText(text: string, options?: SegmentationOptions) {
14
- const wordSequence = await splitToWords(text, options)
15
-
16
- return segmentWordSequence(wordSequence)
17
- }
18
-
19
- export async function segmentWordSequence(wordSequence: WordSequence, options?: WordSequenceSegmentationOptions) {
20
- options = { ...defaultWordSequenceSegmentationOptions, ...options }
21
-
22
- const segmentWordRanges: Range[] = []
23
-
24
- {
25
- let segmentStartWordOffset = 0
26
- let nonWhitespaceWordSeen = false
27
-
28
- for (let wordIndex = 0; wordIndex < wordSequence.length; wordIndex++) {
29
- const word = wordSequence.getWordAt(wordIndex)
30
-
31
- if (word.endsWith('\n') && nonWhitespaceWordSeen) {
32
- const nextWord = wordIndex < wordSequence.length - 1 ? wordSequence.getWordAt(wordIndex + 1) : ''
33
-
34
- if (nextWord !== '\r' && nextWord !== '\n') {
35
- segmentWordRanges.push({ start: segmentStartWordOffset, end: wordIndex + 1 })
36
- segmentStartWordOffset = wordIndex + 1
37
- }
38
- }
39
-
40
- if (nonWhitespaceWordSeen === false) {
41
- nonWhitespaceWordSeen = !whitespacePatternRegExp.test(word)
42
- }
43
- }
44
-
45
- if (segmentStartWordOffset < wordSequence.length) {
46
- segmentWordRanges.push({ start: segmentStartWordOffset, end: wordSequence.length })
47
- }
48
- }
49
-
50
- const sentenceWordRanges: Range[] = []
51
- const segmentSentenceRanges: Range[] = []
52
-
53
- {
54
- const minimumSentenceLetterCount = 2
55
-
56
- for (let segmentIndex = 0; segmentIndex < segmentWordRanges.length; segmentIndex++) {
57
- const segmentWordRange = segmentWordRanges[segmentIndex]
58
-
59
- const segmentStartWordIndex = segmentWordRange.start
60
- const segmentEndWordIndex = segmentWordRange.end
61
-
62
- segmentSentenceRanges.push({ start: sentenceWordRanges.length, end: sentenceWordRanges.length })
63
-
64
- let sentenceStartWordOffset = segmentStartWordIndex
65
- let currentSentenceLetterCount = 0
66
-
67
- for (let wordIndex = segmentStartWordIndex; wordIndex < segmentEndWordIndex; wordIndex++) {
68
- const word = wordSequence.getWordAt(wordIndex)
69
-
70
- if (currentSentenceLetterCount < minimumSentenceLetterCount) {
71
- const matches = word.matchAll(letterPatternGlobalRegExp)
72
-
73
- for (const _ of matches) {
74
- currentSentenceLetterCount += 1
75
-
76
- if (currentSentenceLetterCount >= minimumSentenceLetterCount) {
77
- break
78
- }
79
- }
80
- }
81
-
82
- if (currentSentenceLetterCount >= minimumSentenceLetterCount && sentenceSeparatorCharacterRegExp.test(word)) {
83
- let trailingSequenceEndIndex = wordIndex
84
- let trailingSequenceContainedWhitespace = false
85
-
86
- while (trailingSequenceEndIndex < segmentEndWordIndex) {
87
- const trailingWord = wordSequence.getWordAt(trailingSequenceEndIndex)
88
-
89
- if (sentenceSeparatorTrailingPunctuationCharacterRegExp.test(trailingWord)) {
90
- if (!trailingSequenceContainedWhitespace && whitespacePatternRegExp.test(trailingWord)) {
91
- trailingSequenceContainedWhitespace = true
92
- }
93
-
94
- trailingSequenceEndIndex++
95
- } else {
96
- break
97
- }
98
- }
99
-
100
- sentenceWordRanges.push({
101
- start: sentenceStartWordOffset,
102
- end: trailingSequenceEndIndex
103
- })
104
-
105
- segmentSentenceRanges[segmentSentenceRanges.length - 1].end += 1
106
-
107
- sentenceStartWordOffset = trailingSequenceEndIndex
108
- currentSentenceLetterCount = 0
109
-
110
- wordIndex = trailingSequenceEndIndex - 1
111
- }
112
- }
113
-
114
- if (sentenceStartWordOffset < segmentEndWordIndex) {
115
- sentenceWordRanges.push({ start: sentenceStartWordOffset, end: segmentEndWordIndex })
116
- segmentSentenceRanges[segmentSentenceRanges.length - 1].end += 1
117
- }
118
- }
119
- }
120
-
121
- const sentences: Sentence[] = []
122
-
123
- for (const wordRange of sentenceWordRanges) {
124
- const sentenceWordSequence = wordSequence.slice(wordRange.start, wordRange.end)
125
-
126
- sentences.push(new Sentence(wordRange, sentenceWordSequence))
127
- }
128
-
129
- for (const sentence of sentences) {
130
- const phraseWordRanges: Range[] = []
131
-
132
- let sentenceEndWordOffset = sentence.wordRange.end
133
- let phraseStartWordOffset = sentence.wordRange.start
134
-
135
- for (let wordIndex = phraseStartWordOffset; wordIndex < sentenceEndWordOffset; wordIndex++) {
136
- const currentWord = wordSequence.getWordAt(wordIndex)
137
-
138
- const isCurrentWordPhraseSeparator =
139
- phraseSeparatorRegExp.test(currentWord) &&
140
- (!options.requireSpaceAfterColonsOrSemicolons ||
141
- (currentWord !== ':' && currentWord !== ';') ||
142
- whitespacePatternRegExp.test(wordSequence.getWordAt(wordIndex + 1)))
143
-
144
- if (isCurrentWordPhraseSeparator) {
145
- let whitespaceSeenOnce = false
146
-
147
- while (wordIndex < sentenceEndWordOffset - 1) {
148
- const nextWord = wordSequence.getWordAt(wordIndex + 1)
149
-
150
- if (!sentenceSeparatorTrailingPunctuationCharacterRegExp.test(nextWord)) {
151
- break
152
- }
153
-
154
- if (whitespacePatternRegExp.test(nextWord)) {
155
- whitespaceSeenOnce = true
156
- }
157
-
158
- if (nextWord === '"' && whitespaceSeenOnce) {
159
- break
160
- }
161
-
162
- wordIndex += 1
163
- }
164
-
165
- phraseWordRanges.push({
166
- start: phraseStartWordOffset,
167
- end: wordIndex + 1
168
- })
169
-
170
- phraseStartWordOffset = wordIndex + 1
171
- }
172
- }
173
-
174
- if (phraseStartWordOffset < sentenceEndWordOffset) {
175
- phraseWordRanges.push({ start: phraseStartWordOffset, end: sentenceEndWordOffset })
176
- }
177
-
178
- for (const wordRange of phraseWordRanges) {
179
- const phraseWordSequence = wordSequence.slice(wordRange.start, wordRange.end)
180
-
181
- sentence.phrases.push(new Phrase(wordRange, phraseWordSequence))
182
- }
183
- }
184
-
185
- const result: SegmentationResult = {
186
- words: wordSequence,
187
- sentences,
188
- segmentSentenceRanges,
189
- }
190
-
191
- return result
192
- }
193
-
194
- const cachedWordSplitterRegExps = new Map<string, RegExp>()
195
-
196
- export async function splitToWords(text: string, options?: SegmentationOptions) {
197
- if (!options) {
198
- options = {}
199
- }
200
-
201
- options = { ...defaultSegmentationOptions, ...options }
202
-
203
- if (options.language) {
204
- options.language = getShortLanguageCode(options.language)
205
- }
206
-
207
- const optionsAsJson = JSON.stringify(options)
208
-
209
- let wordSplitterRegExp = cachedWordSplitterRegExps.get(optionsAsJson)
210
-
211
- if (!wordSplitterRegExp) {
212
- wordSplitterRegExp = buildWordSplitterRegExpForOptions(options)
213
-
214
- cachedWordSplitterRegExps.set(optionsAsJson, wordSplitterRegExp)
215
- }
216
-
217
- let wordSequence = new WordSequence()
218
-
219
- function addPunctuationWordsBetween(startOffset: number, endOffset: number) {
220
- const punctuationWordSubstring = text.substring(startOffset, endOffset)
221
-
222
- let charOffset = startOffset
223
- let punctuationWordStartOffset = startOffset
224
-
225
- function addPunctuationWordIfNeeded() {
226
- if (charOffset > punctuationWordStartOffset) {
227
- const wordText = text.substring(punctuationWordStartOffset, charOffset)
228
- wordSequence.addWord(wordText, punctuationWordStartOffset, true)
229
-
230
- punctuationWordStartOffset = charOffset
231
- }
232
- }
233
-
234
- for (const char of punctuationWordSubstring) {
235
- if (char === ' ') {
236
- charOffset += 1
237
-
238
- continue
239
- }
240
-
241
- addPunctuationWordIfNeeded()
242
-
243
- charOffset += char.length
244
-
245
- addPunctuationWordIfNeeded()
246
- }
247
-
248
- addPunctuationWordIfNeeded()
249
- }
250
-
251
- const wordMatches = text.matchAll(wordSplitterRegExp)
252
-
253
- let lastMatchEndOffset = 0
254
-
255
- if (wordMatches) {
256
- for (const match of wordMatches) {
257
- const offsets = match.indices![0]!
258
- const matchStartOffset = offsets[0]
259
- const matchEndOffset = offsets[1]
260
-
261
- if (matchStartOffset > lastMatchEndOffset) {
262
- addPunctuationWordsBetween(lastMatchEndOffset, matchStartOffset)
263
- }
264
-
265
- const wordText = text.substring(matchStartOffset, matchEndOffset)
266
- wordSequence.addWord(wordText, matchStartOffset, false)
267
-
268
- lastMatchEndOffset = matchEndOffset
269
- }
270
-
271
- addPunctuationWordsBetween(lastMatchEndOffset, text.length)
272
- }
273
-
274
- if (options.enableEastAsianPostprocessing) {
275
- wordSequence = await postprocessEastAsianWords(text, wordSequence)
276
- }
277
-
278
- return wordSequence
279
- }
280
-
281
- async function postprocessEastAsianWords(containingText: string, wordSequence: WordSequence) {
282
- const icuSegmentation = await getIcuSegmentation()
283
-
284
- if (icuSegmentation === undefined) {
285
- return wordSequence
286
- }
287
-
288
- let icuInitialized = false
289
-
290
- const newWordSequence = new WordSequence()
291
-
292
- for (let wordIndex = 0; wordIndex < wordSequence.length; wordIndex++) {
293
- const wordEntry = wordSequence.entries[wordIndex]
294
- const wordStartOffset = wordEntry.startOffset
295
-
296
- const word = wordSequence.getWordAt(wordIndex)
297
-
298
- if (eastAsianCharRangesRegExp.test(word)) {
299
- if (!icuInitialized) {
300
- await icuSegmentation.initialize()
301
-
302
- icuInitialized = true
303
- }
304
-
305
- const wordBreaks = [...icuSegmentation.createWordBreakIterator(word)]
306
-
307
- for (let i = 0; i < wordBreaks.length - 1; i++) {
308
- const subwordStartOffset = wordStartOffset + wordBreaks[i]
309
- const subwordEndOffset = wordStartOffset + wordBreaks[i + 1]
310
-
311
- const subwordText = containingText.substring(subwordStartOffset, subwordEndOffset)
312
-
313
- newWordSequence.addWord(
314
- subwordText,
315
- subwordStartOffset,
316
- false,
317
- )
318
- }
319
- } else {
320
- const wordText = containingText.substring(wordEntry.startOffset, wordEntry.endOffset)
321
-
322
- newWordSequence.addWord(wordText, wordEntry.startOffset, wordEntry.isPunctuation)
323
- }
324
- }
325
-
326
- return newWordSequence
327
- }
328
-
329
- // Add any missing punctuation words to a word sequence
330
- export function addMissingPunctuationWordsToWordSequence(wordSequence: WordSequence, sourceText: string) {
331
- const originalWordsReverseMapping = new Map<number, number>()
332
-
333
- const wordSequenceWithPunctuation = new WordSequence()
334
-
335
- function addWordEntriesForTextSlice(textSlice: string, initialCharOffset: number) {
336
- let charOffset = initialCharOffset
337
-
338
- // Add entry for every codepoint (this will correctly treat characters beyond BMP)
339
- for (const char of textSlice) {
340
- const charEndOffset = charOffset + char.length
341
-
342
- const lastEntry = wordSequenceWithPunctuation.lastEntry
343
-
344
- if (char === ' ' && lastEntry && lastEntry.isPunctuation && lastEntry.text[0] === ' ') {
345
- wordSequenceWithPunctuation.lastEntry.text += ' '
346
- wordSequenceWithPunctuation.lastEntry.endOffset = charEndOffset
347
- } else {
348
- const wordText = sourceText.substring(charOffset, charEndOffset)
349
-
350
- wordSequenceWithPunctuation.addWord(wordText, charOffset, true)
351
- }
352
-
353
- charOffset = charEndOffset
354
- }
355
- }
356
-
357
- for (let wordIndex = 0; wordIndex < wordSequence.length; wordIndex++) {
358
- const wordEntry = wordSequence.getEntryAt(wordIndex)
359
- const wordStartOffset = wordEntry.startOffset
360
-
361
- const previousWordEndOffset = wordIndex > 0 ? wordSequence.entries[wordIndex - 1].endOffset : 0
362
-
363
- // Add entries for any punctuation characters between the current and previous word (or start)
364
- if (previousWordEndOffset !== wordStartOffset) {
365
- const textSlice = sourceText.substring(previousWordEndOffset, wordStartOffset)
366
-
367
- addWordEntriesForTextSlice(textSlice, previousWordEndOffset)
368
- }
369
-
370
- wordSequenceWithPunctuation.entries.push(wordEntry)
371
- originalWordsReverseMapping.set(wordSequenceWithPunctuation.length - 1, wordIndex)
372
-
373
- // If last word, add entries for any trailing punctuation characters
374
- if (wordIndex === wordSequence.length - 1) {
375
- if (sourceText.length !== wordEntry.endOffset) {
376
- const textSlice = sourceText.substring(wordEntry.endOffset, sourceText.length)
377
-
378
- addWordEntriesForTextSlice(textSlice, wordEntry.endOffset)
379
- }
380
- }
381
- }
382
-
383
- return { wordSequenceWithPunctuation, originalWordsReverseMapping }
384
- }
385
-
386
- function getPunctuationRanges(wordSequence: WordSequence, text: string) {
387
- const punctuationRanges: Range[] = []
388
- const wordEntries = wordSequence.entries
389
-
390
- if (wordEntries[0].startOffset > 0) {
391
- punctuationRanges.push({ start: 0, end: wordEntries[0].startOffset })
392
- }
393
-
394
- for (let i = 0; i < wordEntries.length; i++) {
395
- const entry = wordEntries[i]
396
-
397
- const previousEndOffset = wordEntries[i - 1]?.endOffset ?? 0
398
-
399
- if (entry.startOffset > previousEndOffset) {
400
- punctuationRanges.push({ start: previousEndOffset, end: entry.startOffset })
401
- }
402
-
403
- if (entry.isPunctuation) {
404
- punctuationRanges.push({ start: entry.startOffset, end: entry.endOffset })
405
- }
406
- }
407
-
408
- {
409
- const lastEndOffset = wordEntries[wordEntries.length - 1]?.endOffset
410
-
411
- if (lastEndOffset && lastEndOffset < text.length) {
412
- punctuationRanges.push({ start: lastEndOffset, end: text.length })
413
- }
414
- }
415
-
416
- return punctuationRanges
417
- }
418
-
419
- ////////////////////////////////////////////////////////////////////////////////////////////////
420
- // Helper methods
421
- ////////////////////////////////////////////////////////////////////////////////////////////////
422
- function buildWordSplitterRegExpForOptions(options: SegmentationOptions) {
423
- const cldrSuppressionsForLang = cldrSuppressions[options.language ?? ''] ?? []
424
- const extendedSuppressionsForLang = additionalSuppressions[options.language ?? ''] ?? []
425
- const contractionSuppressionsForLang = leadingApostropheContractionSuppressions[options.language ?? ''] ?? []
426
- const contractionSuppressionsForLangWithSingleQuote = contractionSuppressionsForLang.map(str => str.replaceAll(`'`, `’`))
427
- const customSuppressions = options.customSuppressions ?? []
428
-
429
- let suppressions = [
430
- ...customSuppressions,
431
- ...cldrSuppressionsForLang,
432
- ...extendedSuppressionsForLang,
433
- ...contractionSuppressionsForLang,
434
- ...contractionSuppressionsForLangWithSingleQuote,
435
- ...nounSuppressions,
436
- ...tldSuppressions,
437
- ]
438
-
439
- const wordPattern = buildWordSplitterPattern([
440
- ...suppressions,
441
- ...suppressions.map(word => word.toLocaleLowerCase()),
442
- ...suppressions.map(word => word.toLocaleUpperCase()),
443
- ])
444
-
445
- const wordSplitterRegExp = buildRegExp(wordPattern, { global: true })
446
-
447
- return wordSplitterRegExp
448
- }
449
-
450
- async function getIcuSegmentation() {
451
- try {
452
- const icuSegmentation = await import('@echogarden/icu-segmentation-wasm')
453
-
454
- return icuSegmentation
455
- } catch {
456
- return undefined
457
- }
458
- }
459
-
460
- ////////////////////////////////////////////////////////////////////////////////////////////////
461
- // Types
462
- ////////////////////////////////////////////////////////////////////////////////////////////////
463
- export interface SegmentationResult {
464
- words: WordSequence
465
- sentences: Sentence[]
466
- segmentSentenceRanges: Range[]
467
- }
468
-
469
- export class TextFragment {
470
- wordRange: Range
471
- words: WordSequence
472
-
473
- constructor(wordRange: Range, words: WordSequence) {
474
- this.wordRange = wordRange
475
- this.words = words
476
- }
477
-
478
- get text() {
479
- return this.words.text
480
- }
481
-
482
- get charRange(): Range {
483
- return {
484
- start: this.words.firstEntry.startOffset,
485
- end: this.words.lastEntry.endOffset
486
- }
487
- }
488
- }
489
-
490
- export class Sentence extends TextFragment {
491
- phrases: Phrase[] = []
492
- }
493
-
494
- export class Phrase extends TextFragment {
495
- }
496
-
497
- export interface Range {
498
- start: number
499
- end: number
500
- }
501
-
502
- export interface SegmentationOptions {
503
- language?: string
504
- customSuppressions?: string[]
505
- enableEastAsianPostprocessing?: boolean
506
- }
507
-
508
- export const defaultSegmentationOptions: SegmentationOptions = {
509
- language: '',
510
- customSuppressions: [],
511
- enableEastAsianPostprocessing: true,
512
- }
513
-
514
- export interface WordSequenceSegmentationOptions {
515
- requireSpaceAfterColonsOrSemicolons: boolean
516
- }
517
-
518
- export const defaultWordSequenceSegmentationOptions: WordSequenceSegmentationOptions = {
519
- requireSpaceAfterColonsOrSemicolons: true
520
- }
File without changes