Skip to content

Commit 73b3ccc

Browse files
committed
Added new test samples and improved test coverage.
1 parent f025107 commit 73b3ccc

File tree

2 files changed

+26
-17
lines changed

2 files changed

+26
-17
lines changed

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,12 @@
22
All notable changes to `semchunk` will be documented here. This project adheres to [Keep a Changelog](https://keepachangelog.com/en/1.1.0/) and [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
33

44
## [0.1.1] - 2023-11-07
5+
### Added
6+
- Added new test samples.
7+
58
### Changed
69
- Improved chunking performance.
10+
- improved test coverage.
711

812
## [0.1.0] - 2023-11-05
913
### Added

tests/test_semchunk.py

Lines changed: 22 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,31 @@
11
"""Test semchunk."""
22
import semchunk
33
import tiktoken
4+
import nltk
45

5-
LOREM = """\
6-
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Id porta nibh venenatis cras sed felis eget velit. Et tortor consequat id porta nibh. Id diam vel quam elementum pulvinar. Consequat nisl vel pretium lectus quam id. Pharetra magna ac placerat vestibulum lectus mauris ultrices eros in. Id velit ut tortor pretium viverra. Tempus imperdiet nulla malesuada pellentesque elit eget gravida. In est ante in nibh mauris cursus mattis molestie a. Risus quis varius quam quisque id. Lorem ipsum dolor sit amet consectetur. Non nisi est sit amet facilisis magna. Leo in vitae turpis massa sed elementum tempus egestas sed. Luctus venenatis lectus magna fringilla urna porttitor rhoncus dolor. At erat pellentesque adipiscing commodo. Sagittis orci a scelerisque purus. Condimentum vitae sapien pellentesque habitant morbi tristique senectus et netus. A cras semper auctor neque vitae tempus quam pellentesque.
7-
\n\r\t\v\f
8-
Facilisi cras fermentum odio eu feugiat. Sit amet consectetur adipiscing elit pellentesque habitant morbi tristique senectus. Nulla posuere sollicitudin aliquam ultrices sagittis orci a scelerisque purus. Enim ut sem viverra aliquet eget sit amet tellus cras. Non arcu risus quis varius quam quisque id. Purus in mollis nunc sed id. Lorem sed risus ultricies tristique nulla aliquet enim. Diam in arcu cursus euismod quis viverra. Et sollicitudin ac orci phasellus egestas tellus rutrum tellus. Ac ut consequat semper viverra nam libero justo laoreet sit. Mattis ullamcorper velit sed ullamcorper morbi tincidunt ornare. Netus et malesuada fames ac turpis egestas. Sed enim ut sem viverra aliquet eget sit amet. In iaculis nunc sed augue lacus viverra vitae congue.
6+
# Download the Gutenberg corpus.
7+
nltk.download('gutenberg')
8+
gutenberg = nltk.corpus.gutenberg
99

10-
Nunc consequat interdum varius sit amet mattis vulputate enim. Pulvinar pellentesque habitant morbi tristique. Viverra ipsum nunc aliquet bibendum enim. Egestas erat imperdiet sed euismod nisi porta lorem mollis. Mattis rhoncus urna neque viverra justo nec. Dictum non consectetur a erat nam at lectus. Tincidunt arcu non sodales neque. Sagittis eu volutpat odio facilisis mauris. Nec nam aliquam sem et tortor consequat id porta. Nulla pellentesque dignissim enim sit amet venenatis urna. Eget magna fermentum iaculis eu non diam phasellus. Leo in vitae turpis massa sed elementum. Libero volutpat sed cras ornare arcu dui vivamus. Molestie nunc non blandit massa enim nec dui nunc mattis. Odio facilisis mauris sit amet massa vitae tortor. Ullamcorper velit sed ullamcorper morbi tincidunt ornare. Nec dui nunc mattis enim ut.
11-
12-
Id volutpat lacus laoreet non curabitur gravida arcu. Pulvinar proin gravida hendrerit lectus a. Id neque aliquam vestibulum morbi blandit cursus. Quam nulla porttitor massa id neque aliquam vestibulum morbi. Urna et pharetra pharetra massa massa ultricies. Sed enim ut sem viverra aliquet. Quam quisque id diam vel quam elementum pulvinar etiam non. Urna molestie at elementum eu facilisis sed odio morbi quis. Commodo sed egestas egestas fringilla phasellus faucibus scelerisque eleifend donec. Pharetra magna ac placerat vestibulum lectus mauris ultrices eros.
13-
14-
Quam quisque id diam vel quam elementum pulvinar. Pellentesque habitant morbi tristique senectus et netus et. Tellus in metus vulputate eu scelerisque felis. Facilisis sed odio morbi quis. Dictum sit amet justo donec enim diam. A diam maecenas sed enim ut sem viverra aliquet eget. Phasellus vestibulum lorem sed risus ultricies tristique nulla aliquet. Non odio euismod lacinia at quis risus sed vulputate odio. Et netus et malesuada fames ac turpis egestas maecenas. Scelerisque viverra mauris in aliquam sem fringilla ut. Ac odio tempor orci dapibus. Lectus vestibulum mattis ullamcorper velit sed ullamcorper morbi."""
10+
# Initalise the encoder.
11+
encoder = tiktoken.encoding_for_model('gpt-4')
1512

1613
def _token_counter(text: str) -> int:
17-
return len(tiktoken.encoding_for_model('gpt-4').encode(text))
14+
"""Count the number of tokens in a text."""
15+
16+
return len(encoder.encode(text))
1817

19-
def test_chunk():
20-
# Test a variety of chunk sizes.
21-
for chunk_size in range(1,100):
22-
for chunk in semchunk.chunk(LOREM, chunk_size=chunk_size, token_counter=_token_counter):
23-
assert _token_counter(chunk) <= chunk_size
18+
def test_chunk() -> None:
19+
"""Test `semchunk.chunk()`."""
2420

25-
# Test a chunk size larger than the text.
26-
semchunk.chunk(LOREM, chunk_size=len(LOREM)**2, token_counter=_token_counter)
21+
# Test a variety of chunk sizes.
22+
for chunk_size in {1, 2, 512}:
23+
# Test a variety of texts.
24+
for fileid in {'austen-emma.txt', 'carroll-alice.txt', 'shakespeare-macbeth.txt'}:
25+
sample = gutenberg.raw(fileid)
26+
for chunk in semchunk.chunk(sample, chunk_size=chunk_size, token_counter=_token_counter):
27+
assert _token_counter(chunk) <= chunk_size
28+
29+
# Test that recombining lowercased chunks stripped of whitespace yields the original text.
30+
lowercased_no_whitespace = ''.join(sample.lower().split())
31+
assert ''.join(semchunk.chunk(lowercased_no_whitespace, chunk_size, _token_counter)) == lowercased_no_whitespace

0 commit comments

Comments
 (0)