Usage

To use cnt.rulebase in a project:

from cnt import rulebase

Sentence segmentation (see cnt.rulebase.sentseg() and cnt.rulebase.sentseg_lazy())

text = '''
史卡肯表示:「我今天打的和当初在温布登打的一样,除了这一次幸运之神落在我这边以外。」他说:「其
实在温布登时最后的胜利也有可能属于我,因为当时打到了第五盘却仍然僵持在二十比十八的对峙。」菲
利普西斯在当初的温布登比赛中,在面对史卡肯时曾经发出四十四个爱司球,但是为他搏得「重炮手」美誉
的发球,并没有在今天的球赛中助他一臂之力。菲利普西斯在第一盘第七局以三十比四十落后时,竟然击出
双发失误;另外在第九局他又再度犯下双发失误球,让史卡肯得以坐拥两次的破发点,并且顺利赢得第一盘
。在这场历时六十六分钟的比赛里,史卡肯表示:「我大力主攻他的第二发球,同时我也对他的第一发球施
压,使我取得更多的机会。」这也是史卡肯和菲利普西斯在六度对峙中的第二次获胜。
'''


# 1. Default option.
rulebase.sentseg(text)

# 1. Return. [ (str, (start_idx, end_idx)), ... ]
[('史卡肯表示:「我今天打的和当初在温布登打的一样,除了这一次幸运之神落在我这边以外。', (1, 42)),
('」他说:「其\n实在温布登时最后的胜利也有可能属于我,因为当时打到了第五盘却仍然僵持在二十比十八的对峙。', (42, 93)),
('」菲\n利普西斯在当初的温布登比赛中,在面对史卡肯时曾经发出四十四个爱司球,但是为他搏得「重炮手」美誉\n的发球,并没有在今天的球赛中助他一臂之力。',
(93, 165)),
('菲利普西斯在第一盘第七局以三十比四十落后时,竟然击出\n双发失误;', (165, 197)),
('另外在第九局他又再度犯下双发失误球,让史卡肯得以坐拥两次的破发点,并且顺利赢得第一盘\n。', (197, 241)),
('在这场历时六十六分钟的比赛里,史卡肯表示:「我大力主攻他的第二发球,同时我也对他的第一发球施\n压,使我取得更多的机会。', (241, 300)),
('」这也是史卡肯和菲利普西斯在六度对峙中的第二次获胜。', (300, 326))]


# 2. Extend the sentence ending with delimiters.
rulebase.sentseg(text, extend_ending_with_delimiters=True)

# 2. Return.
[('史卡肯表示:「我今天打的和当初在温布登打的一样,除了这一次幸运之神落在我这边以外。」', (1, 43)),
('他说:「其\n实在温布登时最后的胜利也有可能属于我,因为当时打到了第五盘却仍然僵持在二十比十八的对峙。」', (43, 94)),
('菲\n利普西斯在当初的温布登比赛中,在面对史卡肯时曾经发出四十四个爱司球,但是为他搏得「重炮手」美誉\n的发球,并没有在今天的球赛中助他一臂之力。',
(94, 165)),
('菲利普西斯在第一盘第七局以三十比四十落后时,竟然击出\n双发失误;', (165, 197)),
('另外在第九局他又再度犯下双发失误球,让史卡肯得以坐拥两次的破发点,并且顺利赢得第一盘\n。', (197, 241)),
('在这场历时六十六分钟的比赛里,史卡肯表示:「我大力主攻他的第二发球,同时我也对他的第一发球施\n压,使我取得更多的机会。」', (241, 301)),
('这也是史卡肯和菲利普西斯在六度对峙中的第二次获胜。', (301, 326))]


# 3. Include dynamic ending ``:``.
rulebase.sentseg(text, extend_ending_with_delimiters=True, dynamic_endings=[':'])

