In [1]:
!pip install agglomcluster nltk datasketch networkx


Requirement already satisfied (use --upgrade to upgrade): agglomcluster in /home/mseal/.pylocal/lib/python2.7/site-packages
Requirement already satisfied (use --upgrade to upgrade): nltk in /home/mseal/.pylocal/lib/python2.7/site-packages
Requirement already satisfied (use --upgrade to upgrade): datasketch in /home/mseal/.pylocal/lib/python2.7/site-packages
Requirement already satisfied (use --upgrade to upgrade): networkx in /home/mseal/.pylocal/lib/python2.7/site-packages
Requirement already satisfied (use --upgrade to upgrade): numpy in /home/mseal/.pylocal/lib/python2.7/site-packages (from datasketch)
Requirement already satisfied (use --upgrade to upgrade): decorator>=3.4.0 in /home/mseal/.pylocal/lib/python2.7/site-packages (from networkx)

In [2]:
from pprint import pprint as pp

def read(fname):
    with open(fname, 'rb') as fhandle:
        return fhandle.read().decode('UTF-8')
    
def progress(iterable, print_index=100, size=None):
    if size is None:
        size = len(iterable)
    for i, e in enumerate(iterable):
        if i % print_index == 0 and i > 0:
            print "Progress: {} / {}".format(i, size)
        yield e

# Download from http://govrank.org/archive and convert with pdftotext
texts = { source: read(source) for source in [
    'budgets/sunnyvale_2015.txt',
    'budgets/sausilito_2016.txt',
    'budgets/oakland_2015.txt',
    'budgets/mountain_view_2015.txt',
    'budgets/addison_tx_2015.txt',
    'budgets/cleveland_oh_2015.txt',
    'budgets/fort_lauderdale_fl_2014.txt',
    'budgets/lakewood_co_2015.txt',
    'budgets/wyandotte_count_kansas_city_2013.txt']}

In [3]:
import nltk

# Organize our NLTK tools here
sent_detector = nltk.data.load('tokenizers/punkt/english.pickle')
tokenizer = nltk.tokenize.RegexpTokenizer('\s+', gaps=True)
stop_words = set(nltk.corpus.stopwords.words('english'))
porter = nltk.stem.porter.PorterStemmer()

extract_words = tokenizer.tokenize
extract_sentences = sent_detector.tokenize

In [4]:
import re
from collections import namedtuple

# Let's track attributes related to the raw sentences
Sentence = namedtuple('Sentence', ['original', 'tokens', 'source'])

def tokenize_sentence(sent):
    # Get the set of stemmed, non-stop words
    return set(
        porter.stem(w.lower()) for w in extract_words(sent)
        if w.lower() not in stop_words and
        re.match("^[a-zA-Z]+$", w) and
        len(porter.stem(w.lower())) > 2)

sentences = []
for source, text in texts.iteritems():
    original_sent_list = extract_sentences(text)
    sent_tokenize_list = map(tokenize_sentence, original_sent_list)
    source_sentences = map(lambda (a,b): Sentence(a,b,source), zip(original_sent_list, sent_tokenize_list))
    sentences.extend(filter(lambda s: len(s.tokens) > 3, source_sentences))

In [5]:
def jaccard(s1, s2):
    s1 = set(s1)
    s2 = set(s2)
    try:
        return float(len(s1 & s2)) / len(s1 | s2)
    except ZeroDivisionError:
        return 0.0

# This is just to filter out weak relationships and speed up clustering
# Lower is better, but too low adds a bunch of meaningless work
THRESHOLD = 0.4

In [6]:
# This would be n^2 work... we can do better

# print '{} total sentences'.format(len(sentences))

# graph = nx.Graph()
# edges = []
# for index_one, sent_one in progress(enumerate(sentences), 20, len(sentences)):
#     if index_one and (index_one % 100) == 0:
#         print index_one
#     for index_two, sent_two in enumerate(sentences):
#         if index_one == index_two:
#             continue
#         score = jaccard(sent_one.tokens, sent_two.tokens)
#         if score > THRESHOLD:
#             edges.append((index_one, index_two, { 'weight': score }))
# graph.add_edges_from(edges)

# print '{} sentences -> {} edges'.format(len(graph), graph.size())

In [7]:
from datasketch import MinHash, MinHashLSH

# This estimates the relationships we would make by n^2 comparisons
# See https://en.wikipedia.org/wiki/MinHash for how it works
def min_hash(s):
    h = MinHash(num_perm=128)
    for w in s:
        h.update(w.encode('utf8'))
    return h

# To distribute this you'll need some custom tooling here
lsh = MinHashLSH(threshold=THRESHOLD, num_perm=128)
for index, sent in progress(enumerate(sentences), 1500, len(sentences)):
    lsh.insert(index, min_hash(sent.tokens))


Progress: 1500 / 26109
Progress: 3000 / 26109
Progress: 4500 / 26109
Progress: 6000 / 26109
Progress: 7500 / 26109
Progress: 9000 / 26109
Progress: 10500 / 26109
Progress: 12000 / 26109
Progress: 13500 / 26109
Progress: 15000 / 26109
Progress: 16500 / 26109
Progress: 18000 / 26109
Progress: 19500 / 26109
Progress: 21000 / 26109
Progress: 22500 / 26109
Progress: 24000 / 26109
Progress: 25500 / 26109

In [8]:
import networkx as nx

print '{} total sentences'.format(len(sentences))

graph = nx.Graph()
edges = []
for index_one, sent in progress(enumerate(sentences), 1000, len(sentences)):
    for index_two in lsh.query(min_hash(sent.tokens)):
        if index_two == index_one:
            continue
        # Double check if our score matches the minhash estimate (which it wont many times)
        score = jaccard(sent.tokens, sentences[index_two].tokens)
        if score > THRESHOLD:
            edges.append((index_one, index_two, { 'weight': score }))
graph.add_edges_from(edges)

print '{} sentences -> {} edges'.format(len(graph), graph.size())


26109 total sentences
Progress: 1000 / 26109
Progress: 2000 / 26109
Progress: 3000 / 26109
Progress: 4000 / 26109
Progress: 5000 / 26109
Progress: 6000 / 26109
Progress: 7000 / 26109
Progress: 8000 / 26109
Progress: 9000 / 26109
Progress: 10000 / 26109
Progress: 11000 / 26109
Progress: 12000 / 26109
Progress: 13000 / 26109
Progress: 14000 / 26109
Progress: 15000 / 26109
Progress: 16000 / 26109
Progress: 17000 / 26109
Progress: 18000 / 26109
Progress: 19000 / 26109
Progress: 20000 / 26109
Progress: 21000 / 26109
Progress: 22000 / 26109
Progress: 23000 / 26109
Progress: 24000 / 26109
Progress: 25000 / 26109
Progress: 26000 / 26109
6943 sentences -> 36361 edges

In [9]:
import time
from hac import GreedyAgglomerativeClusterer

start = time.time()
dendro = GreedyAgglomerativeClusterer().cluster(graph)
print 'Clustering {} clusters took {} seconds'.format(len(dendro.clusters()), time.time() - start)


Clustering 782 clusters took 12.1087648869 seconds

In [10]:
%matplotlib inline
import matplotlib.pyplot as plt

def centroid(cluster):
    max_score = 0.0
    max_elem = None
    for c1 in cluster:
        score = 0.0
        for c2 in cluster:
            score += jaccard(c1.tokens, c2.tokens)
        if score > max_score:
            max_score = score
            max_elem = c1
    return max_elem

def similarity(cluster):
    score = 0.0
    for c1 in cluster:
        for c2 in cluster:
            score += jaccard(c1.tokens, c2.tokens)
    return score / (len(cluster) ** 2)

