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