# 3. Return.
[('史卡肯表示:「', (1, 8)),
('我今天打的和当初在温布登打的一样,除了这一次幸运之神落在我这边以外。」', (8, 43)),
('他说:「', (43, 47)),
('其\n实在温布登时最后的胜利也有可能属于我,因为当时打到了第五盘却仍然僵持在二十比十八的对峙。」', (47, 94)),
('菲\n利普西斯在当初的温布登比赛中,在面对史卡肯时曾经发出四十四个爱司球,但是为他搏得「重炮手」美誉\n的发球,并没有在今天的球赛中助他一臂之力。',
(94, 165)),
('菲利普西斯在第一盘第七局以三十比四十落后时,竟然击出\n双发失误;', (165, 197)),
('另外在第九局他又再度犯下双发失误球,让史卡肯得以坐拥两次的破发点,并且顺利赢得第一盘\n。', (197, 241)),
('在这场历时六十六分钟的比赛里,史卡肯表示:「', (241, 263)),
('我大力主攻他的第二发球,同时我也对他的第一发球施\n压,使我取得更多的机会。」', (263, 301)),
('这也是史卡肯和菲利普西斯在六度对峙中的第二次获胜。', (301, 326))]


# Return a generator for a better performance.
rulebase.sentseg_lazy(text)

Pattern filtering (see cnt.rulebase.collector)

text = '」他说:「其实在Wimbledon时最后的胜利也有可能属于我,因为当时打到了第5盘却仍然僵持在20比18的对峙。'

# 1. Collect Chinese + English + Digits.
rulebase.collector.chinese_sentence_chars.result(text)

# 1. Return.
[('他说', (1, 3)),
('其实在Wimbledon时最后的胜利也有可能属于我', (5, 30)),
('因为当时打到了第5盘却仍然僵持在20比18的对峙', (31, 55))]


# 2. Collect only Chinese.
rulebase.collector.chinese_chars.result(text)

# 2. Return.
[('他说', (1, 3)),
('其实在', (5, 8)),
('时最后的胜利也有可能属于我', (17, 30)),
('因为当时打到了第', (31, 39)),
('盘却仍然僵持在', (40, 47)),
('比', (49, 50)),
('的对峙', (52, 55))]


# 3. Generate a new collector for any Unicode codepoint intervals.
my_collector_lazy, my_collector = rulebase.collector.generate_collector([
        rulebase.const.ITV_CHINESE_CHARS,
        rulebase.const.ITV_ENGLISH_CHARS,
])

# 3. Return.
[('他说', (1, 3)),
('其实在Wimbledon时最后的胜利也有可能属于我', (5, 30)),
('因为当时打到了第', (31, 39)),
('盘却仍然僵持在', (40, 47)),
('比', (49, 50)),
('的对峙', (52, 55))]

Pattern replacement (see cnt.rulebase.replacer)

text = '」他说:「其实在Wimbledon时最后的胜利也有可能属于我,因为当时打到了第5盘却仍然僵持在20比18的对峙。'

# 1. Replace English characters by the empty string.
rulebase.replacer.english_chars.result(text)

# 1. Return. (segment, ((start_idx, end_idx), is_replaced))
[('」他说:「其实在', ((0, 8), False)),
('', ((8, 17), True)),
('时最后的胜利也有可能属于我,因为当时打到了第5盘却仍然僵持在20比18的对峙。', ((17, 56), False))]


# 2. Return merged string.
rulebase.replacer.english_chars_to_string.result(text)

# 2. Return. str.
'」他说:「其实在时最后的胜利也有可能属于我,因为当时打到了第5盘却仍然僵持在20比18的对峙。'


# 3. Generate a new replacer for any Unicode codepoint intervals & arbitrary replacement function.
my_replacer_lazy, my_replacer, my_replacer_to_string = rulebase.replacer.generate_replacer(
        lambda x: '<{}>'.format(len(x)),
        [rulebase.const.ITV_ENGLISH_CHARS],
)

# 3. Return.
[('」他说:「其实在', ((0, 8), False)),
('<9>', ((8, 17), True)),
('时最后的胜利也有可能属于我,因为当时打到了第5盘却仍然僵持在20比18的对峙。', ((17, 56), False))]