# Plot the cluster consitency
# 1.0 means all the phrases are identical, not so interesting
# low values mean the cluster has a wide spread of components
# which all connect individually
clusters = [[sentences[i] for i in c] for c in dendro.clusters()]
focused_clusters = sorted(
    filter(lambda c: len(c) > 5 and len(c) < 50, clusters), key=similarity, reverse=True)
plt.plot(map(similarity, focused_clusters))
interesting_clusters = [c for c in focused_clusters if len(set(s.source for s in c)) > 1]
# Our cross-source clusters have lower similarity but avoid repeated phrasing issues
plt.plot(map(similarity, interesting_clusters))


Out[10]:
[<matplotlib.lines.Line2D at 0x7fe64d30f8d0>]

In [11]:
# See how our cluster sizes are distributed
# Ideally a nice laplacian distribution should be visible

print len(clusters)
print len(filter(lambda c: len(c) > 5, clusters))
print len(filter(lambda c: len(c) > 10, clusters))
print len(filter(lambda c: len(c) > 15, clusters))
print len(filter(lambda c: len(c) > 20, clusters))
print len(filter(lambda c: len(c) > 50, clusters))
print len(filter(lambda c: len(c) > 100, clusters))

print 'Multi-source focused clusters: {}'.format(sum(1 for c in interesting_clusters))

# Ours is a little weak, we don't get many medium size clusters
# This indicates we could use more data or form more/better edges
plt.hist(map(len, clusters), 100)


782
29
18
10
9
2
0
Multi-source focused clusters: 10
Out[11]:
(array([ 513.,  184.,    0.,   35.,   11.,    0.,   10.,    0.,    3.,
           3.,    0.,    3.,    0.,    2.,    0.,    0.,    1.,    0.,
           2.,    3.,    0.,    1.,    1.,    0.,    1.,    0.,    0.,
           0.,    0.,    0.,    0.,    0.,    0.,    0.,    1.,    0.,
           0.,    0.,    0.,    0.,    1.,    0.,    0.,    0.,    0.,
           0.,    0.,    0.,    0.,    0.,    1.,    0.,    0.,    0.,
           0.,    0.,    0.,    0.,    0.,    1.,    1.,    0.,    1.,
           1.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
           0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
           0.,    0.,    0.,    0.,    1.,    0.,    0.,    0.,    0.,
           0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    1.]),
 array([  1.  ,   1.61,   2.22,   2.83,   3.44,   4.05,   4.66,   5.27,
          5.88,   6.49,   7.1 ,   7.71,   8.32,   8.93,   9.54,  10.15,
         10.76,  11.37,  11.98,  12.59,  13.2 ,  13.81,  14.42,  15.03,
         15.64,  16.25,  16.86,  17.47,  18.08,  18.69,  19.3 ,  19.91,
         20.52,  21.13,  21.74,  22.35,  22.96,  23.57,  24.18,  24.79,
         25.4 ,  26.01,  26.62,  27.23,  27.84,  28.45,  29.06,  29.67,
         30.28,  30.89,  31.5 ,  32.11,  32.72,  33.33,  33.94,  34.55,
         35.16,  35.77,  36.38,  36.99,  37.6 ,  38.21,  38.82,  39.43,
         40.04,  40.65,  41.26,  41.87,  42.48,  43.09,  43.7 ,  44.31,
         44.92,  45.53,  46.14,  46.75,  47.36,  47.97,  48.58,  49.19,
         49.8 ,  50.41,  51.02,  51.63,  52.24,  52.85,  53.46,  54.07,
         54.68,  55.29,  55.9 ,  56.51,  57.12,  57.73,  58.34,  58.95,
         59.56,  60.17,  60.78,  61.39,  62.  ]),
 <a list of 100 Patch objects>)

In [12]:
pp(map(centroid, interesting_clusters))


[Sentence(original=u'[New in FY 2012/13]\n\nN/A\n\nN/A\n\n156,306\n\nN/A\n\n96\n99%\n\n49\n94%\n\nPercent of total Department operating budget expended.', tokens=set([u'oper', u'depart', u'total', u'percent', u'budget']), source='budgets/sunnyvale_2015.txt'),
 Sentence(original=u'P a g e 108 | 181\n\nINVESTING IN THE QUALITY OF SAUSALITO\u2019S FUTURE\n\n\x0cCITY OF SAUSALITO\n\nSTRATEGIC RESOURCE ALLOCATION PLAN \u2013 TWO YEAR BUDGET\n\nFY 2014 \u2013 2016\n\nDEPARTMENT REVENUES AND EXPENSES BY CATEGORY\nDescription\nPermits & Fees\nInterest Income\nTotal Revenues\nTransfers\nTotal Expenditures\n\nActual 2012-13\n171,127\n1,106\n172,234\n\nAdopted 2013-14\n150,000\n150,000\n\nAmended 2013-14\n150,000\n150,000\n\nProposed 2014-15\n150,000\n150,000\n\nProjected 2015-16\n150,000\n150,000\n\n126,042\n126,042\n\n180,750\n180,750\n\n464,340\n464,340\n\n241,400\n241,400\n\n150,000\n150,000\n\nP a g e 109 | 181\n\nINVESTING IN THE QUALITY OF SAUSALITO\u2019S FUTURE\n\n\x0cCITY OF SAUSALITO\n\nSTRATEGIC RESOURCE ALLOCATION PLAN \u2013 TWO YEAR BUDGET\n\nFY 2014 \u2013 2016\n\nCOUNTY MEASURE A AND B FUND\nDEPARTMENT DESCRIPTION\nVoters in Marin approved Measure A in November of 2004.', tokens=set([u'counti', u'depart', u'qualiti', u'novemb', u'year', u'incom', u'total', u'fee', u'citi', u'transfer', u'two', u'categori', u'revenu', u'expenditur', u'futur', u'interest', u'resourc', u'approv', u'strateg', u'marin', u'alloc', u'voter', u'plan', u'measur', u'sausalito', u'actual', u'fund', u'amend', u'invest', u'adopt', u'descript', u'budget', u'project', u'expens', u'permit', u'propos']), source='budgets/sausilito_2016.txt'),
 Sentence(original=u'Council approved an addi\u019fonal $1,000,000 for 2014 and 2015 with a\nbudget amendment to Resolu\u019fon R2013\u03720229.', tokens=set([u'amend', u'approv', u'budget', u'council']), source='budgets/cleveland_oh_2015.txt'),
 Sentence(original=u'The funding is provided by (87.4%) intergovernmental\nrevenue sources, (1.3%) miscellaneous sources and the (11.3%) Health and\nHuman Services levy.', tokens=set([u'sourc', u'intergovernment', u'miscellan', u'revenu', u'provid', u'servic', u'fund', u'health', u'human']), source='budgets/cleveland_oh_2015.txt'),
 Sentence(original=u'* Accounts for use of fund balance for balancing purposes.', tokens=set([u'fund', u'account', u'use', u'balanc']), source='budgets/oakland_2015.txt'),
 Sentence(original=u'Fiscal Year 2013-14 unaudited revenues are $4.5 million, or 4.6\npercent higher than adopted revenues.', tokens=set([u'fiscal', u'adopt', u'percent', u'revenu', u'year', u'unaudit', u'higher']), source='budgets/mountain_view_2015.txt'),
 Sentence(original=u'HOME\n\nCommunity\nDevelopment\nBlock Grant\n\n175.', tokens=set([u'home', u'grant', u'develop', u'block', u'commun']), source='budgets/sunnyvale_2015.txt'),
 Sentence(original=u'\uf077 2014 Budget vs. 2014 Revised is up $535,976 primarily due to capital improvement contingencies.', tokens=set([u'capit', u'primarili', u'budget', u'due', u'improv', u'revis']), source='budgets/lakewood_co_2015.txt'),
 Sentence(original=u'*3 Includes increased funding of $1,200 for miscellaneous increases.', tokens=set([u'increas', u'fund', u'includ', u'miscellan']), source='budgets/mountain_view_2015.txt'),
 Sentence(original=u'General Operating Fund 10-Year Long-Range Financial Forecast\u2014includes the\nGeneral Operating Fund revenue and expenditure forecast;\n\n4.', tokens=set([u'oper', u'revenu', u'financi', u'gener', u'fund', u'expenditur']), source='budgets/mountain_view_2015.txt')]

