├── .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 | Backpropagation 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 | Optimizers 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 | MLP 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 | Normal distribution 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 | Loss function 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"}}]} --------------------------------------------------------------------------------