Skip to main content

Fast English word segmentation

Project description

Cover logo

Instant Segment: fast English word segmentation in Rust

Documentation Crates.io PyPI Build status License: Apache 2.0

Instant Segment is a fast Apache-2.0 library for English word segmentation. It is based on the Python wordsegment project written by Grant Jenks, which is in turn based on code from Peter Norvig's chapter Natural Language Corpus Data from the book Beautiful Data (Segaran and Hammerbacher, 2009).

For the microbenchmark included in this repository, Instant Segment is ~100x faster than the Python implementation. The API was carefully constructed so that multiple segmentations can share the underlying state to allow parallel usage.

How it works

Instant Segment works by segmenting a string into words by selecting the splits with the highest probability given a corpus of words and their occurrences.

For instance, provided that choose and spain occur more frequently than chooses and pain, and that the pair choose spain occurs more frequently than chooses pain, Instant Segment can help identify the domain choosespain.com as ChooseSpain.com which more likely matches user intent.

Read about how we built and improved Instant Segment for use in production at Instant Domain Search to help our users find relevant domains they can register.

Using the library

Python (>= 3.9)

pip install instant-segment

Rust

[dependencies]
instant-segment = "0.8.1"

Examples

The following examples expect unigrams and bigrams to exist. See the examples (Rust, Python) to see how to construct these objects.

import instant_segment

segmenter = instant_segment.Segmenter(unigrams, bigrams)
search = instant_segment.Search()
segmenter.segment("instantdomainsearch", search)
print([word for word in search])

--> ['instant', 'domain', 'search']
use instant_segment::{Search, Segmenter};
use std::collections::HashMap;

let segmenter = Segmenter::from_maps(unigrams, bigrams);
let mut search = Search::default();
let words = segmenter
    .segment("instantdomainsearch", &mut search)
    .unwrap();
println!("{:?}", words.collect::<Vec<&str>>())

--> ["instant", "domain", "search"]

Check out the tests for more thorough examples: Rust, Python

Testing

To run the tests run the following:

cargo t -p instant-segment --all-features

You can also test the Python bindings with:

make test-python

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

instant_segment-0.1.4-cp39-none-win_amd64.whl (141.4 kB view hashes)

Uploaded CPython 3.9 Windows x86-64

instant_segment-0.1.4-cp39-cp39-manylinux_2_24_x86_64.whl (199.9 kB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.24+ x86-64

instant_segment-0.1.4-cp39-cp39-macosx_10_7_x86_64.whl (190.3 kB view hashes)

Uploaded CPython 3.9 macOS 10.7+ x86-64

instant_segment-0.1.4-cp38-none-win_amd64.whl (141.4 kB view hashes)

Uploaded CPython 3.8 Windows x86-64

instant_segment-0.1.4-cp38-cp38-manylinux_2_24_x86_64.whl (199.7 kB view hashes)

Uploaded CPython 3.8 manylinux: glibc 2.24+ x86-64

instant_segment-0.1.4-cp37-none-win_amd64.whl (141.2 kB view hashes)

Uploaded CPython 3.7 Windows x86-64

instant_segment-0.1.4-cp37-cp37m-manylinux_2_24_x86_64.whl (199.7 kB view hashes)

Uploaded CPython 3.7m manylinux: glibc 2.24+ x86-64

instant_segment-0.1.4-cp37-cp37m-macosx_10_7_x86_64.whl (190.2 kB view hashes)

Uploaded CPython 3.7m macOS 10.7+ x86-64

instant_segment-0.1.4-cp36-none-win_amd64.whl (138.7 kB view hashes)

Uploaded CPython 3.6 Windows x86-64

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page