├── .gitignore
├── README.md
├── docs
└── img
│ ├── cs231n_backprop.png
│ ├── cs231n_optimizers.gif
│ ├── normal_distribution.png
│ └── speech2phonemes_loss.png
├── driver.py
├── model
├── __init__.py
├── dataset.py
├── phonemes2text.py
├── regulator.py
├── speech2phonemes.py
└── utils.py
├── processor
├── __init__.py
├── commands.py
├── messaging.py
├── record.py
└── utils.py
├── requirements.txt
├── start.sh
└── volumes
├── config
├── commands.txt
├── timit_phones.txt
└── timit_words.txt
└── model
├── .gitignore
├── phonemes2text
├── .gitignore
└── phonemes2text_arch.json
└── speech2phonemes
├── .gitignore
└── speech2phonemes_arch.json
/.gitignore:
--------------------------------------------------------------------------------
1 | # Don't commit training data i.e. wav files
2 | volumes/**/*.wav
3 |
4 | # Redis storage
5 | *.rdb
6 |
7 | __pycache__
8 | *.pyc
9 |
10 | *.wav
11 |
12 | .DS_Store
13 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | _Essentially all of the code was developed jointly by [@dtjchen](https://github.com/dtjchen) and [@mamigot](https://github.com/mamigot). Should've probably used [git-duet](https://github.com/pivotal/git-duet)._
2 |
3 | # Spoken Command Processor
4 |
5 | Applications like Siri and Cortana allow users to specify directives by transcribing speech and mapping it to a series of known commands. For example, asking Siri "what song is this" and holding your phone close to the speaker that is playing the music will prompt it to send soundbytes of the song to its classification models.
6 |
7 | We attempted a similar effect by implementing a mechanism that records a user's spoken command (in our case, a single word) and maps it to a directive that may be sent to any given destination. For instance, the user may record the word "lights" and instruct the service to send a message with "keeplightson" to a remote server that listens for such commands. Consequently, the user would be able to test the system at a later time by repeating the same word and expecting the server to perform the relevant task.
8 |
9 | ## Transcription Model Architecture
10 |
11 | The transcription model is formed by two submodels: the first maps 20-ms soundbytes to individual phonemes and the second groups those phonemes into words from its dictionary (see `model/__init__.py`). The models are feed-forward neural networks built using the Keras deep learning library, which provides a high-level API to chain layers sequentially.
12 |
13 | Once a given neural network's architecture is defined, it is trained using the ubiquitous backpropagation algorithm, which implements the chain rule backwards to incrementally modify the "neurons" so as to reduce the error of the network.
14 |
15 |
16 |
17 |
18 | Source: Stanford University's CS231n: "Convolutional Neural Networks for Visual Recognition"
19 |
20 |
21 | Aside from the number of neurons in the network and the architecture of the layers, the engineer must choose an optimizer. A common choice is Stochastic Gradient Descent (SGD), but there are others that converge at different rates and achieve varying degrees of accuracy depending on the model.
22 |
23 |
24 |
25 |
26 | Source: Stanford University's CS231n: "Convolutional Neural Networks for Visual Recognition"
27 |
28 |
29 | ### Speech2Phonemes
30 |
31 | #### Architecture
32 |
33 | The first model, "Speech2Phonemes," attempts the task of framewise phoneme classification. The process involves associating a sequence of speech frames to phoneme labels matched to those frames. Ideally, this would be a first step to achieving a speech recognition model able to recognize an arbitrary number of words by piecing together phonemes.
34 |
35 | The model used was a multilayer perception, an artificial neural network model often used in machine learning for classification tasks. The model had one hidden layer with 256 sigmoid activation units. A dropout layer was added, which switched off a percentage of the nodes in the network to prevent the domination of a single node and to decouple the influence between nodes, slightly improving accuracy of the model. The output layer had a dimension of 61, as there were 61 phoneme classes found in the dataset. Probabilities for each class was calculated through the final softmax layer.
36 |
37 |
38 |
39 |
40 | Source: Stanford University's CS231n: "Convolutional Neural Networks for Visual Recognition"
41 |
42 |
43 | ```
44 | ____________________________________________________________________________________________________
45 | Layer (type) Output Shape Param # Connected to
46 | ====================================================================================================
47 | dense_1 (Dense) (None, 256) 10240 dense_input_1[0][0]
48 | ____________________________________________________________________________________________________
49 | activation_1 (Activation) (None, 256) 0 dense_1[0][0]
50 | ____________________________________________________________________________________________________
51 | dropout_1 (Dropout) (None, 256) 0 activation_1[0][0]
52 | ____________________________________________________________________________________________________
53 | dense_2 (Dense) (None, 61) 15677 dropout_1[0][0]
54 | ____________________________________________________________________________________________________
55 | activation_2 (Activation) (None, 61) 0 dense_2[0][0]
56 | ====================================================================================================
57 | ____________________________________________________________________________________________________
58 |
59 | ```
60 |
61 | #### Features
62 |
63 | In order to extract relevant information from the input speech files, we decided to use MFCC feature vectors. MFCCs are commonly used for speech recognition tasks because of its relative accuracy in revealing patterns in human speech. The Mel scale was created to more closely mimic what humans hear, as we are generally better at distinguishing between changes at lower frequencies than at higher frequencies. Expressing the speech signal as a series of vectors is also more ideal for processing the data.
64 |
65 | Thirteen MFCC coefficients were chosen for the task, as seemed to be widely used in many implementations of speech recognition models. In addition, delta and delta-delta features (derivatives) corresponding to the thirteen MFCCs were appended to the vector to obtain additional information about the signal. These were calculated using the `librosa` library, through the `librosa.feature.mfcc` and `librosa.feature.delta` functions. The windows sizes and step sizes recommended were 25ms and 10ms, however, due to the smaller length of some uttered phones, the window size was chosen to be a bit smaller at 20ms as a compromise.
66 |
67 | With the sampling rate at 16 kHz for all the audio files, samples were less than a millisecond. From analysis of the data, according to the transcription, some phones were smaller than the window size. In addition, the start and end times of the utterances could mean that multiple phones could be represented in a window frame. To resolve this alignment issue, we simply took the phone that occupied the majority of the frame as the label for that frame.
68 |
69 | ##### Normalization
70 |
71 | Before feeding the 39-MFCC-long vectors into the model, each coefficient was normalized around the mean of all coefficients with the same index in the training set. Normalization provides noticeable benefits as it adjusts the ranges of the values to be "symmetric" around the origin. Other normalization techniques, such as that which normalizes around the mean and divides by the standard deviation (thereby placing most data points within three standard deviations of the mean as exemplified by the normal distribution below), were tested.
72 |
73 |
74 |
75 |
76 | Source: Wikipedia's "68–95–99.7 rule"
77 |
78 |
79 | Nevertheless, the most effective technique for our application was to merely normalize around the mean (no division by the standard deviation).
80 |
81 | #### Training
82 |
83 | As would be expected in training, a loss is calculated for each interval of training (an epoch) which should be minimized in order to obtain more accurate results. As can be seen through the loss function, this gradually decreases, and generally more epochs would result in a better trained model. Obvious constraints for training would be the time it takes to train the model, which makes MLPs slightly easy to deal with (as opposed to RNNs, and other architectures). In addition, overfitting for the training data might occur with too many epochs.
84 |
85 |
86 |
87 |
88 | Speech2Phonemes' loss function
89 |
90 |
91 | ### Phonemes2Text
92 |
93 | #### Architecture
94 |
95 | The second model, "Phonemes2Text", accepts a series of phonemes and attempts to classify it as any of the words used by the dataset. Like its previous counterpart, it is a feed-forward neural network characterized by a series of dense, sigmoid activation and dropout layers. The output dimension parameter of the first layer, 1500, was determined empirically to give the best results. For 20 epochs, a change in this parameter from 256 to 1500 improved the accuracy by 16.8%.
96 |
97 | ```
98 | ____________________________________________________________________________________________________
99 | Layer (type) Output Shape Param # Connected to
100 | ====================================================================================================
101 | dense_1 (Dense) (None, 1500) 46500 dense_input_1[0][0]
102 | ____________________________________________________________________________________________________
103 | activation_1 (Activation) (None, 1500) 0 dense_1[0][0]
104 | ____________________________________________________________________________________________________
105 | dropout_1 (Dropout) (None, 1500) 0 activation_1[0][0]
106 | ____________________________________________________________________________________________________
107 | dense_2 (Dense) (None, 6102) 9159102 dropout_1[0][0]
108 | ____________________________________________________________________________________________________
109 | activation_2 (Activation) (None, 6102) 0 dense_2[0][0]
110 | ____________________________________________________________________________________________________
111 | dropout_2 (Dropout) (None, 6102) 0 activation_2[0][0]
112 | ____________________________________________________________________________________________________
113 | dense_3 (Dense) (None, 6102) 37240506 dropout_2[0][0]
114 | ____________________________________________________________________________________________________
115 | activation_3 (Activation) (None, 6102) 0 dense_3[0][0]
116 | ====================================================================================================
117 | Total params: 46446108
118 | ____________________________________________________________________________________________________
119 | ```
120 |
121 | #### Features
122 |
123 | The phonemes are provided as a list of class numbers ranging from 0-61 (the total number of phonemes), accompanied by a one-hot vector denoting the word in a vocabulary of 6102 –see the words on `volumes/config/timit_words`. For 39826 series of phonemes –each of which corresponded to one word, the shapes of the matrices used to train the model are as follows:
124 |
125 | ```
126 | X_train.shape = (39826, 30)
127 | y_train.shape = (39826, 6102)
128 | ```
129 |
130 | We make the assumption that a word will be composed of at most 30 phonemes, and right-pad the words with fewer phonemes with zeros. This seems valid, given that the longest word in the dataset contained 17 phonemes.
131 |
132 | #### Training
133 |
134 | The neural network was trained on a CPU (a slow process) using 50 epochs. The loss function started off at 5.6256 and, notably, decreased to 0.6436, using the Adam optimizer and a learning rate of 0.001 –a value that was greater by a factor of 10 was attempted to speed up the learning process but, unfortunately, the model did not converge (the loss function sky-rocketed).
135 |
136 | ```
137 | Epoch 1/50
138 | 39826/39826 [==============================] - 186s - loss: 5.6256
139 | Epoch 2/50
140 | 39826/39826 [==============================] - 193s - loss: 4.2672
141 | ...
142 | Epoch 49/50
143 | 39826/39826 [==============================] - 262s - loss: 0.6437
144 | Epoch 50/50
145 | 39826/39826 [==============================] - 264s - loss: 0.6436
146 | ```
147 |
148 | ### End-to-End
149 |
150 | The two models were trained independently using data from TIMIT (1.4M and 38K samples, respectively). In order to tie the output from the first (individual phonemes) to the second (groups of phonemes from which words may be classified), a regulation scheme displayed by `model/regulator.py` was developed to remove duplicate phonemes and reduce the impact of the noise. The former algorithm would successfully trim a series e.g. `['a', 'a', 'a', 'b', 'b']` to `['a', 'b']`, and the latter assumed that a correct phoneme would appear at least "a few times" during a 20-ms period wherein one is captured for every frame.
151 |
152 | The accuracies of the two models, trained separately, were:
153 | - "Speech2Phonemes": 53.2%
154 | - "Phonemes2Text": 60.7%
155 |
156 | This means that, in the first case, a 20-ms clip has a 47.4% chance of being classified as the correct phoneme (out of 61) and, in the second, a series of phonemes has a 60.7% chance of being classified as the correct word (out of 6102). This assumption, however, is not expected to hold for the end-to-end scheme, wherein the inputs to the second model contain non-negligible levels of noise.
157 |
158 | #### Sources
159 |
160 | - Gibiansky, Andrew. Recurrent Neural Networks. (http://andrew.gibiansky.com/blog/machine-learning/recurrent-neural-networks/)
161 | - Graves, Alex and Schmidhuber Jürgen, Framewise Phoneme Classification with Bidirectional LSTM and Other Neural Network Architectures. (ftp://ftp.idsia.ch/pub/juergen/nn_2005.pdf)
162 | - Graves, Alex, Mohamed, Abdel-rahman and Hinton, Geoffrey. Speech Recognition with Deep Recurrent Neural Networks. (http://www.cs.toronto.edu/~fritz/absps/RNN13.pdf)
163 | - Karpathy, Andrej. The Unreasonable Effectiveness of Recurrent Neural Networks.
164 | (http://karpathy.github.io/2015/05/21/rnn-effectiveness/)
165 | - Lopes, Carla and Perdigão, Fernando. Phone Recognition on the TIMIT Database. (http://cdn.intechopen.com/pdfs/15948/InTech-Phoneme_recognition_on_the_timit_database.pdf)
166 |
167 |
168 | ## Implementation
169 |
170 | ### Dataset
171 |
172 | The TIMIT dataset is an often used corpus developed by MIT, Stanford and Texas Instruments for training and testing automatic speech recognition systems. There are 6300 sentences spoken by 630 speakers (438 male, 192 female) with more than 6000 different words used. Speakers were chosen from 8 dialect regions of the United States, encompassing various geographical sections of the states. The dataset also had a suggested training/testing split, used to partition the data.
173 |
174 | The extensive labeling for the dataset made it a favorable one to use, as both phonetic and word labels for the speech files were provided with the data. Using those labels, we were able to perform framewise labeling and use this to train and test the data.
175 |
176 | ### Keras
177 |
178 | As stated, [Keras](https://github.com/fchollet/keras) is a deep learning library built on top of other computational packages that provides a high-level interface to train and test neural networks. It provides a rich toolset to analyze the performance of an architecture, and a clean method of prototyping models. One method to develop a working network is to use the Sequential model, which allows one to add customizable layers and tune its hyperparameters.
179 |
180 | ## Command Interpreter
181 |
182 | To attempt to match the similarity of strings, an edit distance metric is used. One such metric is the Levenshtein distance, which measures the distance between two words as the minimum number of single-character edits (insertions, deletions and substitutions) needed to go from one string to the other. This can be efficiently implemented through a dynamic programming algorithm.
183 |
184 | ### Redis
185 |
186 | The data of the application is stored in [Redis](http://redis.io/), a popular in-memory database that saves objects to the disk. The main data structure that is used is a hash, which maps usernames and their respective commands to a series of additional information, namely their chosen messages and ports.
187 |
188 | The following output is from Redis' CLI:
189 |
190 | ```bash
191 | 172-16-9-92:mamigot speech-analysis$ redis-cli
192 | 127.0.0.1:6379> keys derek:*
193 | 1) "derek:ping"
194 | 2) "derek:lights"
195 | 127.0.0.1:6379> hmget derek:ping message
196 | 1) "keep alive hello"
197 | 127.0.0.1:6379> hmget derek:ping port
198 | 1) "13002"
199 | 127.0.0.1:6379>
200 | ```
201 |
202 | ### Sockets & Connections
203 |
204 | In order to send messages to a remote machine, a simple networking interface was implemented. With the use of sockets, which allow two machines to communicate, the messages corresponding to vocal commands can be sent to other devices in the network (or connected to the internet). Depending on the remote device, these messages can range from simple text to prewritten code fragments, depending on the protocol the remote device intends to use. A level of encryption may also be used to ensure that malicious data is not processed.
205 |
206 | ### Installation
207 |
208 | Use a package manager (`apt-get`, `brew`, etc.) to install Redis and the system-level dependencies of PyAudio.
209 |
210 | Install the Python-specific libraries listed in `requirements.txt` through:
211 |
212 | ```
213 | $ pip install -r requirements.txt
214 | ```
215 |
216 | ### CLI
217 |
218 | Python's [Click library](http://click.pocoo.org/5/) was used to implement a command-line interface to the entire application (see `driver.py`). The commands it provides are:
219 |
220 | #### List all supported CLI commands
221 | ```
222 | $ python driver.py --help
223 | ```
224 |
225 | #### Register and parse messages
226 | ```
227 | $ python driver.py register
228 |
229 | $ python driver.py parse
230 | ```
231 |
232 | #### Train and test different submodels
233 | ```
234 | $ python driver.py model speech2phonemes train --data 10000 --summarize True
235 |
236 | $ python driver.py model speech2phonemes test
237 |
238 | $ python driver.py model phonemes2text train --data 1000
239 |
240 | $ python driver.py model phonemes2text test
241 | ```
242 |
243 | #### Start listening for connections on port 23111
244 | ```
245 | $ python driver.py setlistener --port 23111
246 | ```
247 |
--------------------------------------------------------------------------------
/docs/img/cs231n_backprop.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dtjchen/spoken-command-processor/26ab05596e27f6ead8be6f2d06c3a7c199b8ea1a/docs/img/cs231n_backprop.png
--------------------------------------------------------------------------------
/docs/img/cs231n_optimizers.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dtjchen/spoken-command-processor/26ab05596e27f6ead8be6f2d06c3a7c199b8ea1a/docs/img/cs231n_optimizers.gif
--------------------------------------------------------------------------------
/docs/img/normal_distribution.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dtjchen/spoken-command-processor/26ab05596e27f6ead8be6f2d06c3a7c199b8ea1a/docs/img/normal_distribution.png
--------------------------------------------------------------------------------
/docs/img/speech2phonemes_loss.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dtjchen/spoken-command-processor/26ab05596e27f6ead8be6f2d06c3a7c199b8ea1a/docs/img/speech2phonemes_loss.png
--------------------------------------------------------------------------------
/driver.py:
--------------------------------------------------------------------------------
1 | import sys, os
2 | import click
3 |
4 |
5 | DEBUG = False
6 |
7 | @click.group()
8 | def cli():
9 | pass
10 |
11 | @cli.command()
12 | @click.option('--data', default=None, type=int, help='size of the data used to train the model')
13 | @click.option('--summarize', default=False, type=bool, help='plot the loss function')
14 | @click.argument('model')
15 | @click.argument('action')
16 | def model(**kwargs):
17 | from model import speech2phonemes, phonemes2text
18 |
19 | if kwargs['model'] == 'speech2phonemes':
20 | if kwargs['action'] == 'train':
21 | click.echo('Training speech2phonemes...')
22 | speech2phonemes.train(summarize=kwargs['summarize'], data_limit=kwargs['data'])
23 |
24 | elif kwargs['action'] == 'test':
25 | click.echo('Testing speech2phonemes...')
26 | speech2phonemes.test()
27 |
28 | elif kwargs['model'] == 'phonemes2text':
29 | if kwargs['action'] == 'train':
30 | click.echo('Training phonemes2text...')
31 | phonemes2text.train(summarize=kwargs['summarize'], data_limit=kwargs['data'])
32 |
33 | elif kwargs['action'] == 'test':
34 | click.echo('Testing phonemes2text...')
35 | phonemes2text.test()
36 |
37 | else:
38 | click.echo('Unrecognized model: %s' % kwargs['model'])
39 |
40 | @cli.command()
41 | def register(**kwargs):
42 | from processor import commands
43 | commands.register()
44 |
45 | @cli.command()
46 | def parse(**kwargs):
47 | from processor import commands
48 | commands.parse()
49 |
50 | @cli.command()
51 | @click.option('--port', type=int, help='listener port')
52 | def setlistener(**kwargs):
53 | from processor import messaging
54 | click.echo('Listening on port %d...' % kwargs['port'])
55 | messaging.listen(kwargs['port'])
56 |
57 |
58 | if __name__ == '__main__':
59 | # Obtain information about the commands via:
60 | # python driver.py --help
61 |
62 | # Suppress stderr from the output
63 | if not DEBUG:
64 | null = open(os.devnull,'wb')
65 | sys.stderr = null
66 |
67 | # Activate the command-line interface
68 | cli()
69 |
--------------------------------------------------------------------------------
/model/__init__.py:
--------------------------------------------------------------------------------
1 | from . import speech2phonemes, regulator, phonemes2text
2 |
3 |
4 | def predict(recording):
5 | """
6 | Run the user input through the entire model. Take a series of MFCCs from the
7 | audio recording and output the predicted words (there number of words
8 | depends on the length of the provided input).
9 |
10 | 1. speech2phonemes
11 | 2. regulator
12 | 3. phonemes2text
13 |
14 | Args:
15 | recording: matrix of shape (*, 39) <-- see utils.wavfile_to_mfccs()
16 |
17 | Returns:
18 | list of predicted words
19 | """
20 | # recording.shape = (mfcc_series, 39)
21 |
22 | # Get the phonemes matching each MFCC group (of 20ms)
23 | # phonemes.shape = (mfcc_series, 1)
24 | phonemes = speech2phonemes.predict(recording.transpose())
25 | nphonemes = dataset.Speech2Phonemes()._wavfile_apply_normalizer(phonemes)[0]
26 |
27 | # Group the phonemes into a word
28 | rphonemes = regulator.regulate(nphonemes, max_allowed=30).reshape((1, 30))
29 | word = phonemes2text.predict(rphonemes)
30 |
31 | return word
32 |
--------------------------------------------------------------------------------
/model/dataset.py:
--------------------------------------------------------------------------------
1 | import os
2 | import glob
3 | import librosa
4 | import scipy
5 | import numpy as np
6 | import itertools
7 | from sklearn import preprocessing
8 | from . import utils
9 |
10 |
11 | class TIMITReader(object):
12 | def __init__(self):
13 | self.train_dataset_path = os.environ['TIMIT_TRAINING_PATH']
14 | self.test_dataset_path = os.environ['TIMIT_TESTING_PATH']
15 | self.data_root = os.environ['MODEL_PARAMETERS']
16 |
17 | def params(self, name, ext='npy'):
18 | return os.path.join(self.data_dir, name + '.%s' % ext)
19 |
20 | def load_train_data(self, limit=None):
21 | """
22 | For self.model == 'speech2phonemes', returns:
23 | X_train --> [num_of_training_mfcc_vectors, 39]
24 | y_train --> [num_of_training_mfcc_vectors, 1]
25 | """
26 | print('Loading training data...')
27 |
28 | cached = [self.params('X_train'), self.params('y_train')]
29 | if all(map(os.path.exists, cached)):
30 | print('Found .npy files for X_train and y_train. Loading...')
31 | X_train = np.load(self.params('X_train'))
32 | y_train = np.load(self.params('y_train'))
33 |
34 | else:
35 | print('Did not find .npy files for X_train and y_train. Parsing dataset...')
36 | X_train, y_train = self.normalize(
37 | *self.reader(self.train_dataset_path))
38 |
39 | np.save(self.params('X_train'), X_train)
40 | np.save(self.params('y_train'), y_train)
41 |
42 | if limit:
43 | print('Returning %d/%d of the training data...' % (limit, X_train.shape[0]))
44 | X_train = X_train[:limit, :]
45 | y_train = y_train[:limit]
46 |
47 | return X_train, y_train
48 |
49 | def load_test_data(self, limit=None):
50 | """
51 | For self.model == 'speech2phonemes', returns:
52 | X_test --> [num_of_testing_mfcc_vectors, 39]
53 | y_test --> [num_of_testing_mfcc_vectors, 1]
54 | """
55 | print('Loading testing data...')
56 |
57 | cached = [self.params('X_test'), self.params('y_test')]
58 | if all(map(os.path.exists, cached)):
59 | print('Found .npy files for X_test and y_test. Loading...')
60 | X_test = np.load(self.params('X_test'))
61 | y_test = np.load(self.params('y_test'))
62 |
63 | else:
64 | print('Did not find .npy files for X_test and y_test. Parsing dataset...')
65 | X_test, y_test = self.apply_normalizer(
66 | *self.reader(self.test_dataset_path))
67 |
68 | np.save(self.params('X_test'), X_test)
69 | np.save(self.params('y_test'), y_test)
70 |
71 | if limit:
72 | print('Returning %d/%d of the testing data...' % (limit, X_test.shape[0]))
73 | X_test = X_test[:limit, :]
74 | y_test = y_test[:limit]
75 |
76 | return X_test, y_test
77 |
78 | def _parse_timit_line(self, line):
79 | start_frame, end_frame, label = line.split(' ')
80 |
81 | return int(start_frame), int(end_frame), label.strip('\n')
82 |
83 | def load_unique_phonemes_as_class_numbers(self):
84 | phonemes = {}
85 |
86 | with open(os.environ['PHONE_LIST_PATH'], 'r') as f:
87 | class_number = 0
88 |
89 | for ph in map(lambda p: p.strip(), f.readlines()):
90 | phonemes[ph] = class_number
91 | class_number += 1
92 |
93 | return phonemes
94 |
95 | def load_unique_words_as_class_numbers(self):
96 | words = {}
97 |
98 | with open(os.environ['WORD_LIST_PATH'], 'r') as f:
99 | class_number = 0
100 |
101 | for word in map(lambda w: w.strip(), f.readlines()):
102 | words[word] = class_number
103 | class_number += 1
104 |
105 | return words
106 |
107 | class Speech2Phonemes(TIMITReader):
108 | def __init__(self):
109 | super(Speech2Phonemes, self).__init__()
110 |
111 | self.reader = self._read_labeled_wavfiles
112 | self.data_dir = os.path.join(self.data_root, 'speech2phonemes')
113 |
114 | self.normalize = self._wavfile_normalize
115 | self.apply_normalizer = self._wavfile_apply_normalizer
116 |
117 | def _read_labeled_wavfiles(self, root_timit_path):
118 | wavfiles = sorted(glob.glob(root_timit_path + '/*/*/*.WAV'))
119 | labels_files = sorted(glob.glob(root_timit_path + '/*/*/*.PHN'))
120 |
121 | X, y = [], []
122 |
123 | for wf, lf in zip(wavfiles, labels_files):
124 | for mfccs, label in self._read_labeled_wavfile(wf, lf):
125 | X.append(mfccs)
126 | y.append(label)
127 |
128 | # Convert phoneme strings in y_train to class numbers
129 | phoneme_classes = self.load_unique_phonemes_as_class_numbers()
130 | y = [phoneme_classes[y[i]] for i in range(len(y))]
131 |
132 | return np.array(X), np.array(y)
133 |
134 | def _read_labeled_wavfile(self, wavfile, labels_file):
135 | """Map each 20ms recording to a single label."""
136 | mfccs_and_deltas, segment_duration_frames, hop_duration_frames = utils.wavfile_to_mfccs(wavfile)
137 |
138 | # Pass through the file with the phones
139 | labels = []
140 |
141 | with open(labels_file, 'r') as f:
142 | for line in f.readlines():
143 | start_frame, end_frame, label = self._parse_timit_line(line)
144 |
145 | phn_frames = end_frame - start_frame
146 | labels.extend([label] * phn_frames)
147 |
148 | classified = []
149 | curr_frame = curr_mfcc = 0
150 |
151 | while (curr_frame < (len(labels) - segment_duration_frames)):
152 | label = max(labels[curr_frame:(curr_frame + segment_duration_frames)])
153 |
154 | yield mfccs_and_deltas[:,curr_mfcc], label
155 |
156 | curr_mfcc += 1
157 | curr_frame += hop_duration_frames
158 |
159 | def _wavfile_normalize(self, X, y):
160 | print('Normalizing X_train around each MFCC coefficient\'s mean...')
161 | X = utils.normalize_mean(X, self.params('mfcc_means'))
162 | return X, y
163 |
164 | def _wavfile_apply_normalizer(self, X, y=None):
165 | # Use the MFCC means from the training set to normalize X_train
166 | X = utils.apply_normalize_mean(X, self.params('mfcc_means'))
167 | return X, y
168 |
169 | class Phonemes2Text(TIMITReader):
170 | def __init__(self):
171 | super(Phonemes2Text, self).__init__()
172 |
173 | self.reader = self._read_labeled_phnfiles
174 | self.data_dir = os.path.join(self.data_root, 'phonemes2text')
175 |
176 | self.normalize = self._phnfile_normalize
177 | self.apply_normalizer = self._phnfile_apply_normalizer
178 |
179 | def _read_labeled_phnfiles(self, root_timit_path):
180 | phn_files = sorted(glob.glob(root_timit_path + '/*/*/*.PHN'))
181 | word_files = sorted(glob.glob(root_timit_path + '/*/*/*.WRD'))
182 |
183 | # Each phoneme is mapped to a class number
184 | phoneme_classes = self.load_unique_phonemes_as_class_numbers()
185 |
186 | # Each word is mapped to a class number
187 | word_classes = self.load_unique_words_as_class_numbers()
188 |
189 | # Used to get one-hot vectors for each word; this gives its size (4893)
190 | num_distinct_words = len(word_classes)
191 |
192 | # Max phonemes per word (in the dataset, the largest is "encyclopedias"
193 | # with 17... we'll go with a few more)
194 | num_phonemes_per_word = 30
195 |
196 | X, y = [], []
197 |
198 | for pf, wf in zip(phn_files, word_files):
199 | for word, phonemes_in_word in self._read_labeled_phnfile(pf, wf):
200 | pclasses = [phoneme_classes[p] for p in phonemes_in_word]
201 |
202 | if pclasses:
203 | padded = np.zeros(num_phonemes_per_word)
204 | padded[range(len(pclasses))] = pclasses
205 | X.append(padded)
206 |
207 | onehot_word = np.zeros(num_distinct_words)
208 | onehot_word[word_classes[word]] = 1
209 | y.append(onehot_word)
210 |
211 | # For the training data, these are the shapes
212 | # (39826 is the number of samples, 30 is the number of phonemes per
213 | # word and 6102 is the total number of words in the dataset):
214 | X = np.array(X) # X.shape -> (39826, 30)
215 | y = np.array(y) # y.shape -> (39826, 6102)
216 | return X, y
217 |
218 | def _read_labeled_phnfile(self, phn_file, word_file):
219 | """Map each word to a list of phones (one phone per frame)"""
220 | phns = []
221 | with open(phn_file, 'r') as f:
222 | for line in f.readlines():
223 | start_frame, end_frame, label = self._parse_timit_line(line)
224 |
225 | phn_frames = end_frame - start_frame
226 | phns.extend([label] * phn_frames)
227 |
228 | with open(word_file, 'r') as f:
229 | for line in f.readlines():
230 | start_frame, end_frame, label = self._parse_timit_line(line)
231 |
232 | with_repeats = phns[start_frame:end_frame]
233 | word_phns = [k[0] for k in itertools.groupby(with_repeats)]
234 |
235 | yield label, word_phns
236 |
237 | def _phnfile_normalize(self, X, y):
238 | # No normalization taking place at the moment
239 | return X, y
240 |
241 | def _phnfile_apply_normalizer(self, X, y):
242 | # No normalization taking place at the moment
243 | return X, y
244 |
--------------------------------------------------------------------------------
/model/phonemes2text.py:
--------------------------------------------------------------------------------
1 | from keras.models import Sequential, model_from_json
2 | from keras.layers import Dense, Dropout, Activation
3 | from keras.optimizers import Adam
4 | import numpy as np
5 | from . import utils, dataset
6 |
7 |
8 | def train(summarize=False, data_limit=None):
9 | X_train, y_train = dataset.Phonemes2Text().load_train_data(limit=data_limit)
10 |
11 | # Number of phonemes per word (sample)
12 | input_dim = X_train.shape[1]
13 | # Number of distinct classes in the dataset (number of distinct words)
14 | output_dim = y_train.shape[1]
15 | # Arbitrary parameter. For 20 epochs...
16 | # 256 --> 32.7% accuracy
17 | # 500 --> 46.0% accuracy
18 | # 1500 --> 49.5% accuracy
19 | hidden_num = 1500
20 |
21 | # Architecture of the model
22 | model = Sequential()
23 |
24 | model.add(Dense(input_dim=input_dim, output_dim=hidden_num))
25 | model.add(Activation('sigmoid'))
26 | model.add(Dropout(0.25))
27 | model.add(Dense(output_dim=output_dim))
28 | model.add(Activation('sigmoid'))
29 | model.add(Dropout(0.40))
30 | model.add(Dense(output_dim=output_dim))
31 | model.add(Activation('softmax'))
32 |
33 | model.compile(loss='categorical_crossentropy', optimizer=Adam(lr=0.001))
34 |
35 | stats = model.fit(X_train, y_train,
36 | shuffle=True,
37 | batch_size=256,
38 | nb_epoch=50,
39 | verbose=1
40 | )
41 |
42 | save_model(model)
43 |
44 | if summarize:
45 | print(model.summary())
46 |
47 | import matplotlib.pyplot as plt
48 | plt.plot(stats.history['loss'])
49 | plt.ylabel('Loss')
50 | plt.xlabel('Epoch')
51 | plt.title('Loss function for %d samples' % X_train.shape[0])
52 | plt.show()
53 |
54 | def test(data_limit=None):
55 | model = load_model()
56 | X_test, y_test = dataset.Phonemes2Text().load_test_data()
57 |
58 | out = model.predict_classes(X_test,
59 | batch_size=256,
60 | verbose=0
61 | )
62 |
63 | acc = sum(out == np.argmax(y_test, axis=1)) * 1.0 / len(out)
64 | print('Accuracy using %d testing samples: %f' % (X_test.shape[0], acc))
65 |
66 | def predict(X_test):
67 | model = load_model()
68 |
69 | predicted_classes = model.predict_classes(X_test,
70 | batch_size=256,
71 | verbose=0
72 | )
73 |
74 | class_numbers = dataset.TIMITReader().load_unique_words_as_class_numbers()
75 | return [k for k,v in class_numbers.items() if v in predicted_classes]
76 |
77 | def save_model(model):
78 | reader = dataset.Phonemes2Text()
79 |
80 | with open(reader.params('phonemes2text_arch', 'json'), 'w') as archf:
81 | archf.write(model.to_json())
82 |
83 | model.save_weights(
84 | filepath=reader.params('phonemes2text_weights', 'h5'),
85 | overwrite=True
86 | )
87 |
88 | def load_model():
89 | reader = dataset.Phonemes2Text()
90 |
91 | with open(reader.params('phonemes2text_arch', 'json')) as arch:
92 | model = model_from_json(arch.read())
93 | model.load_weights(reader.params('phonemes2text_weights', 'h5'))
94 |
95 | model.compile(loss='categorical_crossentropy', optimizer=Adam(lr=0.001))
96 | return model
97 |
--------------------------------------------------------------------------------
/model/regulator.py:
--------------------------------------------------------------------------------
1 | import numpy as np
2 | from itertools import groupby
3 |
4 | def regulate(raw_phonemes, max_allowed):
5 | """
6 | ~Regulate~ a series of phonemes by removing those which are infrequent, etc.
7 |
8 | Args:
9 | raw_phonemes: series of phonemes that includes those which are
10 | inaccurate, etc.
11 |
12 | Returns:
13 | list of max_allowed elements encapsulating the "correct" phonemes; if
14 | the list is not filled, right-pad it with zeros.
15 | """
16 | # remove single values
17 | seq = filter_sequence(raw_phonemes)
18 | reg_phonemes = [k[0] for k in groupby(seq)]
19 |
20 | # does not yet address if sequence is too long (truncate? filter with min_combo = 3?)
21 | return np.array(pad_list(reg_phonemes, 0, max_allowed)[:max_allowed])
22 |
23 | def filter_sequence(seq, min_combo=2):
24 | # simple way
25 | combos = [[k, len(list(g))] for k, g in groupby(seq)]
26 | # one line?: return [x for combo in combos for x in [combo[0]]*combo[1] if combo[1] >= min_combo]
27 | nseq = []
28 | for combo in combos:
29 | if combo[1] >= min_combo:
30 | # preserve duplication for repeated filtering
31 | nseq.extend([combo[0]]*combo[1])
32 | return nseq
33 |
34 | def pad_list(seq, pad_val, max_len):
35 | return seq + [pad_val] * (max_len - len(seq))
36 |
--------------------------------------------------------------------------------
/model/speech2phonemes.py:
--------------------------------------------------------------------------------
1 | from keras.models import Sequential, model_from_json
2 | from keras.layers import Dense, Dropout, Activation
3 | from keras.optimizers import Adam
4 | import numpy as np
5 | from . import utils, dataset
6 |
7 |
8 | def train(summarize=False, data_limit=None):
9 | X_train, y_train = dataset.Speech2Phonemes().load_train_data(limit=data_limit)
10 |
11 | # Number of features for each sample in X_train...
12 | # if each 20ms corresponds to 13 MFCC coefficients + delta + delta2, then 39
13 | input_dim = X_train.shape[1]
14 | # Number of distinct classes in the dataset (number of distinct phonemes)
15 | output_dim = np.max(y_train) + 1
16 | # Model takes as input arrays of shape (*, input_dim) and outputs arrays
17 | # of shape (*, hidden_num)
18 | hidden_num = 256
19 |
20 | y_train_onehot = utils.onehot_matrix(y_train, output_dim)
21 |
22 | # Architecture of the model
23 | model = Sequential()
24 |
25 | model.add(Dense(input_dim=input_dim, output_dim=hidden_num))
26 | model.add(Activation('sigmoid'))
27 | model.add(Dropout(0.25))
28 | model.add(Dense(output_dim=output_dim))
29 | model.add(Activation('softmax'))
30 |
31 | model.compile(loss='categorical_crossentropy', optimizer=Adam(lr=0.001))
32 |
33 | stats = model.fit(X_train, y_train_onehot,
34 | shuffle=True,
35 | batch_size=256,
36 | nb_epoch=20,
37 | verbose=1
38 | )
39 |
40 | save_model(model)
41 |
42 | if summarize:
43 | print(model.summary())
44 |
45 | import matplotlib.pyplot as plt
46 | plt.plot(stats.history['loss'])
47 | plt.ylabel('Loss')
48 | plt.xlabel('Epoch')
49 | plt.title('Loss function for %d samples' % X_train.shape[0])
50 | plt.show()
51 |
52 | def test(data_limit=None):
53 | model = load_model()
54 | X_test, y_test = dataset.Speech2Phonemes().load_test_data()
55 |
56 | out = model.predict_classes(X_test,
57 | batch_size=256,
58 | verbose=0
59 | )
60 |
61 | acc = sum(out == y_test) * 1.0 / len(out)
62 | print('Accuracy using %d testing samples: %f' % (X_test.shape[0], acc))
63 |
64 | def predict(X_test):
65 | model = load_model()
66 |
67 | return model.predict_classes(X_test,
68 | batch_size=256,
69 | verbose=0
70 | )
71 |
72 | def save_model(model):
73 | reader = dataset.Speech2Phonemes()
74 |
75 | with open(reader.params('speech2phonemes_arch', 'json'), 'w') as archf:
76 | archf.write(model.to_json())
77 |
78 | model.save_weights(
79 | filepath=reader.params('speech2phonemes_weights', 'h5'),
80 | overwrite=True
81 | )
82 |
83 | def load_model():
84 | reader = dataset.Speech2Phonemes()
85 |
86 | with open(reader.params('speech2phonemes_arch', 'json')) as arch:
87 | model = model_from_json(arch.read())
88 | model.load_weights(reader.params('speech2phonemes_weights', 'h5'))
89 |
90 | model.compile(loss='categorical_crossentropy', optimizer=Adam(lr=0.001))
91 | return model
92 |
--------------------------------------------------------------------------------
/model/utils.py:
--------------------------------------------------------------------------------
1 | import numpy as np
2 | import scipy
3 | import librosa
4 | from sklearn import preprocessing
5 |
6 |
7 | def onehot_matrix(samples_vec, num_classes):
8 | """
9 | >>> onehot_matrix(np.array([1, 0, 3]), 4)
10 | [[ 0. 1. 0. 0.]
11 | [ 1. 0. 0. 0.]
12 | [ 0. 0. 0. 1.]]
13 |
14 | >>> onehot_matrix(np.array([2, 2, 0]), 3)
15 | [[ 0. 0. 1.]
16 | [ 0. 0. 1.]
17 | [ 1. 0. 0.]]
18 |
19 | Ref: http://bit.ly/1VSKbuc
20 | """
21 | num_samples = samples_vec.shape[0]
22 |
23 | onehot = np.zeros(shape=(num_samples, num_classes))
24 | onehot[range(0, num_samples), samples_vec] = 1
25 |
26 | return onehot
27 |
28 | def wavfile_to_mfccs(wavfile):
29 | """Returns a matrix of shape (*, 39), since there are 39 MFCCs (deltas
30 | included for each 20ms segment in the wavfile).
31 | """
32 | sampling_rate, frames = scipy.io.wavfile.read(wavfile)
33 |
34 | segment_duration_ms = 20
35 | n_fft = int((segment_duration_ms / 1000.) * sampling_rate)
36 |
37 | hop_duration_ms = 10
38 | hop_length = int((hop_duration_ms / 1000.) * sampling_rate)
39 |
40 | mfcc_count = 13
41 |
42 | mfccs = librosa.feature.mfcc(
43 | y=frames,
44 | sr=sampling_rate,
45 | n_mfcc=mfcc_count,
46 | hop_length=hop_length,
47 | n_fft=n_fft
48 | )
49 | mfcc_delta = librosa.feature.delta(mfccs)
50 | mfcc_delta2 = librosa.feature.delta(mfccs, order=2)
51 | mfccs_and_deltas = np.vstack([mfccs, mfcc_delta, mfcc_delta2])
52 |
53 | return mfccs_and_deltas, hop_length, n_fft
54 |
55 | def normalize_mean(X, param_path):
56 | scaler = preprocessing\
57 | .StandardScaler(with_mean=True, with_std=False)\
58 | .fit(X)
59 |
60 | np.save(param_path, scaler.mean_)
61 | X = scaler.transform(X)
62 | return X
63 |
64 | def apply_normalize_mean(X, param_path):
65 | scaler = preprocessing.StandardScaler(with_mean=True, with_std=False)
66 | scaler.mean_ = np.load(param_path)
67 |
68 | X = scaler.fit_transform(X)
69 | return X
70 |
--------------------------------------------------------------------------------
/processor/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dtjchen/spoken-command-processor/26ab05596e27f6ead8be6f2d06c3a7c199b8ea1a/processor/__init__.py
--------------------------------------------------------------------------------
/processor/commands.py:
--------------------------------------------------------------------------------
1 | import os
2 | import redis
3 | import model
4 | from . import record, messaging, utils
5 |
6 |
7 | class UserCommand(object):
8 | def __init__(self, username, message, dest_port, model_output):
9 | self.username = username
10 | self.message = message
11 | self.dest_port = dest_port
12 | self.model_output = model_output
13 |
14 | def save(self):
15 | """Save the command to the database (Redis)"""
16 | r = self.db_conn()
17 |
18 | key = '%s:%s' % (self.username, self.model_output)
19 | r.hmset(key, {'message':self.message, 'port':self.dest_port})
20 |
21 | @classmethod
22 | def find_closest_match(cls, username, model_output, n=1):
23 | """Pass speech_input through the model, get a prediction (a list of
24 | words) and output the guessed commands (words)
25 |
26 | Args:
27 | n: limits the number of returned matches
28 |
29 | Returns:
30 | message, dest_port
31 | """
32 | r = cls.db_conn()
33 |
34 | # format: "derek:*"
35 | raw_keys = r.keys('%s:*' % username)
36 |
37 | # without the usernames and the ":", the keys are the messages
38 | commands = [k[len(username) + 1:] for k in raw_keys]
39 |
40 | # get each command's edit distance with respect to model_output and
41 | # rank accordingly (start with the closest match)
42 | distances = [(c, utils.edit_distance(model_output, c)) for c in commands]
43 | distances.sort(key=lambda x: x[1])
44 |
45 | for command, distance in distances:
46 | key = '%s:%s' % (username, command)
47 |
48 | message = r.hmget(key, 'message')[0]
49 | port = r.hmget(key, 'port')[0]
50 |
51 | yield message, int(port)
52 |
53 | @classmethod
54 | def db_conn(cls):
55 | """Get Redis connection object to modify database accordingly"""
56 | return redis.StrictRedis(host='localhost', port=6379, db=0)
57 |
58 | def register():
59 | """Go through the register process (ask for the fields in UserCommand) to
60 | save it to the database.
61 | """
62 | print('Registering command...')
63 |
64 | # Prompt for parameters
65 | username = raw_input('>>> username: ')
66 | message = raw_input('>>> message: ')
67 | dest_port = raw_input('>>> destination port: ')
68 |
69 | record_flag = raw_input('>>> press "y" to start recording: ')
70 | if record_flag == 'y':
71 | recording, wavfile = record.record_input(wavfile=os.environ['TMP_RECORDING'])
72 |
73 | mfccs = model.utils.wavfile_to_mfccs(wavfile)[0]
74 | model_output = model.predict(mfccs)[0]
75 |
76 | UserCommand(username, message, dest_port, model_output).save()
77 |
78 | def parse():
79 | """Go through the process of parsing a user's speech (take his username
80 | + prompt to record), and then feed the recording to the model in order
81 | to get an output.
82 | """
83 | username = raw_input('>>> username: ')
84 | record_flag = raw_input('>>> press "y" to start recording: ')
85 |
86 | if record_flag == 'y':
87 | recording, wavfile = record.record_input(wavfile=os.environ['TMP_RECORDING'])
88 |
89 | mfccs = model.utils.wavfile_to_mfccs(wavfile)[0]
90 | model_output = model.predict(mfccs)
91 |
92 | matches = [m for m in UserCommand.find_closest_match(username, model_output, n=10)]
93 | print('>>> confirm your message:')
94 |
95 | for count, match in enumerate(matches):
96 | print('>>>\t%d:\tPORT: %d \tMESSAGE: %s' % (count, match[1], match[0]))
97 |
98 | chosen_input = int(raw_input('>>> choice: '))
99 | if chosen_input >= len(matches):
100 | print('>>> invalid choice; ending.\n')
101 | return
102 |
103 | message, port = matches[chosen_input]
104 | if messaging.send(message, port):
105 | print('>>> sending: PORT: %d, MESSAGE %s\n' % (port, message))
106 |
--------------------------------------------------------------------------------
/processor/messaging.py:
--------------------------------------------------------------------------------
1 | import os
2 | from contextlib import closing
3 | import socket
4 | import sys
5 |
6 |
7 | def send(message, port, host='localhost'):
8 | """Open a connection between PORT and destination_port, and send the
9 | message.
10 | """
11 | # Create a TCP/IP socket
12 | with closing(socket.socket(socket.AF_INET, socket.SOCK_STREAM)) as s:
13 | s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
14 |
15 | destination_addr = (host, port)
16 | try: # Connect and send message
17 | s.connect(destination_addr)
18 | s.sendall(message)
19 | except socket.error as err:
20 | print('Error Code : %s, Message %s' % (str(err[0]), err[1]))
21 |
22 | return True
23 |
24 | def listen(port, host='localhost'):
25 | """Listen on PORT for new connections on a continuous basis. Accept them
26 | and print their messages.
27 | """
28 | with closing(socket.socket(socket.AF_INET, socket.SOCK_STREAM)) as s:
29 | s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
30 |
31 | try:
32 | # Bind socket to address
33 | s.bind((host, port))
34 |
35 | # Start listening
36 | backlog = 10
37 | s.listen(backlog)
38 |
39 | # Block to accept connection
40 | recv_bytes = 1024
41 | while True:
42 | conn, addr = s.accept()
43 | message = conn.recv(recv_bytes)
44 |
45 | # Print message
46 | print('Message (%s:%s): %s' % (addr[0], addr[1], message))
47 |
48 | conn.close()
49 |
50 | except socket.error as err:
51 | print('Error Code : %d, Message %s' % (err[0], err[1]))
52 | sys.exit()
53 |
54 |
55 | if __name__ == '__main__':
56 | listen()
57 |
--------------------------------------------------------------------------------
/processor/record.py:
--------------------------------------------------------------------------------
1 | import struct
2 | import itertools
3 | import wave
4 | import numpy as np
5 | import scipy
6 | import librosa
7 | import pyaudio
8 | from sklearn import preprocessing
9 | from model import speech2phonemes, dataset, utils
10 |
11 | # Constants
12 | WIDTH = 2 # bytes per sample
13 | CHANNELS = 1 # mono
14 | RATE = 16000 # Sampling rate (samples/second)
15 | BLOCKSIZE = 1024
16 | DURATION = 1 # Duration in seconds
17 | BLOCKS = int(DURATION * RATE / BLOCKSIZE)
18 | THRESHOLD = 1000
19 |
20 | def record_input(save=True, wavfile="input.wav"):
21 | # Open audio device
22 | p = pyaudio.PyAudio()
23 |
24 | fmt = p.get_format_from_width(WIDTH)
25 | stream = p.open(
26 | format=fmt,
27 | channels=CHANNELS,
28 | rate=RATE,
29 | frames_per_buffer=BLOCKSIZE,
30 | input=True,
31 | output=False
32 | )
33 |
34 | # block reading
35 | bn, start_rec = 0, False
36 | frames = []
37 | print(">>> start recording...")
38 | while bn < BLOCKS:
39 | # Read audio by block, convert
40 | input_string = stream.read(BLOCKSIZE)
41 | input_tuple = struct.unpack('h'*BLOCKSIZE, input_string)
42 | # if input not loud enough, ignore
43 | if not start_rec and max(input_tuple) > THRESHOLD:
44 | start_rec = True
45 | print(">>> threshold met!")
46 |
47 | if start_rec:
48 | frames.append(input_string)
49 | bn += 1
50 |
51 | print(">>> finish record.")
52 | stream.stop_stream()
53 | stream.close()
54 | p.terminate()
55 |
56 | if save:
57 | write_wavfile(frames, wavfile)
58 | return frames, wavfile
59 |
60 | def write_wavfile(frames, wavfile):
61 | wf = wave.open(wavfile, 'wb')
62 | wf.setnchannels(CHANNELS)
63 | wf.setsampwidth(WIDTH)
64 | wf.setframerate(RATE)
65 | wf.writeframes(b''.join(frames))
66 | wf.close()
67 |
68 | if __name__ == "__main__":
69 | record_input()
70 |
--------------------------------------------------------------------------------
/processor/utils.py:
--------------------------------------------------------------------------------
1 |
2 |
3 | def edit_distance(s1, s2):
4 | """Calculates the Levenshtein distance between two strings."""
5 | if s1 == s2: # if equal, then distance is zero
6 | return 0
7 |
8 | m, n = len(s1), len(s2)
9 |
10 | # if one string is empty, then distance is the length of the other string
11 | if not s1:
12 | return n
13 | elif not s2:
14 | return m
15 |
16 | # originally matrix of distances: size (m+1) by (n+1)
17 | # ds[i, j] has dist for first i chars of s1 and first j chars of s2
18 | # ds = np.zeros((m+1, n+1), dtype=np.int32)
19 |
20 | # optimization: use only two rows (c & d) at a time (working down)
21 | c = None
22 | d = range(n+1) # s1 to empty string by j deletions
23 |
24 | for i in range(1, m+1):
25 | # move current row to previous row
26 | # create new row, index 0: t to empty string by i deletions, rest 0
27 | c, d = d, [i]+[0]*n
28 |
29 | # calculate dists for current row
30 | for j in range(1, n+1):
31 | sub_cost = int(s1[i-1] != s2[j-1])
32 | d[j] = min(c[j] + 1, # deletion
33 | d[j-1] + 1, # insertion
34 | c[j-1] + sub_cost) # substitution
35 |
36 | return d[n]
37 |
--------------------------------------------------------------------------------
/requirements.txt:
--------------------------------------------------------------------------------
1 | click==6.6
2 | Keras==1.0.1
3 | librosa
4 | matplotlib==1.4.3
5 | numpy
6 | PyAudio==0.2.9
7 | redis==2.10.5
8 | scikit-learn==0.17.1
9 | scipy
10 |
--------------------------------------------------------------------------------
/start.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | # The root of the project is the root of this script
4 | # http://stackoverflow.com/a/246128/2708484
5 | export PROJECT_ROOT="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
6 |
7 | #################################
8 | # Config. environment variables #
9 | #################################
10 |
11 | # Path to the trained model's parameters
12 | export MODEL_PARAMETERS=$PROJECT_ROOT/volumes/model
13 |
14 | # Path to the list of phones in the data
15 | export PHONE_LIST_PATH=$PROJECT_ROOT/volumes/config/timit_phones.txt
16 |
17 | # Path to the list of words in the data
18 | export WORD_LIST_PATH=$PROJECT_ROOT/volumes/config/timit_words.txt
19 |
20 | # Paths to training and testing portions of the dataset
21 | if [ -z "$TIMIT_TRAINING_PATH" ] || [ -z "$TIMIT_TESTING_PATH" ]; then
22 | echo "Set env. vars: TIMIT_TRAINING_PATH and TIMIT_TESTING_PATH."
23 | return;
24 | fi
25 |
26 | # Path to a temporary wavfile that is created to transfer data from the
27 | # recorder to the model
28 | export TMP_RECORDING=$PROJECT_ROOT/tmp_recording.wav
29 |
30 | ######################################
31 | # Add relevant modules to PYTHONPATH #
32 | ######################################
33 | export PYTHONPATH=$PYTHONPATH:$PROJECT_ROOT
34 |
35 | for dir in $PROJECT_ROOT/*; do
36 | export PYTHONPATH=$PYTHONPATH:$dir
37 | done
38 |
--------------------------------------------------------------------------------
/volumes/config/commands.txt:
--------------------------------------------------------------------------------
1 | # list of terms actions that the user can perform e.g. "dial", "turn-on"
2 | # (one term per line)
3 |
--------------------------------------------------------------------------------
/volumes/config/timit_phones.txt:
--------------------------------------------------------------------------------
1 | aa
2 | ae
3 | ah
4 | ao
5 | aw
6 | ax
7 | ax-h
8 | axr
9 | ay
10 | b
11 | bcl
12 | ch
13 | d
14 | dcl
15 | dh
16 | dx
17 | eh
18 | el
19 | em
20 | en
21 | eng
22 | epi
23 | er
24 | ey
25 | f
26 | g
27 | gcl
28 | h#
29 | hh
30 | hv
31 | ih
32 | ix
33 | iy
34 | jh
35 | k
36 | kcl
37 | l
38 | m
39 | n
40 | ng
41 | nx
42 | ow
43 | oy
44 | p
45 | pau
46 | pcl
47 | q
48 | r
49 | s
50 | sh
51 | t
52 | tcl
53 | th
54 | uh
55 | uw
56 | ux
57 | v
58 | w
59 | y
60 | z
61 | zh
62 |
--------------------------------------------------------------------------------
/volumes/config/timit_words.txt:
--------------------------------------------------------------------------------
1 | 'em
2 | a
3 | abbreviate
4 | abdomen
5 | abides
6 | ability
7 | able
8 | ably
9 | abolish
10 | aborigine
11 | aborigines
12 | about
13 | above
14 | abruptly
15 | absences
16 | absent
17 | absolute
18 | absolution
19 | absorbed
20 | absorption
21 | absurd
22 | absurdly
23 | abyss
24 | academic
25 | accelerating
26 | accelerometer
27 | accelerometers
28 | accent
29 | accept
30 | acceptance
31 | accepted
32 | access
33 | accident
34 | acclaim
35 | acclaimed
36 | accommodate
37 | accomplish
38 | accomplished
39 | accomplishments
40 | according
41 | accordingly
42 | account
43 | accounts
44 | accreditation
45 | accuracy
46 | accurate
47 | accusations
48 | accuse
49 | accusingly
50 | ace
51 | aches
52 | achieve
53 | achieved
54 | acknowledge
55 | acknowledged
56 | acquiescence
57 | acquire
58 | acres
59 | acropolis
60 | across
61 | act
62 | action
63 | actions
64 | activated
65 | activities
66 | activity
67 | actor
68 | actors
69 | acts
70 | actual
71 | actually
72 | adage
73 | adaptations
74 | add
75 | added
76 | addition
77 | additives
78 | address
79 | addressed
80 | adequate
81 | adhesive
82 | adjourned
83 | adjustable
84 | adjustments
85 | administration
86 | administrative
87 | admire
88 | admitted
89 | admitting
90 | adopted
91 | adult
92 | adulterers
93 | adulthood
94 | adults
95 | advance
96 | advanced
97 | advances
98 | advantage
99 | advantages
100 | adventure
101 | adventures
102 | advertising
103 | advice
104 | advisable
105 | advised
106 | advisement
107 | aerial
108 | affect
109 | affectionate
110 | affirmative
111 | afloat
112 | afraid
113 | after
114 | afternoon
115 | afterwards
116 | again
117 | against
118 | age
119 | agency
120 | agenda
121 | agents
122 | agglomeration
123 | aggressive
124 | aglow
125 | ago
126 | agony
127 | agree
128 | agreed
129 | agricultural
130 | ahah
131 | ahead
132 | aid
133 | aided
134 | aids
135 | aim
136 | aimed
137 | aimless
138 | ain't
139 | air
140 | airborne
141 | aircraft
142 | airfields
143 | airplanes
144 | al
145 | alarm
146 | alcohol
147 | alcoholic
148 | alcoholics
149 | alcoves
150 | alert
151 | alfalfa
152 | algae
153 | algebraic
154 | alibi
155 | alice
156 | alice's
157 | alien
158 | aligning
159 | alimony
160 | alkaline
161 | all
162 | allergies
163 | alleviate
164 | alligators
165 | allot
166 | allow
167 | allowable
168 | allowance
169 | allowed
170 | allure
171 | almonds
172 | almost
173 | alone
174 | along
175 | aloud
176 | already
177 | also
178 | alternated
179 | alternative
180 | although
181 | altogether
182 | aluminum
183 | alumni
184 | always
185 | am
186 | amateur
187 | amaze
188 | amazed
189 | ambassador
190 | ambassador's
191 | amber
192 | ambidextrous
193 | ambiguity
194 | ambiguous
195 | ambitions
196 | ambitious
197 | ambled
198 | ambulance
199 | american
200 | ammo
201 | amoebas
202 | among
203 | amorist
204 | amount
205 | amounts
206 | ample
207 | an
208 | anaesthesia
209 | analysis
210 | analyticity
211 | anarchy
212 | anatomical
213 | anchor
214 | ancient
215 | and
216 | andrei's
217 | anecdotal
218 | anger
219 | angora
220 | angrily
221 | angry
222 | angular
223 | animal
224 | animals
225 | ankle
226 | announcing
227 | annoying
228 | annual
229 | anonymous
230 | another
231 | answer
232 | answered
233 | answers
234 | ant
235 | antagonistic
236 | antarctic
237 | antelope
238 | anti
239 | anticipated
240 | antigen
241 | antiseptic
242 | antithesis
243 | ants
244 | anxiety
245 | any
246 | anybody
247 | anyhow
248 | anyone
249 | anyone's
250 | anything
251 | anyway
252 | apartments
253 | apology
254 | apparently
255 | appealing
256 | appear
257 | appearance
258 | appeared
259 | appears
260 | appetite
261 | appetites
262 | appetizers
263 | apple
264 | apples
265 | appliances
266 | applicability
267 | application
268 | applications
269 | applied
270 | applies
271 | apply
272 | applying
273 | appointed
274 | appointment
275 | appraisal
276 | appreciate
277 | appreciated
278 | appreciatively
279 | approach
280 | approached
281 | appropriate
282 | approval
283 | approved
284 | approvingly
285 | approximated
286 | approximation
287 | aprons
288 | aptitude
289 | aquatic
290 | arbitrary
291 | arbitrate
292 | arboreal
293 | arc
294 | arcade
295 | archeological
296 | are
297 | area
298 | areas
299 | aren't
300 | argue
301 | argued
302 | argument
303 | arise
304 | arises
305 | aristocratic
306 | arm
307 | armchair
308 | armed
309 | arms
310 | army
311 | arose
312 | around
313 | arrange
314 | arranged
315 | arrival
316 | arrive
317 | arrived
318 | arriving
319 | art
320 | article
321 | articulation
322 | artificial
323 | artist
324 | artistic
325 | artists
326 | as
327 | ashamed
328 | ashtray
329 | aside
330 | ask
331 | asked
332 | asleep
333 | aspect
334 | aspects
335 | assail
336 | assassin
337 | assaults
338 | assembled
339 | assembling
340 | assert
341 | assign
342 | assignment
343 | assistance
344 | assistant
345 | associated
346 | associates
347 | associations
348 | assume
349 | assumed
350 | assure
351 | assured
352 | assuredly
353 | assures
354 | assuring
355 | asthma
356 | astonishingly
357 | astronomy
358 | astrophysics
359 | at
360 | ate
361 | atheists
362 | athletic
363 | atmosphere
364 | atomic
365 | atoms
366 | atop
367 | attach
368 | attack
369 | attacked
370 | attempted
371 | attendance
372 | attendants
373 | attention
374 | attitude
375 | attracted
376 | attractive
377 | attributed
378 | atypical
379 | auburn
380 | audience
381 | audio
382 | audition
383 | auditors
384 | auditory
385 | audits
386 | augmented
387 | aunt
388 | austere
389 | author
390 | author's
391 | authorities
392 | authority
393 | authorization
394 | authorized
395 | autistic
396 | autofluorescence
397 | autographs
398 | automatic
399 | automobile
400 | autonomy
401 | autumn
402 | available
403 | avalanche
404 | average
405 | avocado
406 | avocados
407 | avoid
408 | avoided
409 | avoiding
410 | avowed
411 | aw
412 | awards
413 | aware
414 | away
415 | awe
416 | awkward
417 | awoke
418 | axis
419 | babbled
420 | baboon's
421 | back
422 | backed
423 | backgrounds
424 | backward
425 | backyards
426 | bacteria
427 | bad
428 | badness
429 | baffle
430 | bag
431 | bagpipes
432 | bags
433 | bake
434 | balance
435 | bale
436 | baleful
437 | ball
438 | ballet
439 | ballets
440 | balloons
441 | ballplayer
442 | balls
443 | ballyhoo
444 | bandaged
445 | bandages
446 | bank
447 | bankers
448 | banks
449 | barb
450 | barb's
451 | barbaric
452 | barbecue
453 | barbed
454 | bare
455 | barely
456 | bargains
457 | bark
458 | barley
459 | barn
460 | barometric
461 | barracuda
462 | barrels
463 | barricades
464 | barriers
465 | base
466 | baseball
467 | baseball's
468 | based
469 | basic
470 | basis
471 | basketball
472 | bath
473 | bathe
474 | bathing
475 | baths
476 | bathtubs
477 | battery
478 | batting
479 | bay
480 | bayed
481 | bayonet
482 | bayou
483 | bazaar
484 | be
485 | beach
486 | beans
487 | beard
488 | beat
489 | beatniks
490 | beautiful
491 | beautifully
492 | beauty
493 | becalmed
494 | became
495 | because
496 | beckons
497 | become
498 | becomes
499 | becoming
500 | bed
501 | bedlam
502 | bedroom
503 | bedrooms
504 | beds
505 | beefsteak
506 | been
507 | beep
508 | beer
509 | beers
510 | before
511 | beg
512 | began
513 | beggar
514 | begin
515 | beginning
516 | begins
517 | behaved
518 | behavior
519 | behind
520 | being
521 | belched
522 | believe
523 | believed
524 | bellhops
525 | bellows
526 | bells
527 | belong
528 | belongs
529 | beloved
530 | below
531 | belt
532 | bench
533 | beneath
534 | benefit
535 | benefits
536 | bequests
537 | bereft
538 | beside
539 | besides
540 | best
541 | bet
542 | betide
543 | betrayed
544 | better
545 | between
546 | beverage
547 | beverages
548 | beyond
549 | biased
550 | biblical
551 | bibliographies
552 | bickering
553 | bidding
554 | big
555 | bigger
556 | bike
557 | bill
558 | billowed
559 | bills
560 | binomial
561 | biological
562 | biologists
563 | biology
564 | biracial
565 | birds
566 | birth
567 | birthday
568 | biscuit
569 | bit
570 | bites
571 | bitter
572 | bivouac
573 | bizarre
574 | black
575 | blackened
576 | blame
577 | blank
578 | blankets
579 | blasphemous
580 | blastdown
581 | bleachers
582 | blend
583 | bleu
584 | blew
585 | blindness
586 | blissful
587 | blistered
588 | blitz
589 | bloat
590 | block
591 | blockade
592 | blocks
593 | blonde
594 | blooded
595 | blouses
596 | blow
597 | blowers
598 | blowing
599 | blue
600 | bluejay
601 | blues
602 | bluffs
603 | bluing
604 | bluish
605 | blunt
606 | bluntly
607 | board
608 | boardinghouses
609 | boat
610 | boat's
611 | bob
612 | bobby
613 | bobcat
614 | bodied
615 | bodies
616 | body
617 | bog
618 | bogged
619 | boil
620 | boiling
621 | bold
622 | bolt
623 | bomb
624 | bombs
625 | bone
626 | bones
627 | bonfire
628 | bongos
629 | book
630 | books
631 | boom
632 | boomerang
633 | boost
634 | bootleggers
635 | boots
636 | bored
637 | boring
638 | born
639 | borrow
640 | boss
641 | boston
642 | both
643 | bother
644 | bothers
645 | bottle
646 | bottom
647 | bottomed
648 | bought
649 | bounce
650 | bounded
651 | bounds
652 | bourgeoisie
653 | bowl
654 | box
655 | boy
656 | boy's
657 | boys
658 | bracelet
659 | braiding
660 | brain
661 | brakes
662 | branch
663 | brand
664 | brave
665 | bread
666 | break
667 | breakdown
668 | breakfast
669 | breaking
670 | breast
671 | breath
672 | breathed
673 | breathlessly
674 | breed
675 | breeze
676 | brick
677 | bricks
678 | bridal
679 | bride
680 | bride's
681 | bridge
682 | bridges
683 | brief
684 | briefly
685 | bright
686 | brighter
687 | brightly
688 | brim
689 | bring
690 | brings
691 | bristles
692 | broccoli
693 | brochure
694 | broil
695 | broke
696 | broken
697 | bronc
698 | brother
699 | brother's
700 | brought
701 | brown
702 | brows
703 | bruises
704 | brush
705 | brushy
706 | bubbles
707 | buckle
708 | buddies
709 | buddy
710 | buff
711 | buffalo
712 | bugeyed
713 | bugged
714 | bugle
715 | build
716 | builders
717 | building
718 | buildings
719 | built
720 | bulged
721 | bull
722 | bullet
723 | bullets
724 | bum
725 | bump
726 | bungalow
727 | bunks
728 | buns
729 | bureaucracy
730 | burglar
731 | burn
732 | burned
733 | burner
734 | burning
735 | burst
736 | bursting
737 | bury
738 | bus
739 | bushel
740 | business
741 | busy
742 | but
743 | butcher
744 | butter
745 | butterfly
746 | butterscotch
747 | buttonholes
748 | buttons
749 | buy
750 | buyer
751 | buying
752 | buys
753 | buzz
754 | buzzing
755 | by
756 | c'mon
757 | cab
758 | cabinets
759 | cable
760 | cafe
761 | cafeteria
762 | cage
763 | calcium
764 | calendar
765 | calendars
766 | calf
767 | calico
768 | call
769 | called
770 | calling
771 | calls
772 | calm
773 | came
774 | cameo
775 | camera
776 | camp
777 | camping
778 | campus
779 | can
780 | can't
781 | candies
782 | candles
783 | candy
784 | canister
785 | canned
786 | cannot
787 | canoes
788 | cantaloupe
789 | canteen
790 | canter
791 | cap'n
792 | capable
793 | capillary
794 | capital
795 | capitalists
796 | capitalize
797 | capsule
798 | captain
799 | captured
800 | car
801 | car's
802 | caraway
803 | cardboard
804 | cards
805 | care
806 | carefree
807 | careful
808 | carefully
809 | carl
810 | carol
811 | carpenter
812 | carpet
813 | carriage
814 | carried
815 | carries
816 | carry
817 | carrying
818 | cars
819 | cart
820 | cartilage
821 | cartoon
822 | cartoons
823 | carved
824 | case
825 | cases
826 | cash
827 | cashmere
828 | cassandra
829 | cast
830 | castor
831 | castorbeans
832 | casual
833 | casually
834 | cat
835 | cat's
836 | catastrophic
837 | catch
838 | categories
839 | catkins
840 | cats
841 | cattle
842 | caught
843 | cauliflower
844 | caused
845 | causes
846 | causeway
847 | caution
848 | cavity
849 | cease
850 | ceiling
851 | celebrate
852 | celebrates
853 | cellophane
854 | cells
855 | cement
856 | censorship
857 | census
858 | cent
859 | centered
860 | centering
861 | central
862 | centre
863 | centrifuge
864 | cents
865 | centuries
866 | century
867 | ceramic
868 | cereal
869 | cerebral
870 | certain
871 | certainly
872 | chablis
873 | chain
874 | chair
875 | chairs
876 | challenge
877 | challenged
878 | chamber
879 | chance
880 | change
881 | changed
882 | changes
883 | changing
884 | chaos
885 | character
886 | characteristics
887 | characters
888 | charge
889 | charged
890 | charlie's
891 | charm
892 | charmer
893 | chart
894 | chases
895 | chasing
896 | chastity
897 | chattering
898 | chauffeur
899 | chaw
900 | cheap
901 | cheating
902 | check
903 | checked
904 | cheek
905 | cheese
906 | cheetal
907 | chemical
908 | chemicals
909 | chest
910 | chestnuts
911 | chests
912 | chew
913 | chicken
914 | chief
915 | chiefly
916 | child
917 | childhood
918 | children
919 | chilled
920 | chills
921 | chip
922 | chipper
923 | chives
924 | chloride
925 | chlorine
926 | chocolate
927 | choices
928 | choir
929 | choke
930 | choose
931 | choosing
932 | chop
933 | chopped
934 | choreographer
935 | chortled
936 | chorused
937 | chose
938 | chosen
939 | chrome
940 | chroniclers
941 | chronological
942 | chronologically
943 | chuck
944 | chuckled
945 | church
946 | cigar
947 | cigarette
948 | cigarettes
949 | cinch
950 | cinematic
951 | circle
952 | circled
953 | circumstances
954 | citizen
955 | citizenship
956 | city
957 | civil
958 | civilian
959 | civilization
960 | civilized
961 | claimed
962 | clamp
963 | clams
964 | clamshell
965 | clapping
966 | clarification
967 | clarified
968 | clarify
969 | clashed
970 | clasp
971 | clasped
972 | class
973 | classical
974 | classrooms
975 | clatter
976 | clause
977 | clay
978 | clean
979 | cleaned
980 | cleaners
981 | cleaning
982 | cleans
983 | clear
984 | cleared
985 | clearer
986 | clearing
987 | clearly
988 | clerk's
989 | clerks
990 | clever
991 | cliff
992 | cliff's
993 | climates
994 | climax
995 | climbed
996 | climbing
997 | clinches
998 | cling
999 | clockwork
1000 | close
1001 | closer
1002 | closet
1003 | closing
1004 | clot
1005 | cloth
1006 | clothes
1007 | clotheshorse
1008 | clothing
1009 | clotted
1010 | cloud
1011 | cloudburst
1012 | clouds
1013 | cloverleaf
1014 | club
1015 | clumsy
1016 | coach
1017 | coagulating
1018 | coal
1019 | coalition
1020 | coals
1021 | coast
1022 | coat
1023 | coauthors
1024 | cobbler's
1025 | coconut
1026 | coconuts
1027 | code
1028 | codes
1029 | coeducational
1030 | coexist
1031 | coffee
1032 | coffers
1033 | coil
1034 | coin
1035 | coincided
1036 | coins
1037 | coke
1038 | cold
1039 | coleslaw
1040 | collared
1041 | colleagues
1042 | collection
1043 | collects
1044 | colleges
1045 | collie
1046 | collusion
1047 | color
1048 | colored
1049 | colorful
1050 | colossal
1051 | column
1052 | combine
1053 | combustion
1054 | come
1055 | comes
1056 | coming
1057 | command
1058 | comment
1059 | commercial
1060 | common
1061 | commonplace
1062 | communism
1063 | community
1064 | compact
1065 | companions
1066 | company
1067 | company's
1068 | comparable
1069 | compare
1070 | comparison
1071 | compensation
1072 | competently
1073 | competing
1074 | competition
1075 | competitive
1076 | competitors
1077 | compile
1078 | complete
1079 | completely
1080 | complex
1081 | complexity
1082 | compliance
1083 | complicated
1084 | complicity
1085 | compose
1086 | composition
1087 | compositions
1088 | compost
1089 | composure
1090 | compound
1091 | compounded
1092 | compounds
1093 | compresses
1094 | compulsion
1095 | compulsory
1096 | computer
1097 | computers
1098 | comrades
1099 | conceivably
1100 | conceived
1101 | concept
1102 | concern
1103 | concerns
1104 | concert
1105 | concessionaire
1106 | conclusion
1107 | conclusions
1108 | concrete
1109 | concurrent
1110 | condemns
1111 | condition
1112 | conditions
1113 | confabulation
1114 | conferences
1115 | confidence
1116 | confident
1117 | confidential
1118 | configuration
1119 | confines
1120 | confirm
1121 | confirmation
1122 | conformational
1123 | conformists
1124 | confronted
1125 | confusion
1126 | congestion
1127 | congratulate
1128 | congregation
1129 | conjured
1130 | connoisseur
1131 | conscience
1132 | consequences
1133 | conservatism
1134 | consider
1135 | considerable
1136 | considerably
1137 | considered
1138 | considering
1139 | consistently
1140 | consists
1141 | consolidation
1142 | conspicuous
1143 | constantly
1144 | construction
1145 | constructions
1146 | consume
1147 | consumers
1148 | consuming
1149 | consumption
1150 | contact
1151 | contagious
1152 | contain
1153 | contained
1154 | container
1155 | contains
1156 | contemporary
1157 | contentedly
1158 | continental
1159 | continue
1160 | continued
1161 | continues
1162 | continuing
1163 | continuous
1164 | continuously
1165 | contradictorily
1166 | contrary
1167 | contrast
1168 | contribute
1169 | contributed
1170 | contributions
1171 | contributory
1172 | control
1173 | controlled
1174 | controls
1175 | convenient
1176 | converted
1177 | convey
1178 | conviction
1179 | convince
1180 | convincing
1181 | cook
1182 | cooked
1183 | cookies
1184 | cooking
1185 | cool
1186 | cooperated
1187 | cooperates
1188 | cooperation
1189 | cooperative
1190 | cop
1191 | copper
1192 | copra
1193 | copy
1194 | cordial
1195 | corduroy
1196 | corn
1197 | corner
1198 | cornered
1199 | cornmeal
1200 | corollaries
1201 | correct
1202 | corrugated
1203 | corsage
1204 | cory
1205 | cosmetics
1206 | cost
1207 | costly
1208 | costs
1209 | costume
1210 | costumes
1211 | cottage
1212 | cotton
1213 | cough
1214 | could
1215 | could've
1216 | couldn't
1217 | count
1218 | counted
1219 | counties
1220 | country
1221 | countryside
1222 | county
1223 | couples
1224 | courier
1225 | course
1226 | court
1227 | courts
1228 | courtyard
1229 | cover
1230 | coverage
1231 | covered
1232 | covers
1233 | cow
1234 | coward
1235 | cowboy
1236 | cowboy's
1237 | cowling
1238 | cows
1239 | coy
1240 | coyote
1241 | crab
1242 | crack
1243 | cracked
1244 | craft
1245 | cranberry
1246 | crash
1247 | crashed
1248 | crashing
1249 | crave
1250 | crawling
1251 | crayons
1252 | crazily
1253 | crazy
1254 | cream
1255 | create
1256 | created
1257 | creation
1258 | credit
1259 | creeping
1260 | creole
1261 | crept
1262 | crest
1263 | crestfallen
1264 | crew
1265 | crimson
1266 | crisis
1267 | crisp
1268 | criss
1269 | crisscrossed
1270 | critical
1271 | crooked
1272 | crops
1273 | cross
1274 | crossed
1275 | crossings
1276 | crossroads
1277 | crowd
1278 | crown
1279 | crucial
1280 | crucified
1281 | crude
1282 | crudely
1283 | cruel
1284 | cruelty
1285 | crunched
1286 | crushed
1287 | crushers
1288 | cry
1289 | crystalline
1290 | crystallizing
1291 | cubic
1292 | cuisine
1293 | cultivated
1294 | cultural
1295 | cultures
1296 | cupcakes
1297 | cups
1298 | cure
1299 | cured
1300 | curiosity
1301 | curious
1302 | curiously
1303 | curly
1304 | current
1305 | curry
1306 | curve
1307 | curves
1308 | custody
1309 | customer
1310 | customers
1311 | cut
1312 | cutbacks
1313 | cuts
1314 | cutting
1315 | cyclical
1316 | cynics
1317 | dad
1318 | daily
1319 | damage
1320 | damaged
1321 | damp
1322 | dance
1323 | dancers
1324 | dances
1325 | danger
1326 | dangerous
1327 | dangers
1328 | danny
1329 | daphne's
1330 | dark
1331 | darkness
1332 | darned
1333 | dash
1334 | data
1335 | date
1336 | davy
1337 | dawn
1338 | day
1339 | daydreamed
1340 | days
1341 | daytime
1342 | dead
1343 | deadline
1344 | deal
1345 | dealers
1346 | deans
1347 | dear
1348 | death
1349 | debts
1350 | debut
1351 | decadent
1352 | decaying
1353 | decays
1354 | deceitful
1355 | deceiving
1356 | december
1357 | decide
1358 | decided
1359 | decides
1360 | decisions
1361 | decisive
1362 | deck
1363 | decking
1364 | declared
1365 | declining
1366 | decorate
1367 | decorated
1368 | decorative
1369 | decorator
1370 | decrease
1371 | deduct
1372 | deductible
1373 | deed
1374 | deep
1375 | deeper
1376 | deeply
1377 | deer
1378 | defects
1379 | defend
1380 | defended
1381 | defense
1382 | defensive
1383 | defiantly
1384 | define
1385 | definite
1386 | definitely
1387 | degree
1388 | degrees
1389 | delegated
1390 | delete
1391 | delicate
1392 | delicious
1393 | delight
1394 | delightful
1395 | delineating
1396 | delivering
1397 | demand
1398 | demanded
1399 | demands
1400 | demineralization
1401 | demonstration
1402 | dense
1403 | density
1404 | denunciation
1405 | deny
1406 | departments
1407 | departure
1408 | depend
1409 | depicts
1410 | depletion
1411 | depreciation
1412 | deprive
1413 | deputy
1414 | dereliction
1415 | derived
1416 | deriving
1417 | describe
1418 | described
1419 | desegregate
1420 | desegregation
1421 | deserves
1422 | design
1423 | designer
1424 | desirable
1425 | desire
1426 | desires
1427 | desk
1428 | desolation
1429 | despair
1430 | desperately
1431 | despised
1432 | despite
1433 | dessert
1434 | desserts
1435 | destiny
1436 | destroy
1437 | destroying
1438 | detail
1439 | detailed
1440 | details
1441 | detectable
1442 | detective's
1443 | determination
1444 | determine
1445 | determined
1446 | detract
1447 | develop
1448 | developed
1449 | developing
1450 | development
1451 | device
1452 | devour
1453 | dew
1454 | diagnosed
1455 | diagnosis
1456 | diagonally
1457 | diagram
1458 | diane
1459 | diarrhoea
1460 | dice
1461 | dictators
1462 | dictionary
1463 | did
1464 | didn't
1465 | die
1466 | died
1467 | diet
1468 | differ
1469 | difference
1470 | differences
1471 | different
1472 | differentiate
1473 | differently
1474 | difficult
1475 | dig
1476 | dignity
1477 | dim
1478 | dime
1479 | dimensions
1480 | dimes
1481 | diminish
1482 | diminishing
1483 | dingo
1484 | dinner
1485 | diploma
1486 | direction
1487 | directional
1488 | directions
1489 | director
1490 | directory
1491 | dirt
1492 | dirty
1493 | disappeared
1494 | disappointed
1495 | disapproval
1496 | disapproves
1497 | disaster
1498 | discard
1499 | discipline
1500 | disciplined
1501 | disclaimer
1502 | discount
1503 | discouraged
1504 | discouraging
1505 | discovered
1506 | discretionary
1507 | discussion
1508 | discussions
1509 | disease
1510 | diseases
1511 | disguise
1512 | disgusting
1513 | dish
1514 | dishes
1515 | disk
1516 | disliked
1517 | dislikes
1518 | disobeyed
1519 | dispel
1520 | dispensing
1521 | dispersed
1522 | displacement
1523 | display
1524 | displayed
1525 | dispute
1526 | disputes
1527 | disregarding
1528 | disrepair
1529 | dissolve
1530 | distance
1531 | distances
1532 | distaste
1533 | distinct
1534 | distinguished
1535 | distorted
1536 | distracted
1537 | distress
1538 | distributed
1539 | districts
1540 | disturb
1541 | ditches
1542 | dive
1543 | diversity
1544 | divided
1545 | divinities
1546 | division
1547 | divorce
1548 | divorced
1549 | divorcee
1550 | do
1551 | doctor
1552 | doctors
1553 | doctrine
1554 | documented
1555 | documents
1556 | dodging
1557 | does
1558 | doesn't
1559 | dog
1560 | dogmatically
1561 | dogs
1562 | doin'
1563 | doing
1564 | doll
1565 | dollar
1566 | dollars
1567 | dolphins
1568 | dome
1569 | domestic
1570 | dominant
1571 | dominated
1572 | don't
1573 | donate
1574 | donated
1575 | done
1576 | door
1577 | doors
1578 | doorways
1579 | dormitories
1580 | doses
1581 | double
1582 | doubt
1583 | dough
1584 | doused
1585 | down
1586 | downpour
1587 | downstairs
1588 | downtown
1589 | downward
1590 | dozen
1591 | drain
1592 | dramatic
1593 | drank
1594 | drastically
1595 | draw
1596 | drawing
1597 | drawled
1598 | drawn
1599 | dream
1600 | dreams
1601 | drenched
1602 | dress
1603 | dressing
1604 | dressy
1605 | drew
1606 | dried
1607 | drift
1608 | drifted
1609 | drifting
1610 | drink
1611 | drinkers
1612 | drive
1613 | driven
1614 | drivers
1615 | driving
1616 | drop
1617 | dropped
1618 | drops
1619 | drought
1620 | drove
1621 | drug
1622 | drug's
1623 | drugs
1624 | drugstore
1625 | drunk
1626 | drunkard
1627 | drunkards
1628 | drunkenness
1629 | dry
1630 | drying
1631 | dubious
1632 | duck
1633 | ducks
1634 | due
1635 | dug
1636 | dull
1637 | dumb
1638 | dumped
1639 | duplicate
1640 | during
1641 | dust
1642 | dusting
1643 | dutch
1644 | duty
1645 | dwarf
1646 | dwell
1647 | dyeing
1648 | dying
1649 | dynamics
1650 | dynastic
1651 | each
1652 | eagerly
1653 | eagerness
1654 | ear
1655 | earlier
1656 | early
1657 | earn
1658 | earnestly
1659 | ears
1660 | earth
1661 | earth's
1662 | earthenware
1663 | earthly
1664 | earthquake
1665 | ease
1666 | eased
1667 | easier
1668 | easily
1669 | eastern
1670 | easy
1671 | easygoing
1672 | eat
1673 | eaten
1674 | eating
1675 | eccentricity
1676 | echo
1677 | economic
1678 | economically
1679 | economy
1680 | ecumenical
1681 | edge
1682 | edges
1683 | edgy
1684 | education
1685 | educational
1686 | effect
1687 | effective
1688 | effects
1689 | efficiency
1690 | efficient
1691 | effort
1692 | egg
1693 | eggs
1694 | ego
1695 | egotist
1696 | eight
1697 | eighteenth
1698 | either
1699 | elaborately
1700 | elbowing
1701 | elderly
1702 | election
1703 | electric
1704 | electrical
1705 | electricity
1706 | electron
1707 | electronic
1708 | electrostatic
1709 | elegant
1710 | element
1711 | elementary
1712 | elements
1713 | elevator
1714 | eleven
1715 | ellipsoids
1716 | elm
1717 | elongation
1718 | else
1719 | elsewhere
1720 | embankment
1721 | emblem
1722 | embodiment
1723 | embracing
1724 | emerge
1725 | emergency
1726 | emotion
1727 | emotional
1728 | emotionally
1729 | emotions
1730 | emperor
1731 | emphasis
1732 | emphasize
1733 | emphasized
1734 | emphysema
1735 | empirical
1736 | employee
1737 | employees
1738 | employment
1739 | empty
1740 | enabling
1741 | enact
1742 | enamel
1743 | encamped
1744 | enclosed
1745 | encountered
1746 | encourage
1747 | encouraged
1748 | encyclopedias
1749 | end
1750 | endeavored
1751 | ended
1752 | endosperm
1753 | ends
1754 | endurance
1755 | enemy
1756 | energy
1757 | engine
1758 | engineer
1759 | engineering
1760 | engineers'
1761 | engulfed
1762 | enigma
1763 | enjoy
1764 | enjoyed
1765 | enlightenment
1766 | enlisted
1767 | enormous
1768 | enough
1769 | enrich
1770 | ensue
1771 | enter
1772 | entertaining
1773 | enthusiastic
1774 | entire
1775 | entirely
1776 | entitle
1777 | entity
1778 | entries
1779 | entropy
1780 | entry
1781 | envelope
1782 | environment
1783 | environments
1784 | enzyme
1785 | ephemeral
1786 | epidemic
1787 | episode
1788 | equal
1789 | equally
1790 | equation
1791 | equipment
1792 | equipped
1793 | equivalent
1794 | era
1795 | erect
1796 | erotic
1797 | errors
1798 | eruption
1799 | escalator
1800 | escape
1801 | esoteric
1802 | especially
1803 | essay
1804 | essential
1805 | essentially
1806 | establish
1807 | establishment
1808 | estimate
1809 | estimates
1810 | etc
1811 | eternal
1812 | eternity
1813 | etiquette
1814 | evacuate
1815 | evaluate
1816 | evaluated
1817 | evaluation
1818 | evasive
1819 | even
1820 | evening
1821 | evenly
1822 | events
1823 | eventualities
1824 | eventually
1825 | ever
1826 | every
1827 | everybody
1828 | everyone
1829 | everything
1830 | evidence
1831 | evident
1832 | evocative
1833 | evolve
1834 | exacerbated
1835 | exacerbations
1836 | exactly
1837 | exaggerated
1838 | exam
1839 | examination
1840 | examined
1841 | example
1842 | examples
1843 | exboyfriend
1844 | excellent
1845 | except
1846 | exception
1847 | excess
1848 | exchange
1849 | exchanged
1850 | excited
1851 | excitement
1852 | exciting
1853 | exclaiming
1854 | excluded
1855 | exclusive
1856 | execute
1857 | execution
1858 | executive
1859 | exercise
1860 | exercises
1861 | exhibited
1862 | exhibits
1863 | exhusband
1864 | exist
1865 | existed
1866 | existence
1867 | existing
1868 | exists
1869 | exotic
1870 | expect
1871 | expectations
1872 | expected
1873 | expecting
1874 | expects
1875 | expense
1876 | expensive
1877 | experience
1878 | experienced
1879 | experiment
1880 | experiment's
1881 | experimental
1882 | experiments
1883 | expertise
1884 | expertly
1885 | experts
1886 | explain
1887 | explains
1888 | explanation
1889 | explicitly
1890 | exploring
1891 | explosion
1892 | export
1893 | exposed
1894 | exposure
1895 | expression
1896 | expressway
1897 | exquisite
1898 | extended
1899 | extending
1900 | extensive
1901 | extent
1902 | extra
1903 | extraordinary
1904 | extremely
1905 | exultantly
1906 | eye
1907 | eyebrow
1908 | eyedrops
1909 | eyelids
1910 | eyes
1911 | eyestrain
1912 | fabric
1913 | fabrics
1914 | face
1915 | faces
1916 | fact
1917 | factions
1918 | factors
1919 | facts
1920 | faculty
1921 | faded
1922 | fail
1923 | failed
1924 | fails
1925 | failure
1926 | faint
1927 | fair
1928 | fairly
1929 | fairy
1930 | faith
1931 | fall
1932 | fallen
1933 | fallout
1934 | falls
1935 | false
1936 | falters
1937 | fame
1938 | familiar
1939 | familiarity
1940 | family
1941 | famous
1942 | fan
1943 | fancier
1944 | fancy
1945 | fangs
1946 | far
1947 | farm
1948 | farmer's
1949 | farmers
1950 | farmhouses
1951 | farmland
1952 | farmyard
1953 | farther
1954 | fasciculations
1955 | fascinating
1956 | fashion
1957 | fashioned
1958 | fast
1959 | faster
1960 | fat
1961 | father
1962 | father's
1963 | fathers
1964 | fatigue
1965 | fatigued
1966 | fatigues
1967 | fault
1968 | faults
1969 | favor
1970 | favorable
1971 | favorite
1972 | fawn
1973 | fear
1974 | feared
1975 | fearful
1976 | fears
1977 | feasible
1978 | feast
1979 | feather
1980 | feathered
1981 | feathers
1982 | features
1983 | feed
1984 | feel
1985 | feeling
1986 | feelings
1987 | feels
1988 | feet
1989 | fell
1990 | fella
1991 | fellowship
1992 | felt
1993 | female
1994 | fenced
1995 | fences
1996 | fermented
1997 | ferries
1998 | fertilizers
1999 | fever
2000 | feverishly
2001 | few
2002 | fewer
2003 | fibers
2004 | fibrosis
2005 | fiction
2006 | fiddles
2007 | field
2008 | fields
2009 | fieldwork
2010 | fiercely
2011 | fiercest
2012 | fiery
2013 | fifteen
2014 | fifth
2015 | fifty
2016 | fight
2017 | fights
2018 | figure
2019 | figured
2020 | figures
2021 | file
2022 | files
2023 | fill
2024 | filling
2025 | film
2026 | films
2027 | filtered
2028 | filtering
2029 | final
2030 | finally
2031 | financing
2032 | find
2033 | finding
2034 | finds
2035 | fine
2036 | finger
2037 | fingerprints
2038 | fingers
2039 | finish
2040 | finishing
2041 | fire
2042 | firebug
2043 | firecrackers
2044 | fireplace
2045 | fires
2046 | firing
2047 | firmly
2048 | firmness
2049 | firms
2050 | first
2051 | fiscal
2052 | fish
2053 | fishermen
2054 | fishing
2055 | fist
2056 | fists
2057 | fit
2058 | fitfully
2059 | five
2060 | fix
2061 | fixed
2062 | fjords
2063 | flag
2064 | flame
2065 | flash
2066 | flashing
2067 | flat
2068 | flawless
2069 | flaxseed
2070 | fled
2071 | fleecy
2072 | flesh
2073 | flew
2074 | flexibility
2075 | flexible
2076 | flickered
2077 | flies
2078 | flimsy
2079 | flip
2080 | float
2081 | floc
2082 | flood
2083 | floor
2084 | floorboards
2085 | flopped
2086 | flourish
2087 | flourishes
2088 | flow
2089 | flower
2090 | flowerpot
2091 | flowers
2092 | flu
2093 | fluent
2094 | fluid
2095 | flurries
2096 | fluttered
2097 | flying
2098 | foam
2099 | foamy
2100 | focus
2101 | fog
2102 | foil
2103 | fold
2104 | folded
2105 | folds
2106 | follow
2107 | followed
2108 | following
2109 | follows
2110 | food
2111 | foods
2112 | fool
2113 | fooling
2114 | foolish
2115 | fools
2116 | foot
2117 | football
2118 | footfall
2119 | footnotes
2120 | for
2121 | forbidden
2122 | force
2123 | forced
2124 | forces
2125 | forecasts
2126 | forehead
2127 | foreign
2128 | foreigners
2129 | forest
2130 | forever
2131 | forged
2132 | forgery
2133 | forget
2134 | forgiveness
2135 | forgot
2136 | form
2137 | formality
2138 | formation
2139 | formed
2140 | former
2141 | forms
2142 | formula
2143 | formulation
2144 | forth
2145 | fortune
2146 | forty
2147 | forward
2148 | fosters
2149 | fought
2150 | foul
2151 | found
2152 | four
2153 | frame
2154 | framework
2155 | frankfurter
2156 | frankfurters
2157 | frantically
2158 | freed
2159 | freedom
2160 | freely
2161 | freethinkers
2162 | freeway
2163 | frequent
2164 | frequently
2165 | fresh
2166 | friend
2167 | friends
2168 | frightened
2169 | fringe
2170 | frivolous
2171 | from
2172 | front
2173 | frost
2174 | frostbite
2175 | frowningly
2176 | froze
2177 | fruit
2178 | frustration
2179 | fudge
2180 | fulfilling
2181 | fulfillment
2182 | full
2183 | fullness
2184 | fully
2185 | fumbled
2186 | fuming
2187 | fun
2188 | function
2189 | functional
2190 | fund
2191 | funding
2192 | funds
2193 | fungicides
2194 | funnel
2195 | funny
2196 | fur
2197 | furiously
2198 | furnish
2199 | furrier
2200 | further
2201 | fuss
2202 | future
2203 | gab
2204 | gadfly
2205 | gadget
2206 | gag
2207 | gain
2208 | gained
2209 | gait
2210 | gallant
2211 | gallon
2212 | galoshes
2213 | galvanic
2214 | game
2215 | gang
2216 | gangplank
2217 | garage
2218 | garbage
2219 | garden
2220 | gardens
2221 | garlic
2222 | garrisoned
2223 | gas
2224 | gashes
2225 | gassing
2226 | gates
2227 | gateway
2228 | gathered
2229 | gathering
2230 | gaudy
2231 | gave
2232 | gay
2233 | gazed
2234 | gear
2235 | geeing
2236 | geese
2237 | general
2238 | general's
2239 | generalizations
2240 | generalize
2241 | generally
2242 | generals
2243 | generations
2244 | generous
2245 | generously
2246 | gentle
2247 | gentleman
2248 | gently
2249 | genuinely
2250 | geocentricism
2251 | geographically
2252 | geological
2253 | george
2254 | get
2255 | gets
2256 | getting
2257 | ghetto
2258 | ghettos
2259 | ghost
2260 | ghostlike
2261 | giant
2262 | giants
2263 | gift
2264 | gifted
2265 | gifts
2266 | gigantic
2267 | gin
2268 | giraffes
2269 | girl
2270 | girlie
2271 | girlishly
2272 | girls
2273 | give
2274 | given
2275 | gives
2276 | givin'
2277 | gland
2278 | glass
2279 | glaze
2280 | glazed
2281 | glazing
2282 | gleam
2283 | gleamed
2284 | gleaming
2285 | glee
2286 | glimpse
2287 | glistened
2288 | glistening
2289 | gloom
2290 | glories
2291 | glorified
2292 | glossy
2293 | gloves
2294 | glow
2295 | glowed
2296 | glue
2297 | glued
2298 | gluttons
2299 | go
2300 | goal
2301 | goals
2302 | goat
2303 | goes
2304 | goin'
2305 | going
2306 | gold
2307 | golfing
2308 | gone
2309 | gonna
2310 | good
2311 | goodness
2312 | goodnight
2313 | goose
2314 | gooseberry
2315 | gorgeous
2316 | gosh
2317 | got
2318 | goulash
2319 | govern
2320 | governing
2321 | government
2322 | governor
2323 | gowns
2324 | grab
2325 | gracefully
2326 | grade
2327 | grades
2328 | gradually
2329 | graduation
2330 | grains
2331 | grandmother
2332 | grants
2333 | graph
2334 | grateful
2335 | graying
2336 | grazing
2337 | greasing
2338 | greasy
2339 | great
2340 | greater
2341 | greatly
2342 | greedily
2343 | green
2344 | greenness
2345 | greeted
2346 | greg
2347 | gregory
2348 | grievance
2349 | grievances
2350 | grill
2351 | grin
2352 | grinned
2353 | grip
2354 | groin
2355 | groom
2356 | gross
2357 | grotesque
2358 | ground
2359 | groundhog
2360 | group
2361 | groups
2362 | grow
2363 | growing
2364 | grown
2365 | grownups
2366 | grows
2367 | growth
2368 | grudgingly
2369 | grunt
2370 | guaranteed
2371 | guarantees
2372 | guard
2373 | guerrilla
2374 | guerrillas
2375 | guess
2376 | guidance
2377 | guide
2378 | guidebook
2379 | guides
2380 | guilt
2381 | guilty
2382 | gum
2383 | gums
2384 | gun
2385 | gunman
2386 | gunpoint
2387 | gunpowder
2388 | guns
2389 | gurgle
2390 | gus
2391 | gushed
2392 | guttural
2393 | guy
2394 | guys
2395 | gwen
2396 | gyro
2397 | gyrocompass
2398 | ha
2399 | habit
2400 | had
2401 | hafta
2402 | haggard
2403 | hails
2404 | hair
2405 | haired
2406 | half
2407 | halloween
2408 | hallway
2409 | halves
2410 | ham
2411 | hand
2412 | handbag
2413 | handed
2414 | handful
2415 | handle
2416 | handling
2417 | hands
2418 | handsome
2419 | handy
2420 | handyman
2421 | hanging
2422 | hangovers
2423 | happen
2424 | happened
2425 | happening
2426 | happier
2427 | happily
2428 | happy
2429 | hard
2430 | hardly
2431 | hardy
2432 | harmlessly
2433 | harmonize
2434 | harmony
2435 | harms
2436 | harsh
2437 | has
2438 | hastily
2439 | hat
2440 | hate
2441 | hated
2442 | hatred
2443 | hats
2444 | haughty
2445 | hauling
2446 | haunted
2447 | have
2448 | haven't
2449 | having
2450 | hawing
2451 | hay
2452 | hazards
2453 | haze
2454 | he
2455 | he'd
2456 | he'll
2457 | he's
2458 | head
2459 | headache
2460 | headaches
2461 | heading
2462 | headquarters
2463 | heads
2464 | healing
2465 | health
2466 | healthful
2467 | healthier
2468 | healthy
2469 | heap
2470 | hear
2471 | heard
2472 | heart
2473 | heartily
2474 | heat
2475 | heat's
2476 | heater
2477 | heating
2478 | heave
2479 | heaven
2480 | heavens
2481 | heavier
2482 | heavy
2483 | heck
2484 | heels
2485 | heights
2486 | held
2487 | helium
2488 | hell
2489 | hello
2490 | help
2491 | helpful
2492 | helping
2493 | helpless
2494 | helps
2495 | hem
2496 | hemorrhage
2497 | hen
2498 | henceforth
2499 | henry
2500 | hepatitis
2501 | her
2502 | herb's
2503 | herd
2504 | herdin'
2505 | here
2506 | here's
2507 | heritage
2508 | hero
2509 | heroes
2510 | heroic
2511 | heroism
2512 | herself
2513 | hesitate
2514 | hey
2515 | hibachi
2516 | hide
2517 | hides
2518 | hiding
2519 | hierarchies
2520 | high
2521 | higher
2522 | highest
2523 | highly
2524 | highway
2525 | hiking
2526 | hills
2527 | hillside
2528 | him
2529 | himself
2530 | hindu
2531 | hint
2532 | hire
2533 | hired
2534 | hires
2535 | hiring
2536 | his
2537 | hispanic
2538 | historians
2539 | historical
2540 | historically
2541 | history
2542 | hit
2543 | hoarse
2544 | hold
2545 | holder
2546 | holding
2547 | holds
2548 | hole
2549 | holes
2550 | holiday
2551 | holidays
2552 | home
2553 | homes
2554 | homogeneous
2555 | honest
2556 | honesty
2557 | honey
2558 | honeybees
2559 | honor
2560 | hood
2561 | hoofs
2562 | hook
2563 | hooking
2564 | hope
2565 | hoped
2566 | hopeful
2567 | hopeless
2568 | horizon
2569 | horror
2570 | horse
2571 | horseback
2572 | horseplay
2573 | horses
2574 | hospitalization
2575 | hospitals
2576 | host
2577 | hostages
2578 | hot
2579 | hotel
2580 | hotels
2581 | hour
2582 | hours
2583 | house
2584 | household
2585 | householder
2586 | houses
2587 | housewives
2588 | housework
2589 | housing
2590 | how
2591 | how's
2592 | however
2593 | hub
2594 | huge
2595 | hugged
2596 | hugging
2597 | hull
2598 | hum
2599 | human
2600 | humanism
2601 | humid
2602 | humidity
2603 | humor
2604 | humorous
2605 | hundred
2606 | hung
2607 | hungarian
2608 | hunter
2609 | hurriedly
2610 | hurry
2611 | hurt
2612 | hurts
2613 | husband
2614 | husband's
2615 | husbandry
2616 | husky
2617 | hut
2618 | hyacinths
2619 | hyena
2620 | hyenas
2621 | hypocrites
2622 | hypothalamic
2623 | hypothetical
2624 | hysterical
2625 | i
2626 | i'd
2627 | i'll
2628 | i'm
2629 | i've
2630 | ice
2631 | ices
2632 | icicles
2633 | icy
2634 | idea
2635 | ideal
2636 | ideally
2637 | ideas
2638 | identical
2639 | identifiable
2640 | identified
2641 | identify
2642 | ideological
2643 | ideology
2644 | idiosyncrasies
2645 | idiotic
2646 | idiotically
2647 | idly
2648 | idolize
2649 | if
2650 | ignore
2651 | ignored
2652 | ignores
2653 | iguanas
2654 | ill
2655 | illegal
2656 | illegally
2657 | illness
2658 | illnesses
2659 | illuminated
2660 | illuminating
2661 | illumined
2662 | illusions
2663 | image
2664 | images
2665 | imagination
2666 | imagine
2667 | imagined
2668 | imitate
2669 | immaterial
2670 | immediate
2671 | immediately
2672 | immortal
2673 | impact
2674 | imperfect
2675 | impersonal
2676 | implausibly
2677 | implications
2678 | implied
2679 | import
2680 | importance
2681 | important
2682 | imports
2683 | imposes
2684 | impossible
2685 | impressions
2686 | improved
2687 | improving
2688 | impulses
2689 | in
2690 | inadequate
2691 | inadvisable
2692 | inanimate
2693 | inarticulate
2694 | inaugural
2695 | inch
2696 | include
2697 | included
2698 | including
2699 | inclusions
2700 | income
2701 | incomplete
2702 | incorporated
2703 | increase
2704 | increased
2705 | increases
2706 | increasing
2707 | indeed
2708 | indefinable
2709 | indefinite
2710 | indemnity
2711 | independent
2712 | index
2713 | indicate
2714 | indicated
2715 | indicates
2716 | indispensable
2717 | individual
2718 | individuals
2719 | indulge
2720 | industry
2721 | ineffective
2722 | inertia
2723 | inevitable
2724 | inexact
2725 | inexcusable
2726 | inexhaustible
2727 | infancy
2728 | infection
2729 | infectious
2730 | infective
2731 | inferences
2732 | inferiority
2733 | infidels
2734 | infield
2735 | infiltration
2736 | inflammatory
2737 | inflated
2738 | influences
2739 | information
2740 | informative
2741 | informed
2742 | infrequent
2743 | infuriation
2744 | ingenuity
2745 | ingredient
2746 | ingredients
2747 | inhabit
2748 | inherited
2749 | inhibit
2750 | inhibitor
2751 | inhuman
2752 | initiative
2753 | injected
2754 | injection
2755 | injuries
2756 | innocence
2757 | inquired
2758 | inquiry
2759 | insecticide
2760 | insecticides
2761 | insert
2762 | inside
2763 | insist
2764 | inspiring
2765 | instability
2766 | installations
2767 | installed
2768 | instance
2769 | instant
2770 | instantaneous
2771 | instead
2772 | instinct
2773 | instructions
2774 | instrument
2775 | instruments
2776 | insufficient
2777 | insulate
2778 | insulator
2779 | insurance
2780 | integrated
2781 | integration
2782 | integrity
2783 | intelligence
2784 | intelligent
2785 | intelligible
2786 | intent
2787 | interchangeably
2788 | interest
2789 | interested
2790 | interesting
2791 | interior
2792 | internal
2793 | interpretation
2794 | interpretations
2795 | intervals
2796 | interview
2797 | interviewee
2798 | interweaving
2799 | intimate
2800 | into
2801 | introduced
2802 | intrusions
2803 | intuition
2804 | invade
2805 | invaluable
2806 | invariably
2807 | inventories
2808 | invest
2809 | investigation
2810 | investigations
2811 | inviolate
2812 | invitation
2813 | invoked
2814 | involved
2815 | involves
2816 | involving
2817 | inward
2818 | inwardly
2819 | irate
2820 | iris
2821 | irish
2822 | iron
2823 | ironic
2824 | ironically
2825 | ironing
2826 | irons
2827 | irradiation
2828 | irremediable
2829 | irresponsible
2830 | irritated
2831 | irving's
2832 | is
2833 | isn't
2834 | isotopes
2835 | issue
2836 | issued
2837 | issues
2838 | it
2839 | it'd
2840 | it's
2841 | itching
2842 | item
2843 | itemize
2844 | items
2845 | its
2846 | itself
2847 | ivory
2848 | jabbed
2849 | jackass
2850 | jacket
2851 | jaded
2852 | jagged
2853 | jaguars
2854 | jam
2855 | jane
2856 | january
2857 | jar
2858 | jars
2859 | jaw
2860 | jealousies
2861 | jealousy
2862 | jeep
2863 | jeff
2864 | jeff's
2865 | jennifer's
2866 | jeopardize
2867 | jerk
2868 | jerky
2869 | jet
2870 | jewel
2871 | jim
2872 | jim's
2873 | job
2874 | jocular
2875 | john
2876 | john's
2877 | join
2878 | joining
2879 | joint
2880 | jokers
2881 | jokes
2882 | joking
2883 | journal
2884 | journalese
2885 | journalist
2886 | joyce
2887 | judge
2888 | judged
2889 | juice
2890 | juicy
2891 | jump
2892 | jumped
2893 | jungle
2894 | junior
2895 | just
2896 | justification
2897 | kayak
2898 | kayo
2899 | keelson
2900 | keep
2901 | kept
2902 | kernels
2903 | kerosene
2904 | key
2905 | keyed
2906 | keys
2907 | kick
2908 | kid
2909 | kid's
2910 | kidnappers
2911 | kids
2912 | kill
2913 | killed
2914 | kin
2915 | kind
2916 | kinda
2917 | kindergarten
2918 | kindly
2919 | kippers
2920 | kissed
2921 | kitchen
2922 | knack
2923 | knacks
2924 | knee
2925 | kneeling
2926 | knees
2927 | knew
2928 | knick
2929 | knife
2930 | knifelike
2931 | knit
2932 | knitted
2933 | knives
2934 | knocked
2935 | know
2936 | knowed
2937 | knowing
2938 | knowingly
2939 | known
2940 | knows
2941 | labeled
2942 | labor
2943 | laboratory
2944 | lacerate
2945 | lack
2946 | lackeys
2947 | lactating
2948 | lad
2949 | ladder
2950 | lady's
2951 | ladylike
2952 | lagoon
2953 | laid
2954 | lake
2955 | lamb's
2956 | lamp
2957 | lamps
2958 | land
2959 | landlord
2960 | landmarks
2961 | language
2962 | large
2963 | largely
2964 | larger
2965 | larvae
2966 | lashed
2967 | lashings
2968 | last
2969 | latches
2970 | late
2971 | latent
2972 | later
2973 | latest
2974 | lathe
2975 | latitudes
2976 | latter
2977 | laugh
2978 | laughed
2979 | laughing
2980 | lavishly
2981 | law
2982 | lawful
2983 | laws
2984 | lawyer
2985 | lawyers
2986 | lay
2987 | layoffs
2988 | lazy
2989 | lead
2990 | leader
2991 | leadership
2992 | leading
2993 | leaf
2994 | leaflet
2995 | leagues
2996 | leap
2997 | learn
2998 | learned
2999 | least
3000 | leather
3001 | leave
3002 | leaves
3003 | leaving
3004 | leavings
3005 | led
3006 | ledger
3007 | leeway
3008 | left
3009 | leg
3010 | legal
3011 | legend
3012 | legged
3013 | legislation
3014 | legislative
3015 | legislature
3016 | legs
3017 | leisure
3018 | lemon
3019 | length
3020 | lengthy
3021 | lentils
3022 | leopards
3023 | less
3024 | lesson
3025 | lessons
3026 | lest
3027 | let
3028 | let's
3029 | letter
3030 | letters
3031 | level
3032 | leveling
3033 | levels
3034 | lewd
3035 | liberal
3036 | liberals
3037 | library
3038 | lid
3039 | lids
3040 | lie
3041 | life
3042 | lifeboats
3043 | lifelong
3044 | lift
3045 | lifting
3046 | ligament
3047 | light
3048 | lightbulbs
3049 | lighted
3050 | lighter
3051 | lightly
3052 | lights
3053 | like
3054 | liked
3055 | likely
3056 | likes
3057 | likewise
3058 | lily
3059 | limit
3060 | limited
3061 | lincoln
3062 | line
3063 | lined
3064 | lines
3065 | lion
3066 | lip
3067 | lips
3068 | liquid
3069 | liquids
3070 | liquor
3071 | list
3072 | listed
3073 | lists
3074 | literally
3075 | literary
3076 | literature
3077 | lithographs
3078 | litter
3079 | little
3080 | live
3081 | lived
3082 | lively
3083 | lives
3084 | livestock
3085 | living
3086 | loaded
3087 | loads
3088 | lobes
3089 | local
3090 | locate
3091 | location
3092 | lock
3093 | locked
3094 | lodge
3095 | logical
3096 | logically
3097 | logs
3098 | lone
3099 | loneliness
3100 | long
3101 | longed
3102 | longer
3103 | longitudes
3104 | look
3105 | looked
3106 | looking
3107 | looks
3108 | looms
3109 | loose
3110 | lori's
3111 | lose
3112 | loss
3113 | losses
3114 | lost
3115 | lot
3116 | lotions
3117 | lots
3118 | loudest
3119 | loudly
3120 | louse
3121 | lousiness
3122 | love
3123 | loved
3124 | lovely
3125 | lovie
3126 | loving
3127 | low
3128 | lower
3129 | lowered
3130 | loyal
3131 | loyalties
3132 | luck
3133 | lucky
3134 | lullaby
3135 | lumber
3136 | lunch
3137 | lunchroom
3138 | lungs
3139 | lush
3140 | luxurious
3141 | luxury
3142 | lying
3143 | ma'am
3144 | macabre
3145 | machine
3146 | machinery
3147 | machines
3148 | mad
3149 | made
3150 | madstones
3151 | magnetic
3152 | magnetism
3153 | magnificently
3154 | magnified
3155 | magpies
3156 | mahogany
3157 | maids'
3158 | mail
3159 | main
3160 | maintain
3161 | maintenance
3162 | major
3163 | majority
3164 | make
3165 | makes
3166 | making
3167 | maladies
3168 | malaria
3169 | male
3170 | mammals
3171 | man
3172 | man's
3173 | manage
3174 | managed
3175 | management
3176 | mandates
3177 | mango
3178 | manhood
3179 | manifest
3180 | manner
3181 | mannerism
3182 | manners
3183 | manual
3184 | manufacturer
3185 | manufacturers
3186 | manure
3187 | many
3188 | map
3189 | mare's
3190 | margaret
3191 | marine
3192 | marine's
3193 | mark
3194 | marketing
3195 | markets
3196 | marks
3197 | marksmanship
3198 | marriage
3199 | married
3200 | marshmallows
3201 | marvel
3202 | marvelously
3203 | mask
3204 | masks
3205 | masonry
3206 | masquerade
3207 | mass
3208 | massage
3209 | massive
3210 | master
3211 | master's
3212 | masterful
3213 | matched
3214 | matching
3215 | mate
3216 | material
3217 | materials
3218 | mates
3219 | mathematics
3220 | mathews
3221 | matter
3222 | matters
3223 | mattresses
3224 | maturity
3225 | maximal
3226 | maximize
3227 | maximum
3228 | may
3229 | mayan
3230 | maybe
3231 | mayonnaise
3232 | me
3233 | meadow
3234 | meals
3235 | mealynosed
3236 | mean
3237 | meaning
3238 | meaningful
3239 | meanness
3240 | means
3241 | meant
3242 | meanwhile
3243 | measure
3244 | measured
3245 | measurement
3246 | meat
3247 | meats
3248 | mechanic
3249 | mechanical
3250 | mechanism
3251 | media
3252 | median
3253 | medical
3254 | medicine
3255 | medieval
3256 | mediocrity
3257 | meet
3258 | meeting
3259 | meetings
3260 | melancholy
3261 | melodramatic
3262 | melody
3263 | melted
3264 | member
3265 | members
3266 | membership
3267 | memo
3268 | memorized
3269 | memory
3270 | men
3271 | mental
3272 | mentality
3273 | mention
3274 | meow
3275 | mercenary
3276 | merchandising
3277 | mercilessly
3278 | mere
3279 | merely
3280 | merger
3281 | mergers
3282 | merit
3283 | merrily
3284 | mess
3285 | message
3286 | messy
3287 | met
3288 | metal
3289 | metallic
3290 | method
3291 | methods
3292 | mettle
3293 | miami
3294 | michael
3295 | micrometeorite
3296 | micrometeorites
3297 | microorganisms
3298 | microscopically
3299 | midair
3300 | midnight
3301 | might
3302 | mighty
3303 | mike
3304 | mile
3305 | miles
3306 | military
3307 | milk
3308 | millionaires
3309 | mind
3310 | minded
3311 | minds
3312 | mine
3313 | mining
3314 | minister
3315 | minor
3316 | minority
3317 | minute
3318 | minutes
3319 | miraculous
3320 | miraculously
3321 | mirage
3322 | mirror
3323 | mirrors
3324 | misbehavior
3325 | miserable
3326 | misery
3327 | mishap
3328 | misinterpret
3329 | misleading
3330 | misperceives
3331 | misplaced
3332 | misprint
3333 | misquote
3334 | miss
3335 | mistaken
3336 | mixed
3337 | mixing
3338 | mobile
3339 | mock
3340 | moded
3341 | modeled
3342 | modeling
3343 | models
3344 | modern
3345 | modernization
3346 | modernizing
3347 | modest
3348 | modesty
3349 | modified
3350 | modular
3351 | moist
3352 | moistened
3353 | moisture
3354 | mold
3355 | molded
3356 | mollusks
3357 | mom
3358 | moment
3359 | momentary
3360 | moments
3361 | momma
3362 | monday
3363 | money
3364 | monitored
3365 | monkey
3366 | monopolize
3367 | monstrous
3368 | month
3369 | months
3370 | moon
3371 | moonlight
3372 | mopped
3373 | moral
3374 | morale
3375 | more
3376 | moreover
3377 | morgue
3378 | morning
3379 | morphological
3380 | morphophonemic
3381 | morrow
3382 | mosquitoes
3383 | moss
3384 | most
3385 | mostly
3386 | motel
3387 | moth
3388 | mother
3389 | mother's
3390 | mothers
3391 | motioning
3392 | motivates
3393 | motor
3394 | motorists
3395 | motorists'
3396 | mount
3397 | mountain
3398 | mountainside
3399 | mounting
3400 | mournfully
3401 | mouse
3402 | mouth
3403 | mouthful
3404 | move
3405 | moved
3406 | movement
3407 | moves
3408 | movie
3409 | movies
3410 | moving
3411 | mr
3412 | mrs
3413 | much
3414 | mucus
3415 | muddleheaded
3416 | muddy
3417 | mudwagon
3418 | muffled
3419 | mugs
3420 | multiple
3421 | murals
3422 | murder
3423 | murderer
3424 | murky
3425 | murmured
3426 | muscle
3427 | muscles
3428 | muscular
3429 | museum
3430 | museums
3431 | music
3432 | musical
3433 | musicians
3434 | muskrat
3435 | must
3436 | mustache
3437 | mustard
3438 | mutineer
3439 | my
3440 | myopia
3441 | myself
3442 | mysterious
3443 | mystery
3444 | nagging
3445 | nailed
3446 | nails
3447 | naive
3448 | naked
3449 | name
3450 | named
3451 | names
3452 | nan's
3453 | nancy's
3454 | narrow
3455 | narrower
3456 | nasty
3457 | nathan
3458 | national
3459 | natural
3460 | naturally
3461 | nature
3462 | navigate
3463 | near
3464 | nearby
3465 | nearer
3466 | nearest
3467 | nearing
3468 | nearly
3469 | neat
3470 | necessarily
3471 | necessary
3472 | necessitates
3473 | necessity
3474 | neck
3475 | necklace
3476 | nectar
3477 | need
3478 | needed
3479 | needle
3480 | needlepoint
3481 | needless
3482 | needs
3483 | neglect
3484 | negligent
3485 | negligible
3486 | negotiations
3487 | neither
3488 | neoclassic
3489 | nerves
3490 | nested
3491 | nevada
3492 | nevada's
3493 | never
3494 | nevertheless
3495 | new
3496 | news
3497 | newspaper
3498 | next
3499 | nice
3500 | nicely
3501 | night
3502 | nightly
3503 | nightmares
3504 | nights
3505 | nihilistic
3506 | nine
3507 | nip
3508 | no
3509 | nobody
3510 | nobody's
3511 | nodded
3512 | noise
3513 | noisy
3514 | non
3515 | none
3516 | nonprofit
3517 | nonsense
3518 | nonsystematic
3519 | nor
3520 | nora
3521 | nora's
3522 | normal
3523 | normally
3524 | norms
3525 | north
3526 | northeast
3527 | northern
3528 | northerners
3529 | norwegian
3530 | nose
3531 | not
3532 | note
3533 | noted
3534 | notes
3535 | noteworthy
3536 | nothin
3537 | nothing
3538 | notice
3539 | notices
3540 | notoriety
3541 | novel
3542 | novelists
3543 | novelty
3544 | now
3545 | nowadays
3546 | nowhere
3547 | nuclear
3548 | nucleus
3549 | numb
3550 | number
3551 | numbering
3552 | numbness
3553 | numerous
3554 | nurses'
3555 | nut
3556 | nutrients
3557 | nutrition
3558 | nuts
3559 | nymphomaniacs
3560 | o'
3561 | o'clock
3562 | oak
3563 | oasis
3564 | oatmeal
3565 | oats
3566 | obey
3567 | obeying
3568 | object
3569 | objective
3570 | objectives
3571 | objects
3572 | observance
3573 | observe
3574 | observers
3575 | obsession
3576 | obsessions
3577 | obsolescent
3578 | obstacles
3579 | obtain
3580 | obtained
3581 | obtaining
3582 | obverse
3583 | obvious
3584 | obviously
3585 | occasionally
3586 | occupied
3587 | occur
3588 | occurred
3589 | occurs
3590 | ocean
3591 | ocean's
3592 | oceanographic
3593 | octillion
3594 | odd
3595 | odds
3596 | odor
3597 | of
3598 | off
3599 | offensive
3600 | offer
3601 | offered
3602 | offering
3603 | office
3604 | officer
3605 | officers
3606 | offices
3607 | official
3608 | officials
3609 | often
3610 | ogress
3611 | oh
3612 | oil
3613 | oils
3614 | oily
3615 | ointment
3616 | okay
3617 | old
3618 | older
3619 | oldsters
3620 | ole
3621 | olive
3622 | omitted
3623 | omitting
3624 | on
3625 | once
3626 | one
3627 | one's
3628 | ones
3629 | onion
3630 | only
3631 | onto
3632 | oozed
3633 | opaque
3634 | open
3635 | opened
3636 | opening
3637 | opens
3638 | opera
3639 | operated
3640 | operates
3641 | operation
3642 | opinions
3643 | opium
3644 | opportunity
3645 | opposing
3646 | opposite
3647 | oppressive
3648 | optical
3649 | optimal
3650 | optimism
3651 | or
3652 | orange
3653 | oratorical
3654 | orchestra
3655 | order
3656 | ordering
3657 | orders
3658 | organism
3659 | organist
3660 | organizations
3661 | oriental
3662 | oriented
3663 | origin
3664 | original
3665 | originally
3666 | originals
3667 | orthodontic
3668 | orthodontist
3669 | other
3670 | others
3671 | otherwise
3672 | otto's
3673 | ought
3674 | our
3675 | ourselves
3676 | out
3677 | outage
3678 | outcast
3679 | outcome
3680 | outdoors
3681 | outer
3682 | outfielders
3683 | outfit
3684 | outgrew
3685 | outgrow
3686 | outlaws
3687 | outlook
3688 | outpost
3689 | outputs
3690 | outset
3691 | outside
3692 | outstanding
3693 | outward
3694 | oval
3695 | over
3696 | overalls
3697 | overboard
3698 | overcame
3699 | overcharged
3700 | overdue
3701 | overeating
3702 | overflowed
3703 | overhangs
3704 | overhead
3705 | overlap
3706 | overlapping
3707 | overloaded
3708 | overlooked
3709 | overly
3710 | overnight
3711 | overnighters
3712 | overplayed
3713 | overprotection
3714 | overriding
3715 | oversized
3716 | overtake
3717 | overthrow
3718 | overweight
3719 | overwhelm
3720 | overwhelmed
3721 | overwritten
3722 | own
3723 | owner
3724 | owns
3725 | oyster
3726 | oysters
3727 | pa
3728 | pace
3729 | pack
3730 | package
3731 | packing
3732 | padlock
3733 | paid
3734 | pail
3735 | pain
3736 | paintings
3737 | pair
3738 | pairs
3739 | pale
3740 | palm
3741 | palpably
3742 | pam
3743 | pamphlets
3744 | pan
3745 | panelization
3746 | panic
3747 | pansies
3748 | papaya
3749 | paper
3750 | papered
3751 | paperweight
3752 | paprika
3753 | parades
3754 | paragraph
3755 | parallel
3756 | paralysis
3757 | paramagnetic
3758 | paranoid
3759 | pardon
3760 | parental
3761 | parenthood
3762 | park
3763 | parking
3764 | parrots
3765 | part
3766 | parted
3767 | participant
3768 | participants
3769 | participate
3770 | participates
3771 | particular
3772 | particularly
3773 | parties
3774 | partly
3775 | partner
3776 | parts
3777 | pass
3778 | passed
3779 | passing
3780 | passions
3781 | passive
3782 | past
3783 | paste
3784 | pastime
3785 | pasture
3786 | path
3787 | pathetic
3788 | pathological
3789 | patient
3790 | patient's
3791 | patiently
3792 | patrons
3793 | patsy
3794 | pattered
3795 | pattern
3796 | patterns
3797 | pause
3798 | paused
3799 | paw
3800 | pay
3801 | payments
3802 | pays
3803 | peace
3804 | peacefully
3805 | peach
3806 | peaches
3807 | peanut
3808 | pearls
3809 | peas
3810 | peck
3811 | peculiar
3812 | pedestal
3813 | peeling
3814 | peered
3815 | penalty
3816 | pendulum
3817 | penetrated
3818 | penguins
3819 | penicillin
3820 | pension
3821 | people
3822 | pepper
3823 | peppered
3824 | per
3825 | perception
3826 | perennial
3827 | perfect
3828 | perfectly
3829 | performance
3830 | performances
3831 | performers
3832 | perfume
3833 | perhaps
3834 | perils
3835 | period
3836 | periodical
3837 | periodically
3838 | periods
3839 | permanent
3840 | permit
3841 | perpendicular
3842 | persistently
3843 | persisting
3844 | person
3845 | personal
3846 | personality
3847 | personalized
3848 | personnel
3849 | persons
3850 | persuaded
3851 | persuasively
3852 | pert
3853 | pertinent
3854 | pervasive
3855 | perverse
3856 | pessimism
3857 | pests
3858 | petticoats
3859 | petting
3860 | petty
3861 | pewter
3862 | phase
3863 | phenomenon
3864 | phil's
3865 | phone
3866 | phones
3867 | phony
3868 | phosphate
3869 | phosphates
3870 | photochemical
3871 | photographs
3872 | photos
3873 | phrase
3874 | physical
3875 | piano
3876 | pick
3877 | picked
3878 | picket
3879 | pickpocket
3880 | pickpockets
3881 | picture
3882 | pictures
3883 | pie
3884 | piece
3885 | piecemeal
3886 | pieces
3887 | pig
3888 | pigeons
3889 | pile
3890 | piled
3891 | pilgrims
3892 | pill
3893 | pills
3894 | pilots
3895 | pilots'
3896 | pine
3897 | pink
3898 | pins
3899 | pint
3900 | pinto
3901 | pioneer
3902 | piped
3903 | pistachio
3904 | pit
3905 | pitch
3906 | pitched
3907 | pitcher
3908 | pitiable
3909 | pity
3910 | pizzerias
3911 | place
3912 | placed
3913 | places
3914 | plaintiff
3915 | plan
3916 | plane
3917 | planes
3918 | planets
3919 | planned
3920 | planning
3921 | plans
3922 | plant
3923 | planted
3924 | plasters
3925 | plate
3926 | plated
3927 | platform
3928 | play
3929 | played
3930 | player
3931 | players
3932 | playin'
3933 | plays
3934 | pleasant
3935 | pleasantly
3936 | please
3937 | pleasure
3938 | pledge
3939 | plenty
3940 | plow
3941 | plumber
3942 | plunged
3943 | plymouth
3944 | plywood
3945 | pneumonia
3946 | poach
3947 | pocket
3948 | pockets
3949 | poems
3950 | poetry
3951 | poets
3952 | poignancy
3953 | point
3954 | pointing
3955 | points
3956 | poised
3957 | poison
3958 | poisoned
3959 | poisonous
3960 | poisons
3961 | policeman
3962 | policy
3963 | polished
3964 | politeness
3965 | political
3966 | politics
3967 | polyesters
3968 | pompousness
3969 | pond
3970 | pool
3971 | pools
3972 | poor
3973 | poorly
3974 | pop
3975 | populace
3976 | popular
3977 | popularity
3978 | population
3979 | porch
3980 | porcupines
3981 | pork
3982 | portable
3983 | portion
3984 | portray
3985 | portrayal
3986 | position
3987 | positive
3988 | possessed
3989 | possibilities
3990 | possibility
3991 | possible
3992 | post
3993 | postdate
3994 | postponed
3995 | potatoes
3996 | potent
3997 | pottery
3998 | poultices
3999 | poultry
4000 | pound
4001 | pouring
4002 | poverty
4003 | powder
4004 | powders
4005 | power
4006 | powered
4007 | powerful
4008 | powerfully
4009 | powers
4010 | practical
4011 | practically
4012 | practiced
4013 | practices
4014 | praises
4015 | prayed
4016 | preached
4017 | precariously
4018 | precaution
4019 | preceded
4020 | precincts
4021 | precision
4022 | predicament
4023 | predispositions
4024 | predominantly
4025 | prefers
4026 | premiums
4027 | preoccupied
4028 | preparation
4029 | prepare
4030 | prepared
4031 | preparing
4032 | preprepared
4033 | prerequisite
4034 | preschooler
4035 | prescribe
4036 | prescription
4037 | present
4038 | presented
4039 | presently
4040 | presents
4041 | preservation
4042 | preserved
4043 | preserves
4044 | president
4045 | pressure
4046 | prestige
4047 | presumably
4048 | presumed
4049 | presumes
4050 | pretend
4051 | pretty
4052 | prevent
4053 | prevented
4054 | preventing
4055 | previous
4056 | price
4057 | prices
4058 | primacy
4059 | primarily
4060 | primary
4061 | prime
4062 | primitive
4063 | primly
4064 | princes
4065 | principles
4066 | print
4067 | prints
4068 | priorities
4069 | priority
4070 | prison
4071 | prisoner
4072 | prisoners
4073 | private
4074 | privately
4075 | privations
4076 | prizes
4077 | probabilities
4078 | probably
4079 | probes
4080 | problem
4081 | problems
4082 | procaine
4083 | procedure
4084 | proceeding
4085 | proceeds
4086 | process
4087 | processed
4088 | processes
4089 | processing
4090 | produce
4091 | produced
4092 | product
4093 | production
4094 | products
4095 | profession
4096 | professional
4097 | profit
4098 | profits
4099 | program
4100 | programs
4101 | progress
4102 | progression
4103 | project
4104 | projected
4105 | projects
4106 | prominent
4107 | promote
4108 | prompted
4109 | promptly
4110 | pronoun
4111 | pronunciation
4112 | proof
4113 | proper
4114 | properly
4115 | properties
4116 | property
4117 | prophets
4118 | proposed
4119 | propriety
4120 | props
4121 | prose
4122 | prospect
4123 | prospective
4124 | protected
4125 | protection
4126 | protects
4127 | protein
4128 | protests
4129 | proud
4130 | prove
4131 | proved
4132 | proven
4133 | provide
4134 | provided
4135 | provides
4136 | provisions
4137 | provocatively
4138 | provoked
4139 | prowler
4140 | psychiatrist
4141 | psychical
4142 | psychological
4143 | psychologically
4144 | psychopath
4145 | public
4146 | publicity
4147 | published
4148 | pull
4149 | pulled
4150 | pulling
4151 | pulsing
4152 | pummeled
4153 | pumped
4154 | pumps
4155 | punch
4156 | puncturing
4157 | pungent
4158 | punish
4159 | punishes
4160 | punishment
4161 | puny
4162 | puppets
4163 | purchase
4164 | purchased
4165 | purchasers
4166 | pure
4167 | puree
4168 | purists
4169 | purple
4170 | purpose
4171 | purposeless
4172 | purposely
4173 | pursed
4174 | pursued
4175 | pursuing
4176 | push
4177 | put
4178 | puzzlement
4179 | puzzling
4180 | quackery
4181 | quality
4182 | quarrel
4183 | quarrels
4184 | quarter
4185 | quarters
4186 | queen
4187 | querulous
4188 | question
4189 | questions
4190 | quick
4191 | quickly
4192 | quieted
4193 | quietly
4194 | quince
4195 | quite
4196 | quote
4197 | rabbit
4198 | rabbits
4199 | rabies
4200 | raccoons
4201 | race
4202 | rachel's
4203 | racing
4204 | rack
4205 | racy
4206 | radar
4207 | radiated
4208 | radiation
4209 | radicalism
4210 | radio
4211 | radioactive
4212 | radioactivity
4213 | radiosterilization
4214 | rag
4215 | rags
4216 | rail
4217 | railroad
4218 | rain
4219 | raindrops
4220 | rains
4221 | raisers
4222 | raisins
4223 | raked
4224 | ralph
4225 | ramifications
4226 | ran
4227 | ranch
4228 | random
4229 | rang
4230 | range
4231 | rape
4232 | rapid
4233 | rapidly
4234 | rare
4235 | rarely
4236 | rasped
4237 | rate
4238 | rated
4239 | rates
4240 | rather
4241 | rating
4242 | rationalize
4243 | rationing
4244 | rattled
4245 | rattlesnake
4246 | raw
4247 | ray
4248 | reach
4249 | reached
4250 | reaction
4251 | read
4252 | reader
4253 | readiness
4254 | reading
4255 | reads
4256 | ready
4257 | real
4258 | realism
4259 | realistic
4260 | reality
4261 | realization
4262 | realize
4263 | realizing
4264 | really
4265 | rearrange
4266 | reason
4267 | reasonable
4268 | reasonably
4269 | reasons
4270 | reassurance
4271 | reassure
4272 | reassuring
4273 | recall
4274 | recalled
4275 | received
4276 | receiving
4277 | recent
4278 | recently
4279 | receptacle
4280 | reception
4281 | recognition
4282 | recognize
4283 | recognized
4284 | recoiled
4285 | recommendation
4286 | recommended
4287 | reconnaissance
4288 | reconsider
4289 | reconsidered
4290 | record
4291 | records
4292 | recreation
4293 | recriminations
4294 | rector
4295 | recuperating
4296 | red
4297 | redcoats
4298 | redecorating
4299 | redeposition
4300 | redheads
4301 | redoubled
4302 | reduced
4303 | reducing
4304 | reduction
4305 | redwoods
4306 | reference
4307 | referred
4308 | reflect
4309 | reflects
4310 | reflexes
4311 | reform
4312 | refrigerator
4313 | refund
4314 | refurbishing
4315 | refusal
4316 | refuse
4317 | refused
4318 | regard
4319 | regarding
4320 | regenerating
4321 | regret
4322 | regular
4323 | regulars
4324 | regulations
4325 | regulative
4326 | rehabilitation
4327 | reinforce
4328 | rejected
4329 | related
4330 | relationship
4331 | relatively
4332 | relaxed
4333 | release
4334 | released
4335 | relief
4336 | relieved
4337 | relieving
4338 | religion
4339 | relinquishing
4340 | relish
4341 | rely
4342 | remain
4343 | remained
4344 | remaining
4345 | remains
4346 | remember
4347 | remembered
4348 | remembers
4349 | remembrance
4350 | reminded
4351 | reminds
4352 | reminiscence
4353 | remote
4354 | removal
4355 | remove
4356 | rent
4357 | rented
4358 | renunciation
4359 | reorganization
4360 | repainted
4361 | repainting
4362 | repeat
4363 | repeated
4364 | repetition
4365 | replace
4366 | replaced
4367 | replenish
4368 | replied
4369 | reply
4370 | report
4371 | reported
4372 | reporters
4373 | reportorial
4374 | reports
4375 | represent
4376 | representation
4377 | represented
4378 | represents
4379 | reproduce
4380 | reptiles
4381 | repugnant
4382 | requests
4383 | required
4384 | requirements
4385 | requires
4386 | rescue
4387 | research
4388 | resemble
4389 | reserved
4390 | residential
4391 | resides
4392 | residues
4393 | resin
4394 | resistance
4395 | resolute
4396 | resolution
4397 | resolved
4398 | respect
4399 | respected
4400 | response
4401 | responsibility
4402 | responsible
4403 | responsively
4404 | rest
4405 | restricted
4406 | result
4407 | resulted
4408 | results
4409 | resumed
4410 | retaliatory
4411 | retinal
4412 | retire
4413 | retired
4414 | retirement
4415 | retires
4416 | retouching
4417 | retracted
4418 | retribution
4419 | return
4420 | reupholstering
4421 | revealed
4422 | revealing
4423 | revenge
4424 | revenues
4425 | reverberated
4426 | review
4427 | reviewers
4428 | revised
4429 | revolution
4430 | revolving
4431 | revulsion
4432 | rewarded
4433 | rewrite
4434 | rhinoceros
4435 | rhubarb
4436 | rhythm
4437 | rhythmically
4438 | ribbons
4439 | rice
4440 | rich
4441 | rickety
4442 | ride
4443 | rides
4444 | ridge
4445 | ridiculously
4446 | riding
4447 | rifle
4448 | rifleman
4449 | right
4450 | rights
4451 | rim
4452 | ringing
4453 | riot
4454 | ripe
4455 | ripped
4456 | ripping
4457 | rise
4458 | rising
4459 | risks
4460 | rites
4461 | ritual
4462 | rituals
4463 | river
4464 | riverbank
4465 | road
4466 | roadway
4467 | roam
4468 | roast
4469 | rob
4470 | robin
4471 | rock
4472 | rockets
4473 | rocky
4474 | rode
4475 | rods
4476 | roger's
4477 | role
4478 | roleplaying
4479 | roles
4480 | roll
4481 | rolled
4482 | rolls
4483 | romance
4484 | romantic
4485 | ron's
4486 | roof
4487 | roofs
4488 | rooftree
4489 | room
4490 | rooms
4491 | root
4492 | rootless
4493 | ropes
4494 | rose
4495 | roses
4496 | rosy
4497 | rough
4498 | roulette's
4499 | routine
4500 | routinely
4501 | rove
4502 | roy
4503 | royal
4504 | rubbed
4505 | rubberized
4506 | rubbish
4507 | ruffles
4508 | rug
4509 | rugs
4510 | ruins
4511 | rule
4512 | ruled
4513 | rules
4514 | rumen
4515 | run
4516 | running
4517 | runs
4518 | rural
4519 | rushing
4520 | rust
4521 | rustling
4522 | sacrifice
4523 | sacrificial
4524 | saddlebags
4525 | saddled
4526 | sadness
4527 | safari
4528 | safe
4529 | safekeeping
4530 | safer
4531 | safety
4532 | saga
4533 | sagging
4534 | said
4535 | sailboat
4536 | sailed
4537 | sailors
4538 | salad
4539 | salads
4540 | salary
4541 | sale
4542 | salesmanship
4543 | salesmen
4544 | salt
4545 | salted
4546 | salvation
4547 | same
4548 | sample
4549 | samples
4550 | sampling
4551 | sandwich
4552 | sank
4553 | sarcasm
4554 | sat
4555 | satellites
4556 | satirical
4557 | satisfaction
4558 | satisfy
4559 | saturated
4560 | saturday
4561 | sauce
4562 | sauerkraut
4563 | savagely
4564 | save
4565 | saved
4566 | saw
4567 | saws
4568 | say
4569 | saying
4570 | says
4571 | scabbard
4572 | scaffold
4573 | scalloped
4574 | scalp
4575 | scampered
4576 | scar
4577 | scared
4578 | scarf
4579 | scattered
4580 | scenery
4581 | scenes
4582 | schedule
4583 | schnooks
4584 | scholar
4585 | scholars
4586 | scholastic
4587 | school
4588 | schools
4589 | schooner
4590 | scientific
4591 | scientists
4592 | scoop
4593 | score
4594 | scored
4595 | scour
4596 | scouring
4597 | scout's
4598 | scowled
4599 | scraping
4600 | scratch
4601 | scream
4602 | screeched
4603 | screen
4604 | screw
4605 | screwdriver
4606 | sculptor
4607 | sculpture
4608 | se
4609 | sea
4610 | seam
4611 | seamstresses
4612 | sear
4613 | search
4614 | season
4615 | seasoning
4616 | seats
4617 | seattle
4618 | second
4619 | secondary
4620 | secret
4621 | section
4622 | sector
4623 | secularist
4624 | secured
4625 | security
4626 | see
4627 | seed
4628 | seeds
4629 | seeing
4630 | seeker
4631 | seekers
4632 | seeking
4633 | seem
4634 | seemed
4635 | seems
4636 | seen
4637 | seismic
4638 | seldom
4639 | selected
4640 | selecting
4641 | selection
4642 | selections
4643 | selective
4644 | self
4645 | self's
4646 | seller
4647 | semi
4648 | semidrying
4649 | senate
4650 | send
4651 | sending
4652 | senior
4653 | sense
4654 | sensibly
4655 | sensitive
4656 | sensory
4657 | sensual
4658 | sentiment
4659 | separate
4660 | sequoia
4661 | series
4662 | sermon
4663 | serpent's
4664 | serve
4665 | served
4666 | serves
4667 | service
4668 | services
4669 | sesame
4670 | set
4671 | sets
4672 | setting
4673 | settle
4674 | seven
4675 | seventh
4676 | seventy
4677 | several
4678 | severe
4679 | sew
4680 | sewers
4681 | sewing
4682 | sex
4683 | sexual
4684 | sexually
4685 | shabby
4686 | shackles
4687 | shade
4688 | shadow
4689 | shady
4690 | shaft
4691 | shag
4692 | shaken
4693 | shaker
4694 | shakers
4695 | shaky
4696 | shall
4697 | shallowness
4698 | shame
4699 | shampoo
4700 | shampooed
4701 | shape
4702 | shaped
4703 | shapes
4704 | share
4705 | sharks
4706 | sharp
4707 | shattered
4708 | shaving
4709 | shawls
4710 | shawn
4711 | she
4712 | she'd
4713 | she's
4714 | shed
4715 | sheets
4716 | sheik
4717 | sheila
4718 | shell
4719 | shellfish
4720 | shelter
4721 | sheltered
4722 | shelters
4723 | shelves
4724 | sherbet
4725 | sheriff
4726 | sheriff's
4727 | shielding
4728 | shimmered
4729 | shimmering
4730 | shimmers
4731 | ship
4732 | ship's
4733 | shipbuilding
4734 | shipmate
4735 | ships
4736 | shipshape
4737 | shirt
4738 | shirtsleeve
4739 | shivering
4740 | shock
4741 | shocked
4742 | shocking
4743 | shocks
4744 | shoelaces
4745 | shoes
4746 | shone
4747 | shook
4748 | shoot
4749 | shop
4750 | shopkeepers
4751 | shore
4752 | short
4753 | shortage
4754 | shorten
4755 | shortly
4756 | shot
4757 | should
4758 | shoulder
4759 | shouted
4760 | shove
4761 | shovels
4762 | shoving
4763 | show
4764 | showed
4765 | showering
4766 | showers
4767 | showing
4768 | shown
4769 | shows
4770 | shrapnel
4771 | shredded
4772 | shredder
4773 | shrieked
4774 | shrimp
4775 | shrinking
4776 | shrubs
4777 | shrugged
4778 | shrugs
4779 | shucks
4780 | shuddering
4781 | shuffle
4782 | shut
4783 | shutter
4784 | shy
4785 | siamese
4786 | sick
4787 | side
4788 | sides
4789 | sidewinder
4790 | sigh
4791 | sighing
4792 | sightseers
4793 | sign
4794 | signals
4795 | signed
4796 | significant
4797 | signs
4798 | silence
4799 | silent
4800 | silhouette
4801 | silky
4802 | silly
4803 | silver
4804 | silverware
4805 | simmer
4806 | simmered
4807 | simple
4808 | simpler
4809 | simplest
4810 | simply
4811 | sin
4812 | since
4813 | sincere
4814 | sincerity
4815 | sinewy
4816 | sing
4817 | singer's
4818 | single
4819 | singular
4820 | sinuous
4821 | sinus
4822 | sir
4823 | sit
4824 | site
4825 | sitting
4826 | situated
4827 | situation
4828 | situations
4829 | six
4830 | sixty
4831 | size
4832 | sized
4833 | sizzled
4834 | skating
4835 | sketched
4836 | skewers
4837 | ski
4838 | skiffs
4839 | skiing
4840 | skill
4841 | skilled
4842 | skills
4843 | skin
4844 | skinless
4845 | skirmish
4846 | skirt
4847 | skirts
4848 | sky
4849 | skywave
4850 | slammed
4851 | slanted
4852 | slapped
4853 | slash
4854 | slate
4855 | slavery
4856 | sleep
4857 | sleepily
4858 | sleeping
4859 | sleepy
4860 | sleigh
4861 | slept
4862 | slid
4863 | slightly
4864 | slip
4865 | slipped
4866 | slipping
4867 | slips
4868 | slope
4869 | slopes
4870 | sloppy
4871 | slovenliness
4872 | slow
4873 | slowed
4874 | slowly
4875 | sludge
4876 | slug
4877 | slugging
4878 | sluicing
4879 | slums
4880 | slyly
4881 | slyness
4882 | small
4883 | smash
4884 | smashed
4885 | smell
4886 | smelled
4887 | smile
4888 | smiled
4889 | smiles
4890 | smiling
4891 | smiths
4892 | smoke
4893 | smolderingly
4894 | smooth
4895 | smoothed
4896 | smothered
4897 | snake
4898 | snakes
4899 | snapper
4900 | snapping
4901 | snarled
4902 | snatched
4903 | sneezed
4904 | snips
4905 | snow
4906 | snowed
4907 | so
4908 | soak
4909 | soaked
4910 | sober
4911 | social
4912 | socialized
4913 | society
4914 | socks
4915 | soft
4916 | softly
4917 | soil
4918 | soils
4919 | solar
4920 | sold
4921 | soldiering
4922 | soldiers
4923 | solicits
4924 | solid
4925 | solidarity
4926 | solitary
4927 | solitude
4928 | solution
4929 | solve
4930 | solved
4931 | solves
4932 | some
4933 | somebody
4934 | somebody'll
4935 | somehow
4936 | someone
4937 | someplace
4938 | something
4939 | sometime
4940 | sometimes
4941 | somewhat
4942 | somewhere
4943 | son
4944 | song
4945 | songs
4946 | sonic
4947 | soon
4948 | soothe
4949 | soothed
4950 | soothingly
4951 | sophisticated
4952 | sophistication
4953 | sorcery
4954 | sordid
4955 | sorrow
4956 | sorry
4957 | sort
4958 | sought
4959 | soul
4960 | souls
4961 | sound
4962 | sounded
4963 | soup
4964 | sour
4965 | source
4966 | sources
4967 | south
4968 | southwest
4969 | soybean
4970 | soybeans
4971 | soysauce
4972 | space
4973 | spaced
4974 | spade
4975 | spades
4976 | spanish
4977 | spatial
4978 | speak
4979 | speaker
4980 | special
4981 | specialty
4982 | species
4983 | specific
4984 | spectacular
4985 | spectator
4986 | speculated
4987 | speculations
4988 | speech
4989 | spend
4990 | spending
4991 | spent
4992 | sphere
4993 | spherical
4994 | spider
4995 | spike
4996 | spilled
4997 | spinach
4998 | spirit
4999 | spirited
5000 | spirits
5001 | spiritual
5002 | spit
5003 | splashed
5004 | splendidly
5005 | splendor
5006 | splinter
5007 | splurge
5008 | splurged
5009 | spoilage
5010 | spoiled
5011 | spoke
5012 | spoken
5013 | spokes
5014 | sponges
5015 | sponsors
5016 | sport
5017 | sports
5018 | sportsmen
5019 | spot
5020 | spotted
5021 | spouted
5022 | sprained
5023 | sprang
5024 | spray
5025 | spread
5026 | spreader
5027 | spring
5028 | sprinkling
5029 | sprouted
5030 | sprouting
5031 | spun
5032 | spurious
5033 | spurs
5034 | sputniks
5035 | square
5036 | squared
5037 | squashy
5038 | squeaked
5039 | squeamishness
5040 | squeezed
5041 | squelched
5042 | stab
5043 | stable
5044 | stacked
5045 | staff
5046 | stag
5047 | stage
5048 | staggered
5049 | stake
5050 | stampede
5051 | stand
5052 | standardized
5053 | standards
5054 | standby
5055 | star
5056 | starchy
5057 | stared
5058 | start
5059 | started
5060 | startling
5061 | state
5062 | statement
5063 | states
5064 | statue
5065 | statuesque
5066 | status
5067 | statutory
5068 | stay
5069 | stayed
5070 | steam
5071 | steaming
5072 | steel
5073 | steep
5074 | stems
5075 | step
5076 | steph
5077 | stepladders
5078 | stepmother
5079 | steps
5080 | sterilization
5081 | steve
5082 | stew
5083 | stick
5084 | stiffly
5085 | still
5086 | stimulates
5087 | stimulating
5088 | stinging
5089 | stings
5090 | stirred
5091 | stirrin
5092 | stirrup
5093 | stock
5094 | stockings
5095 | stockroom
5096 | stoicism
5097 | stole
5098 | stomach
5099 | stomped
5100 | stone
5101 | stoneware
5102 | stood
5103 | stool
5104 | stoop
5105 | stop
5106 | stopped
5107 | stopping
5108 | stopwatch
5109 | store
5110 | stored
5111 | storm
5112 | storms
5113 | story
5114 | storyline
5115 | storylines
5116 | straight
5117 | straightened
5118 | straightforward
5119 | strain
5120 | strained
5121 | stranded
5122 | stranger
5123 | strategic
5124 | strategy
5125 | straw
5126 | strawberries
5127 | strawberry
5128 | stray
5129 | stream
5130 | streamed
5131 | streamlined
5132 | streams
5133 | street
5134 | streets
5135 | strength
5136 | strengthen
5137 | stress
5138 | stretched
5139 | strike
5140 | strikingly
5141 | strip
5142 | striped
5143 | stripped
5144 | strippers
5145 | strolled
5146 | strong
5147 | stronghold
5148 | strongly
5149 | struck
5150 | structural
5151 | structure
5152 | structures
5153 | struggle
5154 | struggling
5155 | stuck
5156 | students
5157 | students'
5158 | studio
5159 | study
5160 | stumping
5161 | stung
5162 | stupid
5163 | style
5164 | stylish
5165 | subdued
5166 | subgroups
5167 | subject
5168 | subjective
5169 | submarine
5170 | submit
5171 | substances
5172 | substantial
5173 | substantially
5174 | subsystems
5175 | subtitles
5176 | subtraction
5177 | suburban
5178 | suburbanites
5179 | suburbs
5180 | subway
5181 | succeeding
5182 | success
5183 | successful
5184 | successfully
5185 | successors
5186 | such
5187 | sucking
5188 | sudden
5189 | suddenly
5190 | suey
5191 | suffer
5192 | suffered
5193 | suffers
5194 | sufficiency
5195 | sufficient
5196 | sufficiently
5197 | sugar
5198 | suggestion
5199 | suicide
5200 | suit
5201 | suitable
5202 | suitably
5203 | suite
5204 | sullen
5205 | sulphur
5206 | sum
5207 | summer
5208 | summertime
5209 | sun
5210 | sunburn
5211 | sunburned
5212 | sundae
5213 | sundown
5214 | sung
5215 | sunlight
5216 | sunshine
5217 | superb
5218 | superbly
5219 | superior
5220 | superiors
5221 | supervision
5222 | supervisory
5223 | supper
5224 | suppers
5225 | supplements
5226 | supplies
5227 | supporters
5228 | supports
5229 | suppose
5230 | supreme
5231 | sure
5232 | surely
5233 | surface
5234 | surfaceness
5235 | surfaces
5236 | surfeit
5237 | surgeon
5238 | surplus
5239 | surprise
5240 | surprising
5241 | surprisingly
5242 | surrender
5243 | surrounded
5244 | survey
5245 | surveying
5246 | survival
5247 | survive
5248 | susceptible
5249 | suspect
5250 | suspiciously
5251 | swam
5252 | swarmed
5253 | swarthy
5254 | swatches
5255 | sweat
5256 | sweater
5257 | sweaters
5258 | swedish
5259 | sweet
5260 | sweetheart
5261 | sweetly
5262 | swells
5263 | swiftly
5264 | swig
5265 | swimming
5266 | swing
5267 | swirled
5268 | swiss
5269 | switched
5270 | switches
5271 | swivel
5272 | swollen
5273 | swung
5274 | symbolic
5275 | symbolism
5276 | symbolize
5277 | symbols
5278 | symmetrical
5279 | sympathetically
5280 | symposium
5281 | symptom
5282 | synagogue
5283 | synonymous
5284 | syrup
5285 | system
5286 | systems
5287 | table
5288 | tablecloths
5289 | tables
5290 | tackle
5291 | tad
5292 | tadpole
5293 | tag
5294 | tail
5295 | tailored
5296 | tails
5297 | take
5298 | taken
5299 | takes
5300 | takin'
5301 | taking
5302 | tale
5303 | talent
5304 | talk
5305 | talked
5306 | talking
5307 | tall
5308 | tallyho
5309 | tame
5310 | tan
5311 | tank
5312 | tantalizing
5313 | tape
5314 | tapes
5315 | tapestry
5316 | target
5317 | targets
5318 | task
5319 | tasks
5320 | tasteful
5321 | tastes
5322 | taut
5323 | tax
5324 | taxation
5325 | taxi
5326 | taxicab
5327 | taxpayer
5328 | tea
5329 | teach
5330 | teacher
5331 | teaching
5332 | team
5333 | tears
5334 | teased
5335 | teaspoons
5336 | technical
5337 | technique
5338 | techniques
5339 | technological
5340 | technology
5341 | teems
5342 | teeny
5343 | teeth
5344 | telephone
5345 | telephoning
5346 | tell
5347 | tellers
5348 | tells
5349 | temper
5350 | temperate
5351 | tempo
5352 | temptation
5353 | temptations
5354 | tempted
5355 | ten
5356 | tenant
5357 | tenant's
5358 | tend
5359 | tended
5360 | tenderness
5361 | tends
5362 | tensely
5363 | tension
5364 | tentacles
5365 | tenure
5366 | term
5367 | terms
5368 | terrible
5369 | terrier
5370 | terrific
5371 | terrifying
5372 | test
5373 | testicle
5374 | testimony
5375 | tests
5376 | tetanus
5377 | tethered
5378 | text
5379 | texture
5380 | than
5381 | thank
5382 | thanks
5383 | thanksgiving
5384 | that
5385 | that'll
5386 | that's
5387 | thaw
5388 | the
5389 | theaters
5390 | their
5391 | theirs
5392 | them
5393 | theme
5394 | themes
5395 | themselves
5396 | then
5397 | theocracy
5398 | theory
5399 | therapies
5400 | therapy
5401 | there
5402 | there's
5403 | thereafter
5404 | thereby
5405 | thereupon
5406 | thermal
5407 | thermometer
5408 | thermometers
5409 | thermonuclear
5410 | these
5411 | they
5412 | they'd
5413 | they'll
5414 | they're
5415 | they've
5416 | thick
5417 | thief
5418 | thighs
5419 | thimble
5420 | thin
5421 | thing
5422 | things
5423 | think
5424 | thinker
5425 | thinkin
5426 | thinking
5427 | thinks
5428 | thinner
5429 | third
5430 | thirty
5431 | this
5432 | thomas
5433 | thoroughbred
5434 | thoroughfares
5435 | thoroughly
5436 | those
5437 | thou
5438 | though
5439 | thought
5440 | thoughtless
5441 | thousand
5442 | thread
5443 | threatening
5444 | three
5445 | threw
5446 | thrill
5447 | thrived
5448 | throat
5449 | thrombosis
5450 | through
5451 | throughout
5452 | throw
5453 | thrower
5454 | thrusting
5455 | thruway
5456 | thump
5457 | thursday's
5458 | thursdays
5459 | thus
5460 | thwarted
5461 | thyroid
5462 | tidbits
5463 | tides
5464 | tie
5465 | tied
5466 | tight
5467 | tiles
5468 | tilted
5469 | tim
5470 | timber
5471 | time
5472 | timers
5473 | times
5474 | timing
5475 | tin
5476 | tinder
5477 | tinkled
5478 | tinsel
5479 | tiny
5480 | tips
5481 | tired
5482 | tissue
5483 | title
5484 | titter
5485 | to
5486 | toast
5487 | tobacco
5488 | today
5489 | today'll
5490 | today's
5491 | todd
5492 | toddler
5493 | toe
5494 | tofu
5495 | together
5496 | toilet
5497 | told
5498 | tolerated
5499 | toll
5500 | tom
5501 | tomblike
5502 | tomboy
5503 | tombstones
5504 | tomorrow
5505 | tongue
5506 | too
5507 | took
5508 | tool
5509 | tooth
5510 | toothbrush
5511 | toothpaste
5512 | top
5513 | topography
5514 | topping
5515 | tore
5516 | torn
5517 | tornados
5518 | toss
5519 | tossed
5520 | total
5521 | touch
5522 | touchdown
5523 | touched
5524 | touches
5525 | tough
5526 | tour
5527 | toward
5528 | towards
5529 | towel
5530 | town
5531 | toxic
5532 | toy
5533 | traced
5534 | track
5535 | tracks
5536 | trade
5537 | tradition
5538 | traditionalism
5539 | traffic
5540 | tragedy
5541 | tragic
5542 | trail
5543 | train
5544 | training
5545 | trait
5546 | traits
5547 | tranquilizers
5548 | transact
5549 | transcendence
5550 | transience
5551 | transit
5552 | translated
5553 | transmit
5554 | transparent
5555 | trap
5556 | trauma
5557 | travel
5558 | traveler
5559 | travelers
5560 | travelled
5561 | tray
5562 | treated
5563 | treatment
5564 | treats
5565 | tree
5566 | trees
5567 | trembled
5568 | tremor
5569 | tremulously
5570 | trend
5571 | trends
5572 | trespassing
5573 | trial
5574 | trials
5575 | tribes
5576 | trick
5577 | tried
5578 | tries
5579 | trifle
5580 | triggered
5581 | trim
5582 | trip
5583 | trips
5584 | trish
5585 | triumphant
5586 | triviality
5587 | tropical
5588 | trouble
5589 | trousers
5590 | truck
5591 | trucks
5592 | true
5593 | truism
5594 | truly
5595 | trunks
5596 | trustworthy
5597 | truth
5598 | try
5599 | trying
5600 | tsunami
5601 | tub
5602 | tube
5603 | tugboats
5604 | tumbled
5605 | tunafish
5606 | tunnels
5607 | turbulent
5608 | turmoil
5609 | turn
5610 | turned
5611 | turnpikes
5612 | turns
5613 | turpentine
5614 | turquoise
5615 | tweezers
5616 | twelfth
5617 | twelve
5618 | twenty
5619 | twice
5620 | twigged
5621 | twilight
5622 | twins
5623 | twisted
5624 | twitched
5625 | two
5626 | twofold
5627 | tycoons
5628 | type
5629 | types
5630 | typhoid
5631 | typhus
5632 | typical
5633 | typically
5634 | tyrannical
5635 | tyranny
5636 | ugly
5637 | ultrasonic
5638 | umbrella
5639 | unabashed
5640 | unanimity
5641 | unappreciated
5642 | unauthentic
5643 | unavailable
5644 | unbeatable
5645 | unbelievable
5646 | unbound
5647 | unbroken
5648 | uncertain
5649 | uncomfortable
5650 | uncommon
5651 | unconvincing
5652 | uncover
5653 | undeniably
5654 | under
5655 | underbrush
5656 | underfoot
5657 | understand
5658 | understanding
5659 | understandingly
5660 | understood
5661 | underwriting
5662 | undesirable
5663 | unduly
5664 | uneasily
5665 | uneasy
5666 | unenthusiastic
5667 | unevenly
5668 | unexpected
5669 | unexpectedly
5670 | unfenced
5671 | unfortunately
5672 | unfortunates
5673 | unhappy
5674 | unhurried
5675 | uni
5676 | uniforms
5677 | uninterrupted
5678 | union
5679 | unions
5680 | uniqueness
5681 | unit
5682 | units
5683 | unity
5684 | universality
5685 | universe
5686 | university
5687 | unjustified
5688 | unknown
5689 | unless
5690 | unlimited
5691 | unlined
5692 | unlucky
5693 | unmagnified
5694 | unnecessarily
5695 | unoccupied
5696 | unpleasant
5697 | unquestionably
5698 | unrealistic
5699 | unreasoning
5700 | unseen
5701 | unspecified
5702 | unstuck
5703 | unsuspecting
5704 | until
5705 | untimely
5706 | unusual
5707 | unusually
5708 | unwaveringly
5709 | up
5710 | upbeat
5711 | upbringing
5712 | updating
5713 | upgrade
5714 | uplift
5715 | upmanship
5716 | upon
5717 | upper
5718 | ups
5719 | upside
5720 | upstairs
5721 | upward
5722 | urchins
5723 | uremia
5724 | urethane
5725 | urge
5726 | urged
5727 | urgent
5728 | urges
5729 | urging
5730 | us
5731 | usages
5732 | use
5733 | used
5734 | useful
5735 | useless
5736 | uses
5737 | using
5738 | usual
5739 | usually
5740 | utilizing
5741 | utmost
5742 | utopianism
5743 | utopians
5744 | utter
5745 | vacant
5746 | vacation
5747 | vacuum
5748 | vagabond
5749 | vaguely
5750 | vain
5751 | valiant
5752 | validated
5753 | validity
5754 | valley
5755 | valleys
5756 | valuables
5757 | value
5758 | values
5759 | vanilla
5760 | vanished
5761 | vanishing
5762 | vanquished
5763 | vapor
5764 | vaporization
5765 | variable
5766 | variety
5767 | various
5768 | vascular
5769 | vases
5770 | vaudeville
5771 | vault
5772 | vaulting
5773 | veer
5774 | veered
5775 | vegetable
5776 | vegetables
5777 | vehicles
5778 | velocities
5779 | velocity
5780 | vending
5781 | ventures
5782 | verb
5783 | verbal
5784 | verbalize
5785 | vermouth
5786 | verse
5787 | verses
5788 | vertebral
5789 | vertigo
5790 | very
5791 | veterans'
5792 | veterinarian
5793 | vices
5794 | victim
5795 | victims
5796 | victor
5797 | vietnamese
5798 | view
5799 | viewpoint
5800 | views
5801 | vigilance
5802 | vigorous
5803 | village
5804 | villains
5805 | violates
5806 | violence
5807 | violent
5808 | violently
5809 | violin
5810 | virtually
5811 | virtue
5812 | virtues
5813 | virtuous
5814 | virus
5815 | visage
5816 | viscosity
5817 | visibly
5818 | vision
5819 | visit
5820 | visiting
5821 | visitor
5822 | visitors
5823 | visual
5824 | visually
5825 | vital
5826 | vitality
5827 | vitamin
5828 | vivid
5829 | vividly
5830 | vocabulary
5831 | vocational
5832 | vodka
5833 | voice
5834 | voltages
5835 | volume
5836 | volumes
5837 | volunteered
5838 | volunteers
5839 | votes
5840 | voyage
5841 | wadded
5842 | wage
5843 | wagon
5844 | wagons
5845 | wait
5846 | waited
5847 | waiting
5848 | wake
5849 | waking
5850 | walk
5851 | walked
5852 | walking
5853 | wall
5854 | walls
5855 | wandered
5856 | wanna
5857 | want
5858 | wanted
5859 | wants
5860 | war
5861 | ward
5862 | wardrobe
5863 | warfare
5864 | warlike
5865 | warm
5866 | warmish
5867 | warmongering
5868 | warmth
5869 | warn
5870 | warningly
5871 | warping
5872 | warrior
5873 | was
5874 | wash
5875 | washer
5876 | washing
5877 | washington
5878 | wasn't
5879 | wasp
5880 | waste
5881 | watch
5882 | watched
5883 | watches
5884 | water
5885 | waters
5886 | wave
5887 | waves
5888 | wax
5889 | waxing
5890 | waxy
5891 | way
5892 | ways
5893 | we
5894 | we'd
5895 | we'll
5896 | we're
5897 | we've
5898 | weakens
5899 | weakness
5900 | wealth
5901 | wealthy
5902 | weapon
5903 | wear
5904 | weary
5905 | weather
5906 | weatherproof
5907 | weatherstrip
5908 | weave
5909 | web
5910 | webbed
5911 | wedded
5912 | wedding
5913 | week
5914 | weekday
5915 | weekend
5916 | weeks
5917 | weeping
5918 | welcome
5919 | welcomed
5920 | welfare
5921 | well
5922 | went
5923 | were
5924 | weren't
5925 | westchester
5926 | wet
5927 | what
5928 | what're
5929 | what's
5930 | whatever
5931 | whatsoever
5932 | wheat
5933 | wheel
5934 | wheels
5935 | when
5936 | whenever
5937 | where
5938 | where're
5939 | wherever
5940 | whether
5941 | which
5942 | while
5943 | whimsical
5944 | whining
5945 | whip
5946 | whiplashes
5947 | whipped
5948 | whipsawed
5949 | whirling
5950 | whiskey
5951 | whisper
5952 | whispered
5953 | whistling
5954 | white
5955 | whizzing
5956 | who
5957 | whoever
5958 | whole
5959 | wholesome
5960 | whoppers
5961 | whorls
5962 | whosoever
5963 | why
5964 | wick
5965 | wide
5966 | widely
5967 | wider
5968 | widow
5969 | width
5970 | widths
5971 | wieners
5972 | wife
5973 | wild
5974 | wildly
5975 | will
5976 | willow
5977 | willowy
5978 | win
5979 | window
5980 | windowpanes
5981 | windows
5982 | winds
5983 | windshield
5984 | wine
5985 | wingman
5986 | winking
5987 | winter
5988 | wipe
5989 | wire
5990 | wired
5991 | wisdom
5992 | wise
5993 | wised
5994 | wish
5995 | wishful
5996 | witches
5997 | with
5998 | withdraw
5999 | within
6000 | without
6001 | witnesses
6002 | witnessing
6003 | wobble
6004 | wobbled
6005 | woe
6006 | woman
6007 | women
6008 | won't
6009 | wondered
6010 | wonderful
6011 | wonderfully
6012 | wonders
6013 | wood
6014 | wooded
6015 | wooden
6016 | woodland
6017 | woods
6018 | wool
6019 | woolen
6020 | woolly
6021 | wops
6022 | word
6023 | words
6024 | wore
6025 | work
6026 | workable
6027 | worked
6028 | worker
6029 | workers
6030 | working
6031 | works
6032 | world
6033 | world's
6034 | worm
6035 | worn
6036 | worried
6037 | worries
6038 | worry
6039 | worse
6040 | worship
6041 | worth
6042 | would
6043 | would've
6044 | wound
6045 | wounds
6046 | wrap
6047 | wraps
6048 | wrinkled
6049 | wrist
6050 | writers
6051 | writes
6052 | written
6053 | wrong
6054 | wrote
6055 | x
6056 | y'all
6057 | ya
6058 | yacht
6059 | yard
6060 | yards
6061 | yarn
6062 | yeah
6063 | year
6064 | year's
6065 | yearly
6066 | years
6067 | yell
6068 | yelled
6069 | yellow
6070 | yes
6071 | yesterday
6072 | yet
6073 | yield
6074 | yielded
6075 | yogurt
6076 | york
6077 | you
6078 | you'd
6079 | you'll
6080 | you're
6081 | you've
6082 | young
6083 | youngsters
6084 | your
6085 | yours
6086 | yourself
6087 | youth
6088 | zagged
6089 | zeal
6090 | zealous
6091 | zebras
6092 | zig
6093 | zinnias
6094 | zip
6095 | zippers
6096 | zircons
6097 | zombie
6098 | zones
6099 | zoning
6100 | zoo
6101 | zoologist
6102 | zoos
6103 |
--------------------------------------------------------------------------------
/volumes/model/.gitignore:
--------------------------------------------------------------------------------
1 | # General Numpy data
2 | *.npy
3 |
4 | # Weights (Keras)
5 | *.h5
6 |
--------------------------------------------------------------------------------
/volumes/model/phonemes2text/.gitignore:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dtjchen/spoken-command-processor/26ab05596e27f6ead8be6f2d06c3a7c199b8ea1a/volumes/model/phonemes2text/.gitignore
--------------------------------------------------------------------------------
/volumes/model/phonemes2text/phonemes2text_arch.json:
--------------------------------------------------------------------------------
1 | {"class_name": "Sequential", "config": [{"class_name": "Dense", "config": {"W_constraint": null, "b_constraint": null, "name": "dense_1", "output_dim": 1500, "activity_regularizer": null, "trainable": true, "init": "glorot_uniform", "input_dtype": "float32", "input_dim": 30, "b_regularizer": null, "W_regularizer": null, "activation": "linear", "batch_input_shape": [null, 30]}}, {"class_name": "Activation", "config": {"activation": "sigmoid", "trainable": true, "name": "activation_1"}}, {"class_name": "Dropout", "config": {"p": 0.25, "trainable": true, "name": "dropout_1"}}, {"class_name": "Dense", "config": {"W_constraint": null, "b_constraint": null, "name": "dense_2", "activity_regularizer": null, "trainable": true, "init": "glorot_uniform", "input_dim": null, "b_regularizer": null, "W_regularizer": null, "activation": "linear", "output_dim": 6102}}, {"class_name": "Activation", "config": {"activation": "sigmoid", "trainable": true, "name": "activation_2"}}, {"class_name": "Dropout", "config": {"p": 0.4, "trainable": true, "name": "dropout_2"}}, {"class_name": "Dense", "config": {"W_constraint": null, "b_constraint": null, "name": "dense_3", "activity_regularizer": null, "trainable": true, "init": "glorot_uniform", "input_dim": null, "b_regularizer": null, "W_regularizer": null, "activation": "linear", "output_dim": 6102}}, {"class_name": "Activation", "config": {"activation": "softmax", "trainable": true, "name": "activation_3"}}]}
--------------------------------------------------------------------------------
/volumes/model/speech2phonemes/.gitignore:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dtjchen/spoken-command-processor/26ab05596e27f6ead8be6f2d06c3a7c199b8ea1a/volumes/model/speech2phonemes/.gitignore
--------------------------------------------------------------------------------
/volumes/model/speech2phonemes/speech2phonemes_arch.json:
--------------------------------------------------------------------------------
1 | {"class_name": "Sequential", "config": [{"class_name": "Dense", "config": {"W_constraint": null, "b_constraint": null, "name": "dense_1", "output_dim": 256, "activity_regularizer": null, "trainable": true, "init": "glorot_uniform", "input_dtype": "float32", "input_dim": 39, "b_regularizer": null, "W_regularizer": null, "activation": "linear", "batch_input_shape": [null, 39]}}, {"class_name": "Activation", "config": {"activation": "sigmoid", "trainable": true, "name": "activation_1"}}, {"class_name": "Dropout", "config": {"p": 0.25, "trainable": true, "name": "dropout_1"}}, {"class_name": "Dense", "config": {"W_constraint": null, "b_constraint": null, "name": "dense_2", "activity_regularizer": null, "trainable": true, "init": "glorot_uniform", "input_dim": null, "b_regularizer": null, "W_regularizer": null, "activation": "linear", "output_dim": 59}}, {"class_name": "Activation", "config": {"activation": "softmax", "trainable": true, "name": "activation_2"}}]}
--------------------------------------------------------------------------------