Package: wordsegment
WordSegmentis an Apache2 licensed module for English word
segmentation, written in pure-Python, and based on a trillion-word corpus.Based on code from the chapter “Natural Language Corpus Data” by Peter
Norvig from the book “Beautiful Data” (Segaran and Hammerbacher, 2009).Data files are derived from theGoogle Web Trillion Word Corpus, as
described by Thorsten Brants and Alex Franz, anddistributedby the
Linguistic Data Consortium. This module contains only a subset of that
data. The unigram data includes only the most common 333,000 words. Similarly,
bigram data includes only the most common 250,000 phrases. Every word and
phrase is lowercased with punctuation removed.FeaturesPure-PythonFully documented100% Test CoverageIncludes unigram and bigram dataCommand line interface for batch processingEasy to hack (e.g. different scoring, new data, different language)Developed on Python 2.7Tested on CPython 2.6, 2.7, 3.2, 3.3, 3.4, 3.5, 3.6 and PyPy, PyPy3Tested on Windows, Mac OS X, and LinuxTested using Travis CI and AppVeyor CIQuickstartInstallingWordSegmentis simple withpip:$ pip install wordsegmentYou can access documentation in the interpreter with Python’s built-in help
function:>>> import wordsegment
>>> help(wordsegment)TutorialIn your own Python programs, you’ll mostly want to usesegmentto divide a
phrase into a list of its parts:>>> from wordsegment import load, segment
>>> load()
>>> segment('thisisatest')
['this', 'is', 'a', 'test']Theloadfunction reads and parses the unigrams and bigrams data from
disk. Loading the data only needs to be done once.WordSegmentalso provides a command-line interface for batch
processing. This interface accepts two arguments: in-file and out-file. Lines
from in-file are iteratively segmented, joined by a space, and written to
out-file. Input and output default to stdin and stdout respectively.$ echo thisisatest | python -m wordsegment
this is a testIf you want to runWordSegmentas a kind of server process then use Python’s-uoption for unbuffered output. You can also setPYTHONUNBUFFERED=1in
the environment.>>> import subprocess as sp
>>> wordsegment = sp.Popen(
        ['python', '-um', 'wordsegment'],
        stdin=sp.PIPE, stdout=sp.PIPE, stderr=sp.STDOUT)
>>> wordsegment.stdin.write('thisisatest\n')
>>> wordsegment.stdout.readline()
'this is a test\n'
>>> wordsegment.stdin.write('workswithotherlanguages\n')
>>> wordsegment.stdout.readline()
'works with other languages\n'
>>> wordsegment.stdin.close()
>>> wordsegment.wait()  # Process exit code.
0The maximum segmented word length is 24 characters. Neither the unigram nor
bigram data contain words exceeding that length. The corpus also excludes
punctuation and all letters have been lowercased. Before segmenting text,cleanis called to transform the input to a canonical form:>>> from wordsegment import clean
>>> clean('She said, "Python rocks!"')
'shesaidpythonrocks'
>>> segment('She said, "Python rocks!"')
['she', 'said', 'python', 'rocks']Sometimes its interesting to explore the unigram and bigram counts
themselves. These are stored in Python dictionaries mapping word to count.>>> import wordsegment as ws
>>> ws.load()
>>> ws.UNIGRAMS['the']
23135851162.0
>>> ws.UNIGRAMS['gray']
21424658.0
>>> ws.UNIGRAMS['grey']
18276942.0Above we see that the spellinggrayis more common than the spellinggrey.Bigrams are joined by a space:>>> import heapq
>>> from pprint import pprint
>>> from operator import itemgetter
>>> pprint(heapq.nlargest(10, ws.BIGRAMS.items(), itemgetter(1)))
[('of the', 2766332391.0),
 ('in the', 1628795324.0),
 ('to the', 1139248999.0),
 ('on the', 800328815.0),
 ('for the', 692874802.0),
 ('and the', 629726893.0),
 ('to be', 505148997.0),
 ('is a', 476718990.0),
 ('with the', 461331348.0),
 ('from the', 428303219.0)]Some bigrams begin with
. This is to indicate the start of a bigram:>>> ws.BIGRAMS['
 where']
15419048.0
>>> ws.BIGRAMS['
 what']
11779290.0The unigrams and bigrams data is stored in thewordsegmentdirectory in
theunigrams.txtandbigrams.txtfiles respectively.User GuideWord Segment API ReferenceUsing a Different CorpusPython: Load dict Fast From FileReferencesWordSegment DocumentationWordSegment at PyPIWordSegment at GithubWordSegment Issue TrackerWordSegment LicenseCopyright 2018 Grant JenksLicensed under the Apache License, Version 2.0 (the “License”);
you may not use this file except in compliance with the License.
You may obtain a copy of the License athttp://www.apache.org/licenses/LICENSE-2.0Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an “AS IS” BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.