In [13]:
check = interesting_clusters[0]

# Total operating budgets for departments are a common topic
pp(centroid(check))
print
pp(check)


Sentence(original=u'[New in FY 2012/13]\n\nN/A\n\nN/A\n\n156,306\n\nN/A\n\n96\n99%\n\n49\n94%\n\nPercent of total Department operating budget expended.', tokens=set([u'oper', u'depart', u'total', u'percent', u'budget']), source='budgets/sunnyvale_2015.txt')

[Sentence(original=u'T\n\no w n\n\nO\n\nf\n\nA\n\nd d i s o n\n\n,\n\nBudgeted operating revenues total\n$10,588,726, an increase of $323,187\nfrom the previous year.', tokens=set([u'oper', u'previou', u'budget', u'revenu', u'increas', u'total']), source='budgets/addison_tx_2015.txt'),
 Sentence(original=u'Total operating expenses are budgeted at\n$847,992 for FY2015.', tokens=set([u'oper', u'total', u'expens', u'budget']), source='budgets/addison_tx_2015.txt'),
 Sentence(original=u'Department Budgets\u2014includes operating plans for all City departments;\n\n5.', tokens=set([u'oper', u'citi', u'depart', u'plan']), source='budgets/mountain_view_2015.txt'),
 Sentence(original=u'[New in FY 2012/13]\n\nN/A\n\nN/A\n\n156,306\n\nN/A\n\n96\n99%\n\n49\n94%\n\nPercent of total Department operating budget expended.', tokens=set([u'oper', u'depart', u'total', u'percent', u'budget']), source='budgets/sunnyvale_2015.txt'),
 Sentence(original=u'During the \u201coff year\u201d of the operating\nbudget, the projects budget is reviewed in detail.', tokens=set([u'oper', u'project', u'review', u'budget']), source='budgets/sunnyvale_2015.txt'),
 Sentence(original=u'CC-12\n\nPercent of total Arts and Recreation operating budget expended.', tokens=set([u'oper', u'art', u'recreat', u'percent', u'budget', u'total']), source='budgets/sunnyvale_2015.txt')]

In [14]:
check = interesting_clusters[4]

# Project funds reserved for specific purposes are common
pp(centroid(check))
print
pp(check)


Sentence(original=u'* Accounts for use of fund balance for balancing purposes.', tokens=set([u'fund', u'account', u'use', u'balanc']), source='budgets/oakland_2015.txt')

[Sentence(original=u'Funds budgeted in FY 2019/20 and FY 2020/21 are for design and\nconstruction of all greens and sand bunkers at both courses, including the practice putting greens.', tokens=set([u'practic', u'budget', u'construct', u'fund', u'sand', u'green', u'includ', u'bunker', u'put', u'design']), source='budgets/sunnyvale_2015.txt'),
 Sentence(original=u'The Property/Casualty City Insurance Fund has adopted expenditures of $21.5 million for\nFY 2014.', tokens=set([u'million', u'insur', u'fund', u'adopt', u'citi', u'expenditur']), source='budgets/fort_lauderdale_fl_2014.txt'),
 Sentence(original=u'The FY 2015/16 and FY 2016/17 budgets fund the design of the project\nand the FY 2016/17 budget includes construction costs.', tokens=set([u'budget', u'construct', u'project', u'fund', u'design', u'includ']), source='budgets/sunnyvale_2015.txt'),
 Sentence(original=u'Budgeted funds include design and construction.', tokens=set([u'fund', u'design', u'budget', u'includ']), source='budgets/sunnyvale_2015.txt'),
 Sentence(original=u'Central Services Fund\nThe Central Services Fund adopted expenditures are $16.4 million, which is $177,802 more than\nthe FY 2013 Amended Budget.', tokens=set([u'central', u'amend', u'servic', u'adopt', u'fund', u'expenditur']), source='budgets/fort_lauderdale_fl_2014.txt'),
 Sentence(original=u'The Fiscal Year 2013-14 General Operating Fund balance\nprovided a supplement for the General Fund Reserve of $322,000 to bring this reserve to\npolicy level.', tokens=set([u'fiscal', u'oper', u'bring', u'provid', u'gener', u'fund', u'supplement', u'balanc', u'polici', u'year', u'reserv']), source='budgets/mountain_view_2015.txt'),
 Sentence(original=u'Important Issues:\n\uf0b7 There have been funds included in the budgets that were transferred from the Health Levy.', tokens=set([u'transfer', u'budget', u'fund', u'health', u'includ', u'import']), source='budgets/wyandotte_count_kansas_city_2013.txt'),
 Sentence(original=u'* Accounts for use of fund balance for balancing purposes.', tokens=set([u'fund', u'account', u'use', u'balanc']), source='budgets/oakland_2015.txt'),
 Sentence(original=u'Note: Does not include the $2.0 million anticipated budget savings, but does include the $1.0 million\ntransfer for Retirees\u2019 Health Liability.', tokens=set([u'anticip', u'transfer', u'million', u'budget', u'health', u'includ']), source='budgets/mountain_view_2015.txt'),
 Sentence(original=u'* Accounts for use of fund balance for balancing purposes.', tokens=set([u'fund', u'account', u'use', u'balanc']), source='budgets/oakland_2015.txt'),
 Sentence(original=u'* Accounts for use of fund balance for balancing purposes.', tokens=set([u'fund', u'account', u'use', u'balanc']), source='budgets/oakland_2015.txt'),
 Sentence(original=u'Sanitation Fund\nThe Sanitation Fund adopted expenditures are $20.4 million which includes funding for cleaning\nthe beach, which was transferred from the General Fund this year.', tokens=set([u'sanit', u'million', u'transfer', u'gener', u'adopt', u'fund', u'expenditur', u'includ', u'clean']), source='budgets/fort_lauderdale_fl_2014.txt'),
 Sentence(original=u'A summary of the Fiscal Year 2014-15 General\nOperating Fund Adopted Budget is discussed below.', tokens=set([u'fiscal', u'oper', u'gener', u'adopt', u'budget', u'fund', u'year', u'discuss', u'summari']), source='budgets/mountain_view_2015.txt'),
 Sentence(original=u'Self-Insured Health and Property/Casualty Funds\nThe Self-Insured Health Fund adopted expenditures are $19.9 million.', tokens=set([u'fund', u'adopt', u'health', u'expenditur']), source='budgets/fort_lauderdale_fl_2014.txt'),
 Sentence(original=u'* Accounts for use of fund balance for balancing purposes.', tokens=set([u'fund', u'account', u'use', u'balanc']), source='budgets/oakland_2015.txt')]

In [15]:
check = focused_clusters[1]

# Our sentence parser failed us here -- we've got a jumble of terms not getting separated
pp(centroid(check))
print
pp(check)


