mirror of
https://github.com/yu-i-i/overleaf-cep.git
synced 2026-11-12 13:13:45 +01:00
38 lines
796 B
TypeScript
38 lines
796 B
TypeScript
export type SentenceSegment = {
|
|
segment: string
|
|
}
|
|
|
|
export type SentenceSegmenter = {
|
|
segment(input: string): {
|
|
[Symbol.iterator](): IterableIterator<SentenceSegment>
|
|
}
|
|
}
|
|
|
|
const sentenceRe = /[^.!?。!?…]+(?:[.!?。!?…]+|$)/gu
|
|
|
|
const fallbackSentenceSegmenter: SentenceSegmenter = {
|
|
segment(input: string) {
|
|
const segments: SentenceSegment[] = []
|
|
|
|
for (const match of input.matchAll(sentenceRe)) {
|
|
segments.push({ segment: match[0] })
|
|
}
|
|
|
|
return segments
|
|
},
|
|
}
|
|
|
|
export const createSentenceSegmenter = (locale?: string): SentenceSegmenter => {
|
|
if (!Intl.Segmenter) {
|
|
return fallbackSentenceSegmenter
|
|
}
|
|
|
|
try {
|
|
return new Intl.Segmenter(locale, {
|
|
granularity: 'sentence',
|
|
})
|
|
} catch {
|
|
return fallbackSentenceSegmenter
|
|
}
|
|
}
|