有一些字符串內容,我必須拆分。首先,我需要將字符串內容分成幾行。將字符串拆分爲行和句子,但忽略縮寫
這是我該怎麼辦:
str.split('\n').forEach((item) => {
if (item) {
// TODO: split also each line into sentences
let data = {
type : 'item',
content: [{
content : item,
timestamp: Math.floor(Date.now()/1000)
}]
};
// Save `data` to DB
}
});
但現在我還需要每一行分成句子。我對此的困難是正確分割它。因此我會使用.
(點和空格)來分割線條。 但也有縮略語的數組,不應分割線:
cont abbr = ['vs.', 'min.', 'max.']; // Just an example; there are 70 abbrevations in that array
...而且有幾個規則:
- 任何數量和網點或單個字母和點也應該被忽略,因爲分割字符串:
1.
,2.
,30.
,A.
,b.
- 大寫和小寫應該被忽略:
Max. Lorem ipsum
不應被分裂。Lorem max. ipsum
。
例
const str = 'Just some examples:\nThis example has min. 2 lines. Max. 10 lines. There are some words: 1. Foo and 2. bar.';
的該結果應該是四個數據對象:
{ type: 'item', content: [{ content: 'Just some examples:', timestamp: 123 }] }
{ type: 'item', content: [{ content: 'This example has min. 2 lines.', timestamp: 123 }] }
{ type: 'item', content: [{ content: 'Max. 10 lines.', timestamp: 123 }] }
{ type: 'item', content: [{ content: 'There are some words: 1. Foo and 2. bar.', timestamp: 123 }] }
你可能,可能的話,可以用一個正則表達式來做到這一點(我做不到,但並不意味着這是不可能的),但它會寫一個野獸並保持。我建議使用一個非常寬鬆的正則表達式來掃描字符串中的潛在匹配,然後在上下文中對照像您所描述的一組規則對它們進行評估。它仍然很複雜,但至少應該更易於閱讀和排除故障。另外,如果你正在分裂自然語言文本,不要忽視''你好,我是Sue,「她說。 「這是一個字符串?」她問。 「這是。」'和'我喜歡'字符串'這樣的單位。' – Palpatim