Sentence(original=u'2011\nACTUAL\nBeginning Fund Balance\n\n2012\nACTUAL\n\n2013\nBUDGET\n\n2013\nAMENDED\n\n2014\nBUDGET\n\n$341,879\n\n$248,505\n\n$213,771\n\n$302,416\n\nREVENUE\nTax Revenue\nPermits and Licenses\nIntergovernmental Revenues\nCharges for Services\nFines, Forfeits, Fees\nInterest Income\nMiscellaneous Revenues\nReimbursements\nOther Financing Sources\nTotal Revenues\n\n1,005,544\n0\n0\n0\n0\n5,426\n0\n0\n0\n$1,010,970\n\n986,589\n0\n0\n0\n0\n2,044\n124,736\n0\n0\n$1,113,369\n\n949,224\n0\n0\n0\n0\n5,000\n0\n0\n0\n$954,224\n\n966,290\n947,153\n0\n0\n0\n0\n0\n0\n0\n0\n1,500\n1,200\n0\n0\n0\n164,700\n0\n0\n$967,790 $1,113,053\n\nEXPENSES\nPersonnel\nServices\nSupplies\nGrants, Claims\nTransfers, Other\nCapital Outlay\nDebt Service\nReserves\nTotal Expenses\n\n0\n0\n0\n0\n0\n1,054,193\n50,151\n0\n$1,104,344\n\n0\n0\n0\n0\n0\n0\n0\n0\n0\n0\n867,700\n955,105\n191,758\n140,200\n0\n25,000\n$1,059,458 $1,120,305\n\n0\n0\n0\n0\n0\n0\n0\n0\n0\n0\n652,705\n528,607\n140,200\n962,071\n55,000\n25,000\n$847,905 $1,515,678\n\nEnding Fund Balance\n\n$248,505\n\n$302,416\n\nPreface - 52\n\n$47,690\n\n$422,301\n\n$422,301\n\n$19,676\n\n\x0cUNIFIED GOVERNMENT\nWYANDOTTE COUNTY/KANSAS CITY, KANSAS\n2013 AMENDED AND 2014 OPERATING BUDGET\nFUND SUMMARY\n911 Tax Fund\nWYANDOTTE COUN\n\nThe 911 Tax Fund is a special revenue fund restricted in its use to operating expenses and the purchase\nof 911 emergency-related equipment.', tokens=set([u'oper', u'claim', u'wyandott', u'purchas', u'tax', u'capit', u'restrict', u'suppli', u'reserv', u'incom', u'total', u'special', u'coun', u'use', u'fee', u'intergovernment', u'miscellan', u'personnel', u'licens', u'end', u'revenu', u'interest', u'balanc', u'begin', u'sourc', u'financ', u'fund', u'govern', u'outlay', u'debt', u'charg', u'prefac', u'actual', u'amend', u'servic', u'budget', u'kansa', u'unifi', u'expens', u'permit', u'summari', u'reimburs']), source='budgets/wyandotte_count_kansas_city_2013.txt')

[Sentence(original=u'2011\nACTUAL\n\n2012\nACTUAL\n\n2013\nBUDGET\n\n2013\nAMENDED\n\n2014\nBUDGET\n\nBeginning Fund Balance\n\n$713,354\n\n$753,915\n\n$667,000\n\n$750,228\n\n$651,402\n\nREVENUE\nTax Revenue\nPermits and Licenses\nIntergovernmental Revenues\nCharges for Services\nFines, Forfeits, Fees\nInterest Income\nMiscellaneous Revenues\nReimbursements\nOther Financing Sources\nTotal Revenues\n\n0\n0\n0\n0\n401,872\n0\n5\n0\n0\n$401,877\n\n0\n0\n0\n0\n388,058\n0\n0\n0\n0\n$388,058\n\n0\n0\n0\n0\n400,000\n0\n0\n0\n0\n$400,000\n\n0\n0\n0\n0\n400,000\n0\n0\n0\n0\n$400,000\n\n0\n0\n0\n0\n400,000\n0\n0\n0\n0\n$400,000\n\nEXPENSES\nPersonnel\nServices\nSupplies\nGrants, Claims\nMiscellaneous- Other\nCapital Outlay\nDebt Service\nReserves\nTotal Expenses\n\n316,545\n39,527\n5,244\n0\n0\n0\n0\n0\n$361,316\n\n343,838\n40,994\n6,913\n0\n0\n0\n0\n0\n$391,745\n\n382,624\n65,610\n5,592\n0\n0\n0\n0\n45,000\n$498,826\n\n382,624\n65,610\n5,592\n0\n0\n0\n0\n45,000\n$498,826\n\n420,769\n65,610\n5,592\n56,000\n0\n0\n0\n45,000\n$592,971\n\nEnding Fund Balance\n\n$753,915\n\n$750,228\n\n$568,174\n\n$651,402\n\n$458,431\n\nPreface - 60\n\n\x0cUNIFIED GOVERNMENT\nWYANDOTTE COUNTY/KANSAS CITY, KANSAS\n2013 AMENDED AND 2014 OPERATING BUDGET\nFUND SUMMARY\nDevelopmental Disabilities Levy Fund\nWYANDOTTE COUN\n\nThis levy fund helps support Wyandotte Developmental Disabilities services.', tokens=set([u'oper', u'claim', u'wyandott', u'help', u'tax', u'capit', u'suppli', u'reserv', u'incom', u'total', u'coun', u'fee', u'intergovernment', u'miscellan', u'personnel', u'licens', u'support', u'end', u'revenu', u'interest', u'balanc', u'development', u'begin', u'sourc', u'financ', u'fund', u'levi', u'govern', u'outlay', u'debt', u'charg', u'prefac', u'actual', u'amend', u'servic', u'budget', u'kansa', u'unifi', u'expens', u'permit', u'summari', u'disabl', u'reimburs']), source='budgets/wyandotte_count_kansas_city_2013.txt'),
 Sentence(original=u'Beginning Fund Balance\n\n2011\nACTUAL\n\n2012\nACTUAL\n\n2013\nBUDGET\n\n2013\nAMENDED\n\n2014\nBUDGET\n\n$5,564,354\n\n$7,648,286\n\n$5,580,925\n\n$9,305,379\n\n$5,342,836\n\nREVENUE\nTax Revenue\n236,789\n163,093\n140,200\n140,400\n140,200\nPermits and Licenses\n155,677\n573,386\n264,000\n288,000\n288,000\nIntergovernmental Revenues\n0\n0\n0\n0\n0\nCharges for Services\n23,943,607 26,271,586 26,578,100 26,744,100 28,045,100\nFines, Forfeits, Fees\n0\n0\n0\n0\n0\nInterest Income\n78,790\n107,625\n80,000\n100,000\n100,000\nMiscellaneous Revenues\n99,561\n29,433\n5,500\n5,500\n5,500\nReimbursements\n6,932\n3,442\n32,000\n32,000\n32,000\nOther Financing Sources\n0\n0\n0\n0\n0\nTotal Revenues\n$24,521,356 $27,148,565 $27,099,800 $27,310,000 $28,610,800\nEXPENSES\nPersonnel\nServices\nSupplies\nGrants, Claims\nTransfers, Other\nCapital Outlay\nDebt Service\nReserves\nTotal Expenses\n*\nEnding Fund Balance\n\n7,113,974\n1,986,318\n2,589,723\n3,930,599\n2,833,163\n2,163,964\n1,819,683\n\n7,219,199\n1,895,100\n2,641,903\n4,148,946\n2,728,928\n5,078,247\n1,779,149\n\n7,744,368\n7,576,164\n7,699,164\n2,122,794\n2,165,920\n2,165,920\n2,993,180\n3,183,980\n3,193,980\n4,147,000\n4,326,000\n4,477,000\n3,308,985\n3,308,985\n6,247,649\n8,636,394\n8,731,494\n7,111,195\n1,780,000\n1,780,000\n1,780,000\n250,000\n200,000\n200,000\n$22,437,424 $25,491,472 $30,982,721 $31,272,543 $32,874,908\n$7,648,286\n\n$9,305,379\n\nPreface - 71\n\n$1,698,004\n\n$5,342,836\n\n$1,078,728\n\n\x0cUNIFIED GOVERNMENT\nWYANDOTTE COUNTY/KANSAS CITY, KANSAS\n2013 AMENDED AND 2014 OPERATING BUDGET\nFUND SUMMARY\n\nStormwater Utility Enterprise Fund\nRevenue from this fund are received from the stormwater utility fee and are used to fund the operations,\nmaintenance, capital improvements and debt service of the Unified Government\u2019s Municipal Separate\nStorm Sewer System (MS4).', tokens=set([u'oper', u'claim', u'wyandott', u'enterpris', u'tax', u'capit', u'suppli', u'reserv', u'incom', u'total', u'use', u'fee', u'intergovernment', u'miscellan', u'receiv', u'personnel', u'licens', u'system', u'end', u'revenu', u'interest', u'balanc', u'begin', u'sourc', u'storm', u'financ', u'util', u'fund', u'govern', u'outlay', u'debt', u'charg', u'prefac', u'actual', u'amend', u'servic', u'municip', u'budget', u'kansa', u'separ', u'sewer', u'unifi', u'expens', u'permit', u'improv', u'summari', u'stormwat', u'reimburs']), source='budgets/wyandotte_count_kansas_city_2013.txt'),
 Sentence(original=u'2011\nACTUAL\n\n2012\nACTUAL\n\n2013\nBUDGET\n\n2013\nAMENDED\n\n2014\nBUDGET\n\n$986,736\n\n$1,792,507\n\n$1,220,176\n\n$2,122,928\n\n$1,561,387\n\nREVENUE\nTax Revenue\nPermits and Licenses\nIntergovernmental Revenues\nCharges for Services\nFines, Forfeits, Fees\nInterest Income\nMiscellaneous Revenues\nReimbursements\nOther Financing Sources\nTotal Revenues\n\n0\n0\n0\n2,921,110\n0\n16,310\n10,103\n0\n0\n$2,947,523\n\n0\n0\n117,084\n3,312,463\n0\n14,543\n0\n0\n0\n$3,444,090\n\n0\n0\n0\n3,300,000\n0\n13,700\n0\n0\n0\n$3,313,700\n\n0\n0\n0\n3,300,000\n0\n13,700\n0\n0\n0\n$3,313,700\n\n0\n0\n0\n3,300,000\n0\n13,700\n0\n0\n0\n$3,313,700\n\nEXPENSES\nPersonnel\nServices\nSupplies\nGrants, Claims\nTransfers, Other\nCapital Outlay\nDebt Service\nReserves\nTotal Expenses\n\n600,000\n47,299\n0\n233,153\n255,061\n1,006,239\n0\n0\n$2,141,752\n\n600,000\n70,605\n0\n270,478\n180,548\n1,992,038\n0\n0\n$3,113,669\n\n733,594\n380,000\n0\n318,483\n223,408\n1,970,000\n0\n200,000\n$3,825,485\n\n715,314\n380,000\n0\n323,483\n286,444\n1,970,000\n0\n200,000\n$3,875,241\n\n749,407\n380,000\n0\n323,483\n439,886\n2,520,000\n0\n200,000\n$4,612,776\n\nEnding Fund Balance\n\n$1,792,507\n\n$2,122,928\n\n$708,391\n\n$1,561,387\n\n$262,311\n\nBeginning Fund Balance\n\nPreface - 72\n\n\x0cUNIFIED GOVERNMENT\nWYANDOTTE COUNTY/KANSAS CITY, KANSAS\n2013 AMENDED AND 2014 OPERATING BUDGET\nFUND SUMMARY\n\nStreet and Highway Fund\nWYANDOTTE COUN\n\nThe Street and Highway Fund is a special revenue fund which accounts for the revenues received from\nthe State of Kansas for road improvements.', tokens=set([u'oper', u'claim', u'wyandott', u'tax', u'begin', u'street', u'suppli', u'reserv', u'incom', u'total', u'special', u'coun', u'fee', u'intergovernment', u'miscellan', u'receiv', u'personnel', u'licens', u'end', u'revenu', u'state', u'interest', u'highway', u'balanc', u'capit', u'sourc', u'financ', u'fund', u'govern', u'outlay', u'debt', u'charg', u'prefac', u'account', u'actual', u'amend', u'servic', u'budget', u'kansa', u'unifi', u'expens', u'permit', u'summari', u'road', u'reimburs']), source='budgets/wyandotte_count_kansas_city_2013.txt'),
 Sentence(original=u'2011\nACTUAL\nBeginning Fund Balance\n\n2012\nACTUAL\n\n2013\nBUDGET\n\n2013\nAMENDED\n\n2014\nBUDGET\n\n$341,879\n\n$248,505\n\n$213,771\n\n$302,416\n\nREVENUE\nTax Revenue\nPermits and Licenses\nIntergovernmental Revenues\nCharges for Services\nFines, Forfeits, Fees\nInterest Income\nMiscellaneous Revenues\nReimbursements\nOther Financing Sources\nTotal Revenues\n\n1,005,544\n0\n0\n0\n0\n5,426\n0\n0\n0\n$1,010,970\n\n986,589\n0\n0\n0\n0\n2,044\n124,736\n0\n0\n$1,113,369\n\n949,224\n0\n0\n0\n0\n5,000\n0\n0\n0\n$954,224\n\n966,290\n947,153\n0\n0\n0\n0\n0\n0\n0\n0\n1,500\n1,200\n0\n0\n0\n164,700\n0\n0\n$967,790 $1,113,053\n\nEXPENSES\nPersonnel\nServices\nSupplies\nGrants, Claims\nTransfers, Other\nCapital Outlay\nDebt Service\nReserves\nTotal Expenses\n\n0\n0\n0\n0\n0\n1,054,193\n50,151\n0\n$1,104,344\n\n0\n0\n0\n0\n0\n0\n0\n0\n0\n0\n867,700\n955,105\n191,758\n140,200\n0\n25,000\n$1,059,458 $1,120,305\n\n0\n0\n0\n0\n0\n0\n0\n0\n0\n0\n652,705\n528,607\n140,200\n962,071\n55,000\n25,000\n$847,905 $1,515,678\n\nEnding Fund Balance\n\n$248,505\n\n$302,416\n\nPreface - 52\n\n$47,690\n\n$422,301\n\n$422,301\n\n$19,676\n\n\x0cUNIFIED GOVERNMENT\nWYANDOTTE COUNTY/KANSAS CITY, KANSAS\n2013 AMENDED AND 2014 OPERATING BUDGET\nFUND SUMMARY\n911 Tax Fund\nWYANDOTTE COUN\n\nThe 911 Tax Fund is a special revenue fund restricted in its use to operating expenses and the purchase\nof 911 emergency-related equipment.', tokens=set([u'oper', u'claim', u'wyandott', u'purchas', u'tax', u'capit', u'restrict', u'suppli', u'reserv', u'incom', u'total', u'special', u'coun', u'use', u'fee', u'intergovernment', u'miscellan', u'personnel', u'licens', u'end', u'revenu', u'interest', u'balanc', u'begin', u'sourc', u'financ', u'fund', u'govern', u'outlay', u'debt', u'charg', u'prefac', u'actual', u'amend', u'servic', u'budget', u'kansa', u'unifi', u'expens', u'permit', u'summari', u'reimburs']), source='budgets/wyandotte_count_kansas_city_2013.txt'),
 Sentence(original=u'2011\nACTUAL\n\n2012\nACTUAL\n\n2013\nBUDGET\n\n2013\nAMENDED\n\n2014\nBUDGET\n\nBeginning Fund Balance\n\n$780,226\n\n$490,132\n\n$0\n\n$9,712\n\n$0\n\nREVENUE\nTax Revenue\nPermits and Licenses\nIntergovernmental Revenues\nCharges for Services\nFines, Forfeits, Fees\nInterest Income\nMiscellaneous Revenues\nReimbursements\nOther Financing Sources\nTotal Revenues\n\n742,598\n0\n0\n0\n0\n0\n5,563\n0\n0\n$748,161\n\n62\n0\n0\n0\n0\n0\n9,650\n0\n0\n$9,712\n\n0\n0\n0\n0\n0\n0\n0\n0\n0\n$0\n\n0\n0\n0\n0\n0\n0\n0\n0\n0\n$0\n\n0\n0\n0\n0\n0\n0\n0\n0\n0\n$0\n\n0\n548,532\n0\n0\n291,090\n198,633\n0\n0\n$1,038,255\n\n0\n490,132\n0\n0\n0\n0\n0\n0\n$490,132\n\n0\n0\n0\n0\n0\n0\n0\n0\n$0\n\n$490,132\n\n$9,712\n\n$0\n\nEXPENSES\nPersonnel\nServices\nSupplies\nGrants, Claims\nTransfers, Other\nCapital Outlay\nDebt Service\nReserves\nTotal Expenses\nEnding Fund Balance\n\nPreface - 53\n\n0\n9,712\n0\n0\n0\n0\n0\n0\n$9,712\n$0\n\n0\n0\n0\n0\n0\n0\n0\n0\n$0\n$0\n\n\x0cUNIFIED GOVERNMENT\nWYANDOTTE COUNTY/KANSAS CITY, KANSAS\n2013 AMENDED AND 2014 OPERATING BUDGET\nFUND SUMMARY\n\nWyandotte County 911 Fund\nWYANDOTTE COUN\n\nThe State of Kansas has enacted changes to 911 laws per the 911 Act contained in Senate Bill 50.', tokens=set([u'oper', u'claim', u'wyandott', u'tax', u'capit', u'counti', u'suppli', u'reserv', u'incom', u'total', u'coun', u'fee', u'intergovernment', u'miscellan', u'personnel', u'licens', u'per', u'end', u'revenu', u'state', u'interest', u'contain', u'senat', u'enact', u'balanc', u'begin', u'sourc', u'financ', u'act', u'fund', u'govern', u'outlay', u'debt', u'charg', u'prefac', u'actual', u'amend', u'law', u'servic', u'bill', u'budget', u'kansa', u'unifi', u'expens', u'permit', u'chang', u'summari', u'reimburs']), source='budgets/wyandotte_count_kansas_city_2013.txt'),
 Sentence(original=u'2011\nACTUAL\nBeginning Fund Balance\n\n2012\nACTUAL\n\n2013\nBUDGET\n\n2013\nAMENDED\n\n2014\nBUDGET\n\n$39,063\n\n$361,777\n\n$503,257\n\n$572,168\n\n$58,907\n\nREVENUE\nTax Revenue\nPermits and Licenses\nIntergovernmental Revenues\nCharges for Services\nFines, Forfeits, Fees\nInterest Income\nMiscellaneous Revenues\nReimbursements\nOther Financing Sources\nTotal Revenues\n\n4,035,294\n0\n0\n4,383,301\n0\n5,079\n838\n0\n950,000\n$9,374,512\n\n4,160,721\n0\n0\n4,589,845\n0\n5,051\n53\n0\n300,000\n$9,055,670\n\n4,050,000\n0\n0\n4,784,000\n0\n3,600\n0\n4,000\n0\n$8,841,600\n\n4,200,000\n0\n0\n4,920,000\n0\n3,600\n0\n4,000\n0\n$9,127,600\n\n4,215,000\n0\n0\n5,150,000\n0\n3,600\n0\n4,000\n0\n$9,372,600\n\nEXPENSES\nPersonnel\nServices\nSupplies\nGrants, Claims\nTransfers\nCapital Outlay\nDebt Service\nReserves\nTotal Expenses\n\n4,614,636\n485,334\n653,861\n479,341\n2,606,000\n212,626\n0\n0\n$9,051,798\n\n4,886,733\n519,740\n778,196\n100,000\n2,256,000\n304,610\n0\n0\n$8,845,279\n\n4,891,822\n518,050\n698,155\n244,928\n2,256,000\n448,400\n0\n50,000\n$9,107,355\n\n5,114,900\n518,050\n698,155\n389,856\n2,256,000\n463,900\n0\n200,000\n$9,640,861\n\n5,027,977\n518,050\n698,155\n244,928\n2,256,000\n612,500\n0\n0\n$9,357,610\n\n$361,777\n\n$572,168\n\n$237,502\n\n$58,907\n\n$73,897\n\nEnding Fund Balance\n\nPreface - 63\n\n\x0cUNIFIED GOVERNMENT\nWYANDOTTE COUNTY/KANSAS CITY, KANSAS\n2013 AMENDED AND 2014 OPERATING BUDGET\nFUND SUMMARY\nEnvironmental Trust Fund\nWYANDOTTE COUN\n\nThe Environmental Trust Fund receives a portion of residential trash revenue for landfill-associated costs.', tokens=set([u'oper', u'claim', u'wyandott', u'tax', u'capit', u'suppli', u'reserv', u'incom', u'total', u'coun', u'environment', u'fee', u'intergovernment', u'miscellan', u'receiv', u'personnel', u'licens', u'end', u'revenu', u'interest', u'trash', u'balanc', u'begin', u'sourc', u'financ', u'transfer', u'fund', u'govern', u'trust', u'outlay', u'debt', u'charg', u'residenti', u'prefac', u'actual', u'amend', u'servic', u'budget', u'kansa', u'portion', u'unifi', u'expens', u'permit', u'summari', u'reimburs']), source='budgets/wyandotte_count_kansas_city_2013.txt'),
 Sentence(original=u'2011\nACTUAL\nBeginning Fund Balance\n\n2012\nACTUAL\n\n2013\nBUDGET\n\n2013\nAMENDED\n\n2014\nBUDGET\n\n$99,862\n\n$25,095\n\n$24,040\n\n$81,410\n\n$81,596\n\n$1,212,460\n0\n0\n0\n0\n0\n0\n$10,100\n0\n$1,222,560\n\n$1,203,450\n0\n0\n0\n0\n0\n0\n$10,100\n0\n$1,213,550\n\nREVENUE\nTax Revenue\nPermits and Licenses\nIntergovernmental Revenues\nCharges for Services\nFines, Forfeits, Fees\nInterest Income\nMiscellaneous Revenues\nReimbursements\nOther Financing Sources\nTotal Revenues\n\n1,070,564\n0\n0\n0\n0\n0\n47\n$10,964\n\n1,188,879\n0\n0\n0\n0\n0\n9\n$13,192\n\n$1,081,575\n\n$1,202,080\n\n1,201,142\n0\n0\n0\n0\n0\n0\n$10,000\n0\n$1,211,142\n\nEXPENSES\nPersonnel\nServices\nSupplies\nGrants, Claims\nTransfers, Other\nCapital Outlay\nDebt Service\nMiscellaneous Expense\nReserves\nTotal Expenses\n\n912,678\n101,464\n140,802\n1,398\n0\n0\n0\n0\n0\n$1,156,342\n\n894,707\n106,912\n143,455\n691\n0\n0\n0\n0\n0\n$1,145,765\n\n930,000\n154,155\n131,041\n109\n0\n0\n0\n0\n10,000\n$1,225,305\n\n$915,896\n$116,771\n$164,598\n$109\n0\n0\n0\n0\n25,000\n$1,222,374\n\n$937,899\n$116,771\n$164,598\n$109\n0\n0\n0\n0\n15,000\n$1,234,377\n\nEnding Fund Balance\n\n$25,095\n\n$81,410\n\n$9,877\n\n$81,596\n\n$60,769\n\nPreface - 55\n\n\x0cUNIFIED GOVERNMENT\nWYANDOTTE COUNTY/KANSAS CITY, KANSAS\n2013 AMENDED AND 2014 OPERATING BUDGET\nFUND SUMMARY\nAlcohol Fund\nWYANDOTTE COUN\n\nThe Special Alcohol Program Grant Fund is used to account for the revenues and expenses of two\nseparate programs: Special Alcohol Grants and the Alcohol Diversion Program.', tokens=set([u'oper', u'claim', u'wyandott', u'tax', u'capit', u'suppli', u'reserv', u'incom', u'total', u'special', u'coun', u'use', u'fee', u'intergovernment', u'miscellan', u'grant', u'personnel', u'licens', u'two', u'end', u'revenu', u'program', u'interest', u'divers', u'balanc', u'begin', u'sourc', u'financ', u'fund', u'govern', u'outlay', u'debt', u'charg', u'alcohol', u'prefac', u'account', u'actual', u'amend', u'servic', u'budget', u'kansa', u'separ', u'unifi', u'expens', u'permit', u'summari', u'reimburs']), source='budgets/wyandotte_count_kansas_city_2013.txt'),
 Sentence(original=u'2011\nACTUAL\n\n2012\nACTUAL\n\n2013\nBUDGET\n\n2013\nAMENDED\n\n2014\nBUDGET\n\nBeginning Fund Balance\n\n$297,174\n\n$330,756\n\n$219,736\n\n$380,986\n\n$257,103\n\nREVENUE\nTax Revenue\nPermits and Licenses\nIntergovernmental Revenues\nCharges for Services\nFines, Forfeits, Fees\nInterest Income\nMiscellaneous Revenues\nReimbursements\nOther Financing Sources\nTotal Revenues\n\n417,822\n0\n0\n0\n83,849\n0\n1,101\n0\n0\n$502,772\n\n496,575\n0\n0\n0\n13,850\n0\n925\n0\n0\n$511,350\n\n480,000\n0\n0\n0\n10,000\n0\n0\n0\n0\n$490,000\n\n507,000\n0\n0\n0\n7,500\n0\n0\n0\n0\n$514,500\n\n517,000\n0\n0\n0\n7,500\n0\n0\n0\n0\n$524,500\n\nEXPENSES\nPersonnel\nServices\nSupplies\nGrants, Claims\nTransfers, Other\nCapital Outlay\nDebt Service\nReserves\nTotal Expenses\n\n158,222\n108,335\n2,633\n200,000\n0\n0\n0\n0\n$469,190\n\n171,225\n39,544\n950\n249,401\n0\n0\n0\n0\n$461,120\n\n197,944\n133,000\n8,024\n249,401\n0\n0\n0\n0\n$588,369\n\n197,958\n133,000\n7,925\n249,500\n0\n0\n0\n50,000\n$638,383\n\n197,575\n133,000\n7,925\n249,500\n0\n0\n0\n0\n$588,000\n\nEnding Fund Balance\n\n$330,756\n\n$380,986\n\n$121,367\n\n$257,103\n\n$193,603\n\nPreface - 56\n\n\x0cUNIFIED GOVERNMENT\nWYANDOTTE COUNTY/KANSAS CITY, KANSAS\n2013 AMENDED AND 2014 OPERATING BUDGET\nFUND SUMMARY\n\nCounty Initiative for Funding Infrastructure Fund\nAs authorized by KSA 19-120 this is a multi-year capital improvement fund.', tokens=set([u'oper', u'claim', u'wyandott', u'tax', u'capit', u'counti', u'suppli', u'reserv', u'incom', u'total', u'fee', u'intergovernment', u'miscellan', u'author', u'personnel', u'licens', u'end', u'revenu', u'ksa', u'infrastructur', u'interest', u'balanc', u'begin', u'sourc', u'financ', u'initi', u'fund', u'govern', u'outlay', u'debt', u'charg', u'prefac', u'actual', u'amend', u'servic', u'budget', u'kansa', u'unifi', u'expens', u'permit', u'improv', u'summari', u'reimburs']), source='budgets/wyandotte_count_kansas_city_2013.txt'),
 Sentence(original=u'2011\nACTUAL\nBeginning Fund Balance\n\n$722,710\n\n2012\nACTUAL\n$1,150,550\n\n2013\nBUDGET\n$814,028\n\n2013\nAMENDED\n$2,688,284\n\n2014\nBUDGET\n$1,944,743\n\nREVENUE\nTax Revenue\nPermits and Licenses\nIntergovernmental Revenues\nCharges for Services\nFines, Forfeits, Fees\nInterest Income\nMiscellaneous Revenues\nReimbursements\nOther Financing Sources\nTotal Revenues\n\n38,320,803\n984,614\n700,250\n2,909,686\n972,307\n1,767,550\n200,848\n818,505\n357,762\n$47,032,325\n\n42,673,987\n942,058\n1,011,594\n2,845,502\n950,312\n1,788,168\n213,288\n671,020\n571,542\n$51,667,471\n\n43,345,885\n984,500\n800,000\n3,005,100\n965,000\n1,600,000\n49,000\n747,635\n350,000\n$51,847,120\n\n44,279,464\n954,500\n250,300\n2,527,500\n951,000\n1,700,000\n44,600\n849,430\n449,000\n$52,005,794\n\n44,012,953\n954,500\n50,300\n2,602,500\n1,196,000\n1,675,000\n44,600\n780,430\n0\n$51,316,283\n\nEXPENSES\nPersonnel\nServices\nSupplies\nGrants, Claims\nTransfers, Other\nCapital Outlay\nDebt Service\nReserves\nTotal Expenses\n\n31,392,191\n11,856,354\n2,193,580\n414,990\n8,652\n738,718\n0\n0\n$46,604,485\n\n35,195,144\n12,027,941\n1,252,457\n778,459\n46,009\n829,727\n0\n0\n$50,129,737\n\n36,032,276\n12,306,398\n1,314,812\n807,399\n275,185\n1,331,350\n0\n400,000\n$52,467,420\n\n36,637,606\n12,286,828\n1,281,217\n807,399\n105,185\n1,231,100\n0\n400,000\n$52,749,335\n\n37,436,251\n12,187,682\n1,251,266\n807,399\n5,185\n1,045,150\n0\n350,000\n$53,082,933\n\n$1,150,550\n\n$2,688,284\n\n$193,728\n\n$1,944,743\n\n$178,093\n\nEnding Fund Balance\n\nPreface - 48\n\n\x0cUNIFIED GOVERNMENT\nWYANDOTTE COUNTY/KANSAS CITY, KANSAS\n2013 AMENDED AND 2043 OPERATING BUDGET\nFUND SUMMARY\nGeneral Fund - City\nThe City General Fund is the principal operating account of Kansas City, KS.', tokens=set([u'oper', u'claim', u'wyandott', u'tax', u'capit', u'suppli', u'reserv', u'incom', u'total', u'fee', u'intergovernment', u'miscellan', u'citi', u'personnel', u'licens', u'end', u'revenu', u'interest', u'balanc', u'begin', u'sourc', u'gener', u'financ', u'fund', u'govern', u'outlay', u'debt', u'charg', u'prefac', u'account', u'actual', u'amend', u'servic', u'budget', u'kansa', u'princip', u'unifi', u'expens', u'permit', u'summari', u'reimburs']), source='budgets/wyandotte_count_kansas_city_2013.txt'),
 Sentence(original=u'2011\nACTUAL\n\n2012\nACTUAL\n\n2013\nBUDGET\n\n2013\nAMENDED\n\n2014\nBUDGET\n\nBeginning Fund Balance\n\n$148,052\n\n$107,424\n\n$75,223\n\n$89,348\n\n$51,367\n\nREVENUE\nTax Revenue\nPermits and Licenses\nIntergovernmental Revenues\nCharges for Services\nFines, Forfeits, Fees\nInterest Income\nMiscellaneous Revenues\nReimbursements\nOther Financing Sources\nTotal Revenues\n\n413,239\n0\n0\n0\n0\n0\n0\n0\n0\n$413,239\n\n490,255\n0\n0\n0\n0\n0\n0\n0\n0\n$490,255\n\n496,580\n0\n0\n0\n0\n0\n0\n0\n0\n$496,580\n\n500,350\n0\n0\n0\n0\n0\n0\n0\n0\n$500,350\n\n502,777\n0\n0\n0\n0\n0\n0\n0\n0\n$502,777\n\nEXPENSES\nPersonnel\nServices\nSupplies\nGrants, Claims\nTransfers, Other\nCapital Outlay\nDebt Service\nReserves\nTotal Expenses\n\n0\n0\n0\n453,867\n0\n0\n0\n0\n$453,867\n\n0\n0\n0\n508,331\n0\n0\n0\n0\n$508,331\n\n0\n0\n0\n533,331\n0\n0\n0\n15,000\n$548,331\n\n0\n0\n0\n533,331\n0\n0\n0\n5,000\n$538,331\n\n0\n0\n0\n533,331\n0\n0\n0\n5,000\n$538,331\n\nEnding Fund Balance\n\n$107,424\n\n$89,348\n\n$23,472\n\n$51,367\n\n$15,813\n\nPreface - 67\n\n\x0cUNIFIED GOVERNMENT\nWYANDOTTE COUNTY/KANSAS CITY, KANSAS\n2013 AMENDED AND 2014 OPERATING BUDGET\nFUND SUMMARY\nParks and Recreation Fund\nWYANDOTTE COUN\n\nThe Parks and Recreation Fund is a special revenue fund used to account for the revenues and\nexpenses of funds received from the tax levied on the sale of liquor in restaurants, clubs, and other\nentertainment venues.', tokens=set([u'oper', u'claim', u'wyandott', u'liquor', u'tax', u'capit', u'sale', u'suppli', u'reserv', u'incom', u'total', u'special', u'coun', u'use', u'fee', u'intergovernment', u'miscellan', u'receiv', u'personnel', u'licens', u'end', u'revenu', u'interest', u'balanc', u'begin', u'sourc', u'financ', u'park', u'fund', u'levi', u'entertain', u'govern', u'outlay', u'debt', u'charg', u'recreat', u'prefac', u'account', u'actual', u'amend', u'servic', u'budget', u'kansa', u'unifi', u'expens', u'permit', u'summari', u'reimburs']), source='budgets/wyandotte_count_kansas_city_2013.txt'),
 Sentence(original=u'2011\nACTUAL\n\n2012\nACTUAL\n\n2013\nBUDGET\n\n2013\nAMENDED\n\n2014\nBUDGET\n\nBeginning Fund Balance\n\n$4,551\n\n$21,749\n\n$0\n\n$0\n\n$0\n\nREVENUE\nTax Revenue\nPermits and Licenses\nIntergovernmental Revenues\nCharges for Services\nFines, Forfeits, Fees\nInterest Income\nMiscellaneous Revenues\nReimbursements\nOther Financing Sources\nTotal Revenues\n\n12,632\n0\n0\n0\n0\n0\n16,828\n0\n0\n$29,460\n\n7,357\n0\n0\n0\n0\n0\n0\n0\n0\n$7,357\n\n0\n0\n0\n0\n0\n0\n0\n0\n0\n$0\n\n3,000\n0\n0\n0\n0\n0\n0\n0\n0\n$3,000\n\n0\n0\n0\n0\n0\n0\n0\n0\n0\n$0\n\nEXPENSES\nPersonnel\nServices\nSupplies\nGrants, Claims\nTransfers, Other\nCapital Outlay\nDebt Service\nMicellaneous Reserves\nTotal Expenses\n\n0\n0\n0\n0\n12,262\n0\n0\n0\n$12,262\n\n0\n0\n0\n0\n29,106\n0\n0\n0\n$29,106\n\n0\n0\n0\n0\n0\n0\n0\n0\n$0\n\n0\n0\n0\n0\n3,000\n0\n0\n0\n$3,000\n\n0\n0\n0\n0\n0\n0\n0\n0\n$0\n\nEnding Fund Balance\n\n$21,749\n\n$0\n\n$0\n\n$0\n\n$0\n\nPreface - 57\n\n\x0cUNIFIED GOVERNMENT\nWYANDOTTE COUNTY/KANSAS CITY, KANSAS\n2013 AMENDED AND 2014 OPERATING BUDGET\nFUND SUMMARY\nCounty Library Levy Fund\nWYANDOTTE COUN\n\nThe County Library Fund allocates revenue to the Kansas City, KS School District #500 public library and\nthe Bonner Springs City Library.', tokens=set([u'oper', u'claim', u'wyandott', u'spring', u'tax', u'capit', u'counti', u'bonner', u'suppli', u'reserv', u'incom', u'total', u'librari', u'coun', u'fee', u'intergovernment', u'miscellan', u'district', u'citi', u'personnel', u'licens', u'end', u'revenu', u'interest', u'public', u'balanc', u'begin', u'sourc', u'micellan', u'financ', u'school', u'fund', u'levi', u'govern', u'outlay', u'debt', u'charg', u'prefac', u'alloc', u'actual', u'amend', u'servic', u'budget', u'kansa', u'unifi', u'expens', u'permit', u'summari', u'reimburs']), source='budgets/wyandotte_count_kansas_city_2013.txt'),
 Sentence(original=u'2011\nACTUAL\n\n2012\nACTUAL\n\n2013\nBUDGET\n\n2013\nAMENDED\n\n2014\nBUDGET\n\nBeginning Fund Balance\n\n$173,147\n\n$110,201\n\n$72,288\n\n$172,345\n\n$134,436\n\nREVENUE\nTax Revenue\nPermits and Licenses\nIntergovernmental Revenues\nCharges for Services\nFines, Forfeits, Fees\nInterest Income\nMiscellaneous Revenues\nReimbursements\nOther Financing Sources\nTotal Revenues\n\n415,623\n0\n0\n0\n0\n0\n3,385\n0\n0\n$419,008\n\n494,285\n0\n0\n0\n0\n0\n0\n0\n0\n$494,285\n\n478,950\n0\n0\n0\n0\n0\n0\n0\n0\n$478,950\n\n507,000\n0\n0\n0\n0\n0\n0\n0\n0\n$507,000\n\n517,000\n0\n0\n0\n0\n0\n0\n0\n0\n$517,000\n\nEXPENSES\nPersonnel\nServices\nSupplies\nGrants, Claims\nTransfers, Other\nCapital Outlay\nDebt Service\nReserves\nTotal Expenses\n\n181,598\n84,395\n0\n0\n0\n215,961\n0\n0\n$481,954\n\n178,174\n61,937\n0\n0\n0\n192,030\n0\n0\n$432,141\n\n184,909\n90,000\n0\n0\n0\n245,000\n0\n0\n$519,909\n\n184,909\n90,000\n0\n0\n0\n245,000\n0\n25,000\n$544,909\n\n186,519\n90,000\n0\n0\n0\n345,000\n0\n0\n$621,519\n\nEnding Fund Balance\n\n$110,201\n\n$172,345\n\n$31,329\n\n$134,436\n\n$29,917\n\nPreface - 68\n\n\x0cUNIFIED GOVERNMENT\nWYANDOTTE COUNTY/KANSAS CITY, KANSAS\n2013 AMENDED AND 2014 OPERATING BUDGET\nFUND SUMMARY\n\nRegister of Deeds Technology Fund\nThe Register of Deeds Technology Fund, created in 2002, is a special revenue fund used to account for\nthe revenues and expenses received from specified fees charged by the Register of Deeds in accordance\nwith K.S.A.', tokens=set([u'oper', u'claim', u'wyandott', u'creat', u'tax', u'capit', u'suppli', u'reserv', u'incom', u'deed', u'total', u'special', u'use', u'fee', u'intergovernment', u'miscellan', u'receiv', u'personnel', u'licens', u'regist', u'end', u'revenu', u'accord', u'interest', u'balanc', u'begin', u'sourc', u'financ', u'specifi', u'fund', u'govern', u'outlay', u'debt', u'charg', u'prefac', u'account', u'actual', u'amend', u'servic', u'technolog', u'budget', u'kansa', u'unifi', u'expens', u'permit', u'summari', u'reimburs']), source='budgets/wyandotte_count_kansas_city_2013.txt')]