├── .gitignore ├── .idea ├── deployment.xml └── workspace.xml ├── LICENSE.txt ├── MANIFEST.in ├── README.md ├── README.rst ├── g2p.pdf ├── g2p_en ├── __init__.py ├── checkpoint20.npz ├── expand.py ├── g2p.py └── homographs.en ├── setup.cfg └── setup.py /.gitignore: -------------------------------------------------------------------------------- 1 | *.pyc 2 | testlog 3 | __pychache__ 4 | .pypirc 5 | dist 6 | build 7 | -------------------------------------------------------------------------------- /.idea/deployment.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 15 | -------------------------------------------------------------------------------- /.idea/workspace.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 67 | 68 | 69 | 70 | sys 71 | word_tok 72 | pos_tag 73 | print 74 | 75 | 76 | 77 | 79 | 80 | 91 | 92 | 93 | 94 | 95 | true 96 | DEFINITION_ORDER 97 | 98 | 99 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 125 | 126 | 129 | 130 | 131 | 132 | 135 | 136 | 139 | 140 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | 170 | 171 | 172 | 173 | 192 | 193 | 194 | 195 | 196 | 197 | 198 | 199 | 200 | 201 | 202 | 203 | 204 | 205 | 206 | 207 | 208 | 209 | 222 | 223 | 236 | 237 | 255 | 256 | 268 | 269 | project 270 | 271 | 272 | 273 | 274 | 275 | 276 | 277 | 278 | 279 | 280 | 281 | 282 | 283 | 284 | 285 | 304 | 305 | 320 | 321 | 322 | 324 | 325 | 326 | 327 | 1526441288919 328 | 332 | 333 | 334 | 335 | 336 | 337 | 338 | 339 | 340 | 341 | 342 | 343 | 344 | 345 | 346 | 347 | 348 | 349 | 350 | 351 | 352 | 353 | 354 | 355 | 356 | 357 | 358 | 359 | 360 | 361 | 363 | 364 | 366 | 367 | 368 | 369 | 370 | 371 | 372 | 373 | 374 | 375 | 376 | 377 | 378 | 379 | 380 | 381 | 382 | 383 | 384 | 385 | 386 | 387 | 388 | 389 | 390 | 391 | 392 | 393 | 394 | 395 | 396 | 397 | 398 | 399 | 400 | 401 | 402 | 403 | 404 | 405 | 406 | 407 | 408 | 409 | 410 | 411 | 412 | 413 | 414 | 415 | 416 | 417 | 418 | 419 | 420 | 421 | 422 | 423 | 424 | 425 | 426 | 427 | 428 | 429 | 430 | 431 | 432 | 433 | 434 | 435 | 436 | 437 | 438 | 439 | 440 | 441 | 442 | 443 | 444 | 445 | 446 | 447 | 448 | 449 | 450 | 451 | 452 | 453 | 454 | 455 | 456 | 457 | 458 | 459 | 460 | 461 | 462 | 463 | 464 | 465 | 466 | 467 | 468 | 469 | 470 | 471 | 472 | 473 | 474 | 475 | 476 | 477 | 478 | 479 | 480 | 481 | 482 | 483 | 484 | 485 | 486 | 487 | 488 | 489 | 490 | 491 | 492 | 493 | 494 | 495 | 496 | 497 | 498 | 499 | 500 | 501 | 502 | 503 | 504 | 505 | 506 | 507 | 508 | 509 | 510 | 511 | 512 | 513 | 514 | 515 | 516 | 517 | 518 | -------------------------------------------------------------------------------- /LICENSE.txt: -------------------------------------------------------------------------------- 1 | Apache License 2 | Version 2.0, January 2004 3 | http://www.apache.org/licenses/ 4 | 5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 6 | 7 | 1. Definitions. 8 | 9 | "License" shall mean the terms and conditions for use, reproduction, 10 | and distribution as defined by Sections 1 through 9 of this document. 11 | 12 | "Licensor" shall mean the copyright owner or entity authorized by 13 | the copyright owner that is granting the License. 14 | 15 | "Legal Entity" shall mean the union of the acting entity and all 16 | other entities that control, are controlled by, or are under common 17 | control with that entity. For the purposes of this definition, 18 | "control" means (i) the power, direct or indirect, to cause the 19 | direction or management of such entity, whether by contract or 20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 21 | outstanding shares, or (iii) beneficial ownership of such entity. 22 | 23 | "You" (or "Your") shall mean an individual or Legal Entity 24 | exercising permissions granted by this License. 25 | 26 | "Source" form shall mean the preferred form for making modifications, 27 | including but not limited to software source code, documentation 28 | source, and configuration files. 29 | 30 | "Object" form shall mean any form resulting from mechanical 31 | transformation or translation of a Source form, including but 32 | not limited to compiled object code, generated documentation, 33 | and conversions to other media types. 34 | 35 | "Work" shall mean the work of authorship, whether in Source or 36 | Object form, made available under the License, as indicated by a 37 | copyright notice that is included in or attached to the work 38 | (an example is provided in the Appendix below). 39 | 40 | "Derivative Works" shall mean any work, whether in Source or Object 41 | form, that is based on (or derived from) the Work and for which the 42 | editorial revisions, annotations, elaborations, or other modifications 43 | represent, as a whole, an original work of authorship. For the purposes 44 | of this License, Derivative Works shall not include works that remain 45 | separable from, or merely link (or bind by name) to the interfaces of, 46 | the Work and Derivative Works thereof. 47 | 48 | "Contribution" shall mean any work of authorship, including 49 | the original version of the Work and any modifications or additions 50 | to that Work or Derivative Works thereof, that is intentionally 51 | submitted to Licensor for inclusion in the Work by the copyright owner 52 | or by an individual or Legal Entity authorized to submit on behalf of 53 | the copyright owner. For the purposes of this definition, "submitted" 54 | means any form of electronic, verbal, or written communication sent 55 | to the Licensor or its representatives, including but not limited to 56 | communication on electronic mailing lists, source code control systems, 57 | and issue tracking systems that are managed by, or on behalf of, the 58 | Licensor for the purpose of discussing and improving the Work, but 59 | excluding communication that is conspicuously marked or otherwise 60 | designated in writing by the copyright owner as "Not a Contribution." 61 | 62 | "Contributor" shall mean Licensor and any individual or Legal Entity 63 | on behalf of whom a Contribution has been received by Licensor and 64 | subsequently incorporated within the Work. 65 | 66 | 2. Grant of Copyright License. Subject to the terms and conditions of 67 | this License, each Contributor hereby grants to You a perpetual, 68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 69 | copyright license to reproduce, prepare Derivative Works of, 70 | publicly display, publicly perform, sublicense, and distribute the 71 | Work and such Derivative Works in Source or Object form. 72 | 73 | 3. Grant of Patent License. Subject to the terms and conditions of 74 | this License, each Contributor hereby grants to You a perpetual, 75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 76 | (except as stated in this section) patent license to make, have made, 77 | use, offer to sell, sell, import, and otherwise transfer the Work, 78 | where such license applies only to those patent claims licensable 79 | by such Contributor that are necessarily infringed by their 80 | Contribution(s) alone or by combination of their Contribution(s) 81 | with the Work to which such Contribution(s) was submitted. If You 82 | institute patent litigation against any entity (including a 83 | cross-claim or counterclaim in a lawsuit) alleging that the Work 84 | or a Contribution incorporated within the Work constitutes direct 85 | or contributory patent infringement, then any patent licenses 86 | granted to You under this License for that Work shall terminate 87 | as of the date such litigation is filed. 88 | 89 | 4. Redistribution. You may reproduce and distribute copies of the 90 | Work or Derivative Works thereof in any medium, with or without 91 | modifications, and in Source or Object form, provided that You 92 | meet the following conditions: 93 | 94 | (a) You must give any other recipients of the Work or 95 | Derivative Works a copy of this License; and 96 | 97 | (b) You must cause any modified files to carry prominent notices 98 | stating that You changed the files; and 99 | 100 | (c) You must retain, in the Source form of any Derivative Works 101 | that You distribute, all copyright, patent, trademark, and 102 | attribution notices from the Source form of the Work, 103 | excluding those notices that do not pertain to any part of 104 | the Derivative Works; and 105 | 106 | (d) If the Work includes a "NOTICE" text file as part of its 107 | distribution, then any Derivative Works that You distribute must 108 | include a readable copy of the attribution notices contained 109 | within such NOTICE file, excluding those notices that do not 110 | pertain to any part of the Derivative Works, in at least one 111 | of the following places: within a NOTICE text file distributed 112 | as part of the Derivative Works; within the Source form or 113 | documentation, if provided along with the Derivative Works; or, 114 | within a display generated by the Derivative Works, if and 115 | wherever such third-party notices normally appear. The contents 116 | of the NOTICE file are for informational purposes only and 117 | do not modify the License. You may add Your own attribution 118 | notices within Derivative Works that You distribute, alongside 119 | or as an addendum to the NOTICE text from the Work, provided 120 | that such additional attribution notices cannot be construed 121 | as modifying the License. 122 | 123 | You may add Your own copyright statement to Your modifications and 124 | may provide additional or different license terms and conditions 125 | for use, reproduction, or distribution of Your modifications, or 126 | for any such Derivative Works as a whole, provided Your use, 127 | reproduction, and distribution of the Work otherwise complies with 128 | the conditions stated in this License. 129 | 130 | 5. Submission of Contributions. Unless You explicitly state otherwise, 131 | any Contribution intentionally submitted for inclusion in the Work 132 | by You to the Licensor shall be under the terms and conditions of 133 | this License, without any additional terms or conditions. 134 | Notwithstanding the above, nothing herein shall supersede or modify 135 | the terms of any separate license agreement you may have executed 136 | with Licensor regarding such Contributions. 137 | 138 | 6. Trademarks. This License does not grant permission to use the trade 139 | names, trademarks, service marks, or product names of the Licensor, 140 | except as required for reasonable and customary use in describing the 141 | origin of the Work and reproducing the content of the NOTICE file. 142 | 143 | 7. Disclaimer of Warranty. Unless required by applicable law or 144 | agreed to in writing, Licensor provides the Work (and each 145 | Contributor provides its Contributions) on an "AS IS" BASIS, 146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 147 | implied, including, without limitation, any warranties or conditions 148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 149 | PARTICULAR PURPOSE. You are solely responsible for determining the 150 | appropriateness of using or redistributing the Work and assume any 151 | risks associated with Your exercise of permissions under this License. 152 | 153 | 8. Limitation of Liability. In no event and under no legal theory, 154 | whether in tort (including negligence), contract, or otherwise, 155 | unless required by applicable law (such as deliberate and grossly 156 | negligent acts) or agreed to in writing, shall any Contributor be 157 | liable to You for damages, including any direct, indirect, special, 158 | incidental, or consequential damages of any character arising as a 159 | result of this License or out of the use or inability to use the 160 | Work (including but not limited to damages for loss of goodwill, 161 | work stoppage, computer failure or malfunction, or any and all 162 | other commercial damages or losses), even if such Contributor 163 | has been advised of the possibility of such damages. 164 | 165 | 9. Accepting Warranty or Additional Liability. While redistributing 166 | the Work or Derivative Works thereof, You may choose to offer, 167 | and charge a fee for, acceptance of support, warranty, indemnity, 168 | or other liability obligations and/or rights consistent with this 169 | License. However, in accepting such obligations, You may act only 170 | on Your own behalf and on Your sole responsibility, not on behalf 171 | of any other Contributor, and only if You agree to indemnify, 172 | defend, and hold each Contributor harmless for any liability 173 | incurred by, or claims asserted against, such Contributor by reason 174 | of your accepting any such warranty or additional liability. 175 | 176 | END OF TERMS AND CONDITIONS 177 | 178 | APPENDIX: How to apply the Apache License to your work. 179 | 180 | To apply the Apache License to your work, attach the following 181 | boilerplate notice, with the fields enclosed by brackets "{}" 182 | replaced with your own identifying information. (Don't include 183 | the brackets!) The text should be enclosed in the appropriate 184 | comment syntax for the file format. We also recommend that a 185 | file or class name and description of purpose be included on the 186 | same "printed page" as the copyright notice for easier 187 | identification within third-party archives. 188 | 189 | Copyright {yyyy} {name of copyright owner} 190 | 191 | Licensed under the Apache License, Version 2.0 (the "License"); 192 | you may not use this file except in compliance with the License. 193 | You may obtain a copy of the License at 194 | 195 | http://www.apache.org/licenses/LICENSE-2.0 196 | 197 | Unless required by applicable law or agreed to in writing, software 198 | distributed under the License is distributed on an "AS IS" BASIS, 199 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 200 | See the License for the specific language governing permissions and 201 | limitations under the License. 202 | -------------------------------------------------------------------------------- /MANIFEST.in: -------------------------------------------------------------------------------- 1 | include g2p_en/homographs.en 2 | include g2p_en/checkpoint20.npz -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | [![image](https://img.shields.io/pypi/v/g2p-en.svg)](https://pypi.org/project/g2p-en/) 2 | [![image](https://img.shields.io/pypi/l/g2p-en.svg)](https://pypi.org/project/g2p-en/) 3 | 4 | # g2pE: A Simple Python Module for English Grapheme To Phoneme Conversion 5 | 6 | * [v.2.0] We removed TensorFlow from the dependencies. After all, it changes its APIs quite often, and we don't expect you to have a GPU. Instead, NumPy is used for inference. 7 | 8 | This module is designed to convert English graphemes (spelling) to phonemes (pronunciation). 9 | It is considered essential in several tasks such as speech synthesis. 10 | Unlike many languages like Spanish or German where pronunciation of a word can be inferred from its spelling, 11 | English words are often far from people's expectations. 12 | Therefore, it will be the best idea to consult a dictionary if we want to know the pronunciation of some word. 13 | However, there are at least two tentative issues in this approach. 14 | First, you can't disambiguate the pronunciation of homographs, words which have multiple pronunciations. (See `a` below.) 15 | Second, you can't check if the word is not in the dictionary. (See `b` below.) 16 | 17 | * a. I refuse to collect the refuse around here. (rɪ|fju:z as verb vs. |refju:s as noun) 18 | * b. I am an activationist. (activationist: newly coined word which means `n. A person who designs and implements programs of treatment or therapy that use recreation and activities to help people whose functional abilities are affected by illness or disability.` 19 | from [WORD SPY](https://wordspy.com/index.php?word=activationist]) 20 | 21 | For the first homograph issue, fortunately many homographs can be disambiguated using their part-of-speech, if not all. 22 | When it comes to the words not in the dictionary, however, we should make our best guess using our knowledge. 23 | In this project, we employ a deep learning seq2seq framework based on TensorFlow. 24 | 25 | ## Algorithm 26 | 27 | 1. Spells out arabic numbers and some currency symbols. (e.g. $200 -> two hundred dollars) (This is borrowed from [Keith Ito's code](https://github.com/keithito/tacotron/blob/master/text/numbers.py)) 28 | 2. Attempts to retrieve the correct pronunciation for heteronyms based on their POS) 29 | 3. Looks up [The CMU Pronouncing Dictionary](http://www.speech.cs.cmu.edu/cgi-bin/cmudict) for non-homographs. 30 | 4. For OOVs, we predict their pronunciations using our neural net model. 31 | 32 | ## Environment 33 | 34 | * python 3.x 35 | 36 | ## Dependencies 37 | 38 | * numpy >= 1.13.1 39 | * nltk >= 3.2.4 40 | * python -m nltk.downloader "averaged_perceptron_tagger" "cmudict" 41 | * inflect >= 0.3.1 42 | * Distance >= 0.1.3 43 | 44 | ## Installation 45 | 46 | pip install g2p_en 47 | OR 48 | 49 | python setup.py install 50 | 51 | nltk package will be automatically downloaded at your first run. 52 | 53 | 54 | ## Usage 55 | 56 | from g2p_en import G2p 57 | 58 | texts = ["I have $250 in my pocket.", # number -> spell-out 59 | "popular pets, e.g. cats and dogs", # e.g. -> for example 60 | "I refuse to collect the refuse around here.", # homograph 61 | "I'm an activationist."] # newly coined word 62 | g2p = G2p() 63 | for text in texts: 64 | out = g2p(text) 65 | print(out) 66 | >>> ['AY1', ' ', 'HH', 'AE1', 'V', ' ', 'T', 'UW1', ' ', 'HH', 'AH1', 'N', 'D', 'R', 'AH0', 'D', ' ', 'F', 'IH1', 'F', 'T', 'IY0', ' ', 'D', 'AA1', 'L', 'ER0', 'Z', ' ', 'IH0', 'N', ' ', 'M', 'AY1', ' ', 'P', 'AA1', 'K', 'AH0', 'T', ' ', '.'] 67 | >>> ['P', 'AA1', 'P', 'Y', 'AH0', 'L', 'ER0', ' ', 'P', 'EH1', 'T', 'S', ' ', ',', ' ', 'F', 'AO1', 'R', ' ', 'IH0', 'G', 'Z', 'AE1', 'M', 'P', 'AH0', 'L', ' ', 'K', 'AE1', 'T', 'S', ' ', 'AH0', 'N', 'D', ' ', 'D', 'AA1', 'G', 'Z'] 68 | >>> ['AY1', ' ', 'R', 'IH0', 'F', 'Y', 'UW1', 'Z', ' ', 'T', 'UW1', ' ', 'K', 'AH0', 'L', 'EH1', 'K', 'T', ' ', 'DH', 'AH0', ' ', 'R', 'EH1', 'F', 'Y', 'UW2', 'Z', ' ', 'ER0', 'AW1', 'N', 'D', ' ', 'HH', 'IY1', 'R', ' ', '.'] 69 | >>> ['AY1', ' ', 'AH0', 'M', ' ', 'AE1', 'N', ' ', 'AE2', 'K', 'T', 'IH0', 'V', 'EY1', 'SH', 'AH0', 'N', 'IH0', 'S', 'T', ' ', '.'] 70 | 71 | ## References 72 | 73 | If you use this code for research, please cite: 74 | 75 | ``` 76 | @misc{g2pE2019, 77 | author = {Park, Kyubyong & Kim, Jongseok}, 78 | title = {g2pE}, 79 | year = {2019}, 80 | publisher = {GitHub}, 81 | journal = {GitHub repository}, 82 | howpublished = {\url{https://github.com/Kyubyong/g2p}} 83 | } 84 | ``` 85 | 86 | ## Cited in 87 | * [Learning pronunciation from a foreign language in speech synthesis networks](https://arxiv.org/abs/1811.09364) 88 | 89 | May, 2018. 90 | 91 | Kyubyong Park & [Jongseok Kim](https://github.com/ozmig77) 92 | -------------------------------------------------------------------------------- /README.rst: -------------------------------------------------------------------------------- 1 | g2p\_en: A Simple Python Module for English Grapheme To Phoneme Conversion 2 | ========================================================================== 3 | 4 | [Update] * We removed TensorFlow from the dependencies. After all, it changes its APIs quite often, and we don't expect you to have a GPU. Instead, NumPy is used for inference. 5 | 6 | This module is designed to convert English graphemes (spelling) to 7 | phonemes (pronunciation). It is considered essential in several tasks 8 | such as speech synthesis. Unlike many languages like Spanish or German 9 | where pronunciation of a word can be inferred from its spelling, English 10 | words are often far from people's expectations. Therefore, it will be 11 | the best idea to consult a dictionary if we want to know the 12 | pronunciation of some word. However, there are at least two tentative 13 | issues in this approach. First, you can't disambiguate the pronunciation 14 | of homographs, words which have multiple pronunciations. (See ``a`` 15 | below.) Second, you can't check if the word is not in the dictionary. 16 | (See ``b`` below.) 17 | 18 | - 19 | 20 |   \a. I refuse to collect the refuse around here. (rɪ\|fju:z as verb vs. \|refju:s as noun) 21 | 22 | - 23 | \b. I am an activationist. (activationist: newly coined word which means ``n. A person who designs and implements programs of treatment or therapy that use recreation and activities to help people whose functional abilities are affected by illness or disability.`` from `WORD SPY `__ 24 | 25 | For the first homograph issue, fortunately many homographs can be 26 | disambiguated using their part-of-speech, if not all. When it comes to 27 | the words not in the dictionary, however, we should make our best guess 28 | using our knowledge. In this project, we employ a deep learning seq2seq 29 | framework based on TensorFlow. 30 | 31 | Algorithm 32 | --------- 33 | 34 | 1. Spells out arabic numbers and some currency symbols. (e.g. $200 -> 35 | two hundred dollars) (This is borrowed from `Keith Ito's 36 | code `__) 37 | 2. Attempts to retrieve the correct pronunciation for homographs based 38 | on their POS) 39 | 3. Looks up `The CMU Pronouncing 40 | Dictionary `__ for 41 | non-homographs. 42 | 4. For OOVs, we predict their pronunciations using our neural net model. 43 | 44 | Environment 45 | ----------- 46 | 47 | - python 3.x 48 | 49 | Dependencies 50 | ------------ 51 | 52 | - numpy >= 1.13.1 53 | - nltk >= 3.2.4 54 | - python -m nltk.downloader "averaged\_perceptron\_tagger" "cmudict" 55 | - inflect >= 0.3.1 56 | - Distance >= 0.1.3 57 | 58 | Installation 59 | ------------ 60 | 61 | :: 62 | 63 | pip install g2p_en 64 | 65 | OR 66 | 67 | :: 68 | 69 | python setup.py install 70 | 71 | nltk package will be automatically downloaded at your first run. 72 | 73 | 74 | Usage 75 | ----- 76 | 77 | :: 78 | 79 | from g2p_en import G2p 80 | 81 | texts = ["I have $250 in my pocket.", # number -> spell-out 82 | "popular pets, e.g. cats and dogs", # e.g. -> for example 83 | "I refuse to collect the refuse around here.", # homograph 84 | "I'm an activationist."] # newly coined word 85 | g2p = G2p() 86 | for text in texts: 87 | out = g2p(text) 88 | print(out) 89 | >>> ['AY1', ' ', 'HH', 'AE1', 'V', ' ', 'T', 'UW1', ' ', 'HH', 'AH1', 'N', 'D', 'R', 'AH0', 'D', ' ', 'F', 'IH1', 'F', 'T', 'IY0', ' ', 'D', 'AA1', 'L', 'ER0', 'Z', ' ', 'IH0', 'N', ' ', 'M', 'AY1', ' ', 'P', 'AA1', 'K', 'AH0', 'T', ' ', '.'] 90 | >>> ['P', 'AA1', 'P', 'Y', 'AH0', 'L', 'ER0', ' ', 'P', 'EH1', 'T', 'S', ' ', ',', ' ', 'F', 'AO1', 'R', ' ', 'IH0', 'G', 'Z', 'AE1', 'M', 'P', 'AH0', 'L', ' ', 'K', 'AE1', 'T', 'S', ' ', 'AH0', 'N', 'D', ' ', 'D', 'AA1', 'G', 'Z'] 91 | >>> ['AY1', ' ', 'R', 'IH0', 'F', 'Y', 'UW1', 'Z', ' ', 'T', 'UW1', ' ', 'K', 'AH0', 'L', 'EH1', 'K', 'T', ' ', 'DH', 'AH0', ' ', 'R', 'EH1', 'F', 'Y', 'UW2', 'Z', ' ', 'ER0', 'AW1', 'N', 'D', ' ', 'HH', 'IY1', 'R', ' ', '.'] 92 | >>> ['AY1', ' ', 'AH0', 'M', ' ', 'AE1', 'N', ' ', 'AE2', 'K', 'T', 'IH0', 'V', 'EY1', 'SH', 'AH0', 'N', 'IH0', 'S', 'T', ' ', '.'] 93 | 94 | 95 | May, 2018. 96 | 97 | Kyubyong Park & `Jongseok Kim `__ 98 | -------------------------------------------------------------------------------- /g2p.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kyubyong/g2p/c6439c274c42b9724a7fee1dc07ca6a4c68a0538/g2p.pdf -------------------------------------------------------------------------------- /g2p_en/__init__.py: -------------------------------------------------------------------------------- 1 | from .g2p import G2p 2 | -------------------------------------------------------------------------------- /g2p_en/checkpoint20.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kyubyong/g2p/c6439c274c42b9724a7fee1dc07ca6a4c68a0538/g2p_en/checkpoint20.npz -------------------------------------------------------------------------------- /g2p_en/expand.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | #/usr/bin/python2 3 | ''' 4 | Borrowed 5 | from https://github.com/keithito/tacotron/blob/master/text/numbers.py 6 | By kyubyong park. kbpark.linguist@gmail.com. 7 | https://www.github.com/kyubyong/g2p 8 | ''' 9 | from __future__ import print_function 10 | import inflect 11 | import re 12 | 13 | 14 | 15 | _inflect = inflect.engine() 16 | _comma_number_re = re.compile(r'([0-9][0-9\,]+[0-9])') 17 | _decimal_number_re = re.compile(r'([0-9]+\.[0-9]+)') 18 | _pounds_re = re.compile(r'£([0-9\,]*[0-9]+)') 19 | _dollars_re = re.compile(r'\$([0-9\.\,]*[0-9]+)') 20 | _ordinal_re = re.compile(r'[0-9]+(st|nd|rd|th)') 21 | _number_re = re.compile(r'[0-9]+') 22 | 23 | 24 | def _remove_commas(m): 25 | return m.group(1).replace(',', '') 26 | 27 | 28 | def _expand_decimal_point(m): 29 | return m.group(1).replace('.', ' point ') 30 | 31 | 32 | def _expand_dollars(m): 33 | match = m.group(1) 34 | parts = match.split('.') 35 | if len(parts) > 2: 36 | return match + ' dollars' # Unexpected format 37 | dollars = int(parts[0]) if parts[0] else 0 38 | cents = int(parts[1]) if len(parts) > 1 and parts[1] else 0 39 | if dollars and cents: 40 | dollar_unit = 'dollar' if dollars == 1 else 'dollars' 41 | cent_unit = 'cent' if cents == 1 else 'cents' 42 | return '%s %s, %s %s' % (dollars, dollar_unit, cents, cent_unit) 43 | elif dollars: 44 | dollar_unit = 'dollar' if dollars == 1 else 'dollars' 45 | return '%s %s' % (dollars, dollar_unit) 46 | elif cents: 47 | cent_unit = 'cent' if cents == 1 else 'cents' 48 | return '%s %s' % (cents, cent_unit) 49 | else: 50 | return 'zero dollars' 51 | 52 | 53 | def _expand_ordinal(m): 54 | return _inflect.number_to_words(m.group(0)) 55 | 56 | 57 | def _expand_number(m): 58 | num = int(m.group(0)) 59 | if num > 1000 and num < 3000: 60 | if num == 2000: 61 | return 'two thousand' 62 | elif num > 2000 and num < 2010: 63 | return 'two thousand ' + _inflect.number_to_words(num % 100) 64 | elif num % 100 == 0: 65 | return _inflect.number_to_words(num // 100) + ' hundred' 66 | else: 67 | return _inflect.number_to_words(num, andword='', zero='oh', group=2).replace(', ', ' ') 68 | else: 69 | return _inflect.number_to_words(num, andword='') 70 | 71 | 72 | def normalize_numbers(text): 73 | text = re.sub(_comma_number_re, _remove_commas, text) 74 | text = re.sub(_pounds_re, r'\1 pounds', text) 75 | text = re.sub(_dollars_re, _expand_dollars, text) 76 | text = re.sub(_decimal_number_re, _expand_decimal_point, text) 77 | text = re.sub(_ordinal_re, _expand_ordinal, text) 78 | text = re.sub(_number_re, _expand_number, text) 79 | return text 80 | -------------------------------------------------------------------------------- /g2p_en/g2p.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # /usr/bin/python 3 | ''' 4 | By kyubyong park(kbpark.linguist@gmail.com) and Jongseok Kim(https://github.com/ozmig77) 5 | https://www.github.com/kyubyong/g2p 6 | ''' 7 | from nltk import pos_tag 8 | from nltk.corpus import cmudict 9 | import nltk 10 | from nltk.tokenize import TweetTokenizer 11 | word_tokenize = TweetTokenizer().tokenize 12 | import numpy as np 13 | import codecs 14 | import re 15 | import os 16 | import unicodedata 17 | from builtins import str as unicode 18 | from .expand import normalize_numbers 19 | 20 | try: 21 | nltk.data.find('taggers/averaged_perceptron_tagger.zip') 22 | except LookupError: 23 | nltk.download('averaged_perceptron_tagger') 24 | try: 25 | nltk.data.find('corpora/cmudict.zip') 26 | except LookupError: 27 | nltk.download('cmudict') 28 | 29 | dirname = os.path.dirname(__file__) 30 | 31 | def construct_homograph_dictionary(): 32 | f = os.path.join(dirname,'homographs.en') 33 | homograph2features = dict() 34 | for line in codecs.open(f, 'r', 'utf8').read().splitlines(): 35 | if line.startswith("#"): continue # comment 36 | headword, pron1, pron2, pos1 = line.strip().split("|") 37 | homograph2features[headword.lower()] = (pron1.split(), pron2.split(), pos1) 38 | return homograph2features 39 | 40 | # def segment(text): 41 | # ''' 42 | # Splits text into `tokens`. 43 | # :param text: A string. 44 | # :return: A list of tokens (string). 45 | # ''' 46 | # print(text) 47 | # text = re.sub('([.,?!]( |$))', r' \1', text) 48 | # print(text) 49 | # return text.split() 50 | 51 | class G2p(object): 52 | def __init__(self): 53 | super().__init__() 54 | self.graphemes = ["", "", ""] + list("abcdefghijklmnopqrstuvwxyz") 55 | self.phonemes = ["", "", "", ""] + ['AA0', 'AA1', 'AA2', 'AE0', 'AE1', 'AE2', 'AH0', 'AH1', 'AH2', 'AO0', 56 | 'AO1', 'AO2', 'AW0', 'AW1', 'AW2', 'AY0', 'AY1', 'AY2', 'B', 'CH', 'D', 'DH', 57 | 'EH0', 'EH1', 'EH2', 'ER0', 'ER1', 'ER2', 'EY0', 'EY1', 58 | 'EY2', 'F', 'G', 'HH', 59 | 'IH0', 'IH1', 'IH2', 'IY0', 'IY1', 'IY2', 'JH', 'K', 'L', 60 | 'M', 'N', 'NG', 'OW0', 'OW1', 61 | 'OW2', 'OY0', 'OY1', 'OY2', 'P', 'R', 'S', 'SH', 'T', 'TH', 62 | 'UH0', 'UH1', 'UH2', 'UW', 63 | 'UW0', 'UW1', 'UW2', 'V', 'W', 'Y', 'Z', 'ZH'] 64 | self.g2idx = {g: idx for idx, g in enumerate(self.graphemes)} 65 | self.idx2g = {idx: g for idx, g in enumerate(self.graphemes)} 66 | 67 | self.p2idx = {p: idx for idx, p in enumerate(self.phonemes)} 68 | self.idx2p = {idx: p for idx, p in enumerate(self.phonemes)} 69 | 70 | self.cmu = cmudict.dict() 71 | self.load_variables() 72 | self.homograph2features = construct_homograph_dictionary() 73 | 74 | def load_variables(self): 75 | self.variables = np.load(os.path.join(dirname,'checkpoint20.npz')) 76 | self.enc_emb = self.variables["enc_emb"] # (29, 64). (len(graphemes), emb) 77 | self.enc_w_ih = self.variables["enc_w_ih"] # (3*128, 64) 78 | self.enc_w_hh = self.variables["enc_w_hh"] # (3*128, 128) 79 | self.enc_b_ih = self.variables["enc_b_ih"] # (3*128,) 80 | self.enc_b_hh = self.variables["enc_b_hh"] # (3*128,) 81 | 82 | self.dec_emb = self.variables["dec_emb"] # (74, 64). (len(phonemes), emb) 83 | self.dec_w_ih = self.variables["dec_w_ih"] # (3*128, 64) 84 | self.dec_w_hh = self.variables["dec_w_hh"] # (3*128, 128) 85 | self.dec_b_ih = self.variables["dec_b_ih"] # (3*128,) 86 | self.dec_b_hh = self.variables["dec_b_hh"] # (3*128,) 87 | self.fc_w = self.variables["fc_w"] # (74, 128) 88 | self.fc_b = self.variables["fc_b"] # (74,) 89 | 90 | def sigmoid(self, x): 91 | return 1 / (1 + np.exp(-x)) 92 | 93 | def grucell(self, x, h, w_ih, w_hh, b_ih, b_hh): 94 | rzn_ih = np.matmul(x, w_ih.T) + b_ih 95 | rzn_hh = np.matmul(h, w_hh.T) + b_hh 96 | 97 | rz_ih, n_ih = rzn_ih[:, :rzn_ih.shape[-1] * 2 // 3], rzn_ih[:, rzn_ih.shape[-1] * 2 // 3:] 98 | rz_hh, n_hh = rzn_hh[:, :rzn_hh.shape[-1] * 2 // 3], rzn_hh[:, rzn_hh.shape[-1] * 2 // 3:] 99 | 100 | rz = self.sigmoid(rz_ih + rz_hh) 101 | r, z = np.split(rz, 2, -1) 102 | 103 | n = np.tanh(n_ih + r * n_hh) 104 | h = (1 - z) * n + z * h 105 | 106 | return h 107 | 108 | def gru(self, x, steps, w_ih, w_hh, b_ih, b_hh, h0=None): 109 | if h0 is None: 110 | h0 = np.zeros((x.shape[0], w_hh.shape[1]), np.float32) 111 | h = h0 # initial hidden state 112 | outputs = np.zeros((x.shape[0], steps, w_hh.shape[1]), np.float32) 113 | for t in range(steps): 114 | h = self.grucell(x[:, t, :], h, w_ih, w_hh, b_ih, b_hh) # (b, h) 115 | outputs[:, t, ::] = h 116 | return outputs 117 | 118 | def encode(self, word): 119 | chars = list(word) + [""] 120 | x = [self.g2idx.get(char, self.g2idx[""]) for char in chars] 121 | x = np.take(self.enc_emb, np.expand_dims(x, 0), axis=0) 122 | 123 | return x 124 | 125 | def predict(self, word): 126 | # encoder 127 | enc = self.encode(word) 128 | enc = self.gru(enc, len(word) + 1, self.enc_w_ih, self.enc_w_hh, 129 | self.enc_b_ih, self.enc_b_hh, h0=np.zeros((1, self.enc_w_hh.shape[-1]), np.float32)) 130 | last_hidden = enc[:, -1, :] 131 | 132 | # decoder 133 | dec = np.take(self.dec_emb, [2], axis=0) # 2: 134 | h = last_hidden 135 | 136 | preds = [] 137 | for i in range(20): 138 | h = self.grucell(dec, h, self.dec_w_ih, self.dec_w_hh, self.dec_b_ih, self.dec_b_hh) # (b, h) 139 | logits = np.matmul(h, self.fc_w.T) + self.fc_b 140 | pred = logits.argmax() 141 | if pred == 3: break # 3: 142 | preds.append(pred) 143 | dec = np.take(self.dec_emb, [pred], axis=0) 144 | 145 | preds = [self.idx2p.get(idx, "") for idx in preds] 146 | return preds 147 | 148 | def __call__(self, text): 149 | # preprocessing 150 | text = unicode(text) 151 | text = normalize_numbers(text) 152 | text = ''.join(char for char in unicodedata.normalize('NFD', text) 153 | if unicodedata.category(char) != 'Mn') # Strip accents 154 | text = text.lower() 155 | text = re.sub("[^ a-z'.,?!\-]", "", text) 156 | text = text.replace("i.e.", "that is") 157 | text = text.replace("e.g.", "for example") 158 | 159 | # tokenization 160 | words = word_tokenize(text) 161 | tokens = pos_tag(words) # tuples of (word, tag) 162 | 163 | # steps 164 | prons = [] 165 | for word, pos in tokens: 166 | if re.search("[a-z]", word) is None: 167 | pron = [word] 168 | 169 | elif word in self.homograph2features: # Check homograph 170 | pron1, pron2, pos1 = self.homograph2features[word] 171 | if pos.startswith(pos1): 172 | pron = pron1 173 | else: 174 | pron = pron2 175 | elif word in self.cmu: # lookup CMU dict 176 | pron = self.cmu[word][0] 177 | else: # predict for oov 178 | pron = self.predict(word) 179 | 180 | prons.extend(pron) 181 | prons.extend([" "]) 182 | 183 | return prons[:-1] 184 | 185 | if __name__ == '__main__': 186 | texts = ["I have $250 in my pocket.", # number -> spell-out 187 | "popular pets, e.g. cats and dogs", # e.g. -> for example 188 | "I refuse to collect the refuse around here.", # homograph 189 | "I'm an activationist."] # newly coined word 190 | g2p = G2p() 191 | for text in texts: 192 | out = g2p(text) 193 | print(out) 194 | 195 | -------------------------------------------------------------------------------- /g2p_en/homographs.en: -------------------------------------------------------------------------------- 1 | #This is based on http://www minpairs talktalk net/graph html 2 | #Each line is formatted as follows: 3 | #HEADWORD|PRONUNCIATION1|PRONUNCIATION2|POS 4 | #HEADWORD should have PRONUNCIATION1 only if it's part-of-speech is POS 5 | #Otherwise PRONUNCIATION2 is applied 6 | #May, 2018 7 | #Kyubyong Park 8 | #https://github|com/kyubyong/g2p 9 | ABSENT|AH1 B S AE1 N T|AE1 B S AH0 N T|V 10 | ABSTRACT|AE0 B S T R AE1 K T|AE1 B S T R AE2 K T|V 11 | ABSTRACTS|AE0 B S T R AE1 K T S|AE1 B S T R AE0 K T S|V 12 | ABUSE|AH0 B Y UW1 Z|AH0 B Y UW1 S|V 13 | ABUSES|AH0 B Y UW1 Z IH0 Z|AH0 B Y UW1 S IH0 Z|V 14 | ACCENT|AH0 K S EH1 N T|AE1 K S EH2 N T|V 15 | ACCENTS|AE1 K S EH0 N T S|AE1 K S EH0 N T S|V 16 | ADDICT|AH0 D IH1 K T|AE1 D IH2 K T|V 17 | ADDICTS|AH0 D IH1 K T S|AE1 D IH2 K T S|V 18 | ADVOCATE|AE1 D V AH0 K EY2 T|AE1 D V AH0 K AH0 T|V 19 | ADVOCATES|AE1 D V AH0 K EY2 T S|AE1 D V AH0 K AH0 T S|V 20 | AFFECT|AH0 F EH1 K T|AE1 F EH0 K T|V 21 | AFFECTS|AH0 F EH1 K T S|AE1 F EH0 K T S|V 22 | AFFIX|AH0 F IH1 K S|AE1 F IH0 K S|V 23 | AFFIXES|AH0 F IH1 K S IH0 Z|AE1 F IH0 K S IH0 Z|V 24 | AGGLOMERATE|AH0 G L AA1 M ER0 EY2 T|AH0 G L AA1 M ER0 AH0 T|V 25 | AGGREGATE|AE1 G R AH0 G EY0 T|AE1 G R AH0 G AH0 T|V 26 | AGGREGATES|AE1 G R AH0 G EY2 T S|AE1 G R AH0 G IH0 T S|V 27 | ALLIES|AH0 L AY1 Z|AE1 L AY0 Z|V 28 | ALLOY|AH0 L OY1|AE1 L OY2|V 29 | ALLOYS|AH0 L OY1 Z|AE1 L OY2 Z|V 30 | ALLY|AH0 L AY1|AE1 L AY0|V 31 | ALTERNATE|AO1 L T ER0 N EY2 T|AO0 L T ER1 N AH0 T|V 32 | ANALYSES|AH0 N AE1 L IH0 S IY2 Z|AE1 N AH0 L AY0 Z IH2 Z|V 33 | ANIMATE|AE1 N AH0 M EY2 T|AE1 N AH0 M AH0 T|V 34 | ANNEX|AH0 N EH1 K S|AE1 N EH2 K S|V 35 | ANNEXES|AH0 N EH1 K S IH0 Z|AE1 N EH2 K S IH0 Z|V 36 | APPROPRIATE|AH0 P R OW1 P R IY0 EY2 T|AH0 P R OW1 P R IY0 AH0 T|V 37 | APPROXIMATE|AH0 P R AA1 K S AH0 M EY2 T|AH0 P R AA1 K S AH0 M AH0 T|V 38 | ARTICULATE|AA0 R T IH1 K Y AH0 L AH0 T|AA0 R T IH1 K Y AH0 L EY2 T|V 39 | ASPIRATE|AE1 S P ER0 EY2 T|AE1 S P ER0 AH0 T|V 40 | ASPIRATES|AE1 S P ER0 EY2 T S|AE1 S P ER0 AH0 T S|V 41 | ASSOCIATE|AH0 S OW1 S IY0 EY2 T|AH0 S OW1 S IY0 AH0 T|V 42 | ASSOCIATES|AH0 S OW1 S IY0 EY2 T S|AH0 S OW1 S IY0 AH0 T S|V 43 | ATTRIBUTE|AH0 T R IH1 B Y UW2 T|AE1 T R IH0 B Y UW0 T|V 44 | ATTRIBUTES|AH0 T R IH1 B Y UW2 T S|AE1 T R IH0 B Y UW0 T S|V 45 | BATHS|B AE1 TH S|B AE1 DH Z|V 46 | BLESSED|B L EH1 S IH0 D|B L EH1 S T|V 47 | CERTIFICATE|S ER0 T IH1 F IH0 K AH0 T|S ER0 T IH1 F IH0 K EY2 T|V 48 | CERTIFICATES|S ER0 T IH1 F IH0 K EY2 T S|S ER0 T IH1 F IH0 K AH0 T S|V 49 | CLOSE|K L OW1 Z|K L OW1 S|V 50 | CLOSER|K L OW1 Z ER0|K L OW1 S ER0|N 51 | CLOSES|K L OW1 Z IH0 Z|K L OW1 S IH0 Z|V 52 | COLLECT|K AH0 L EH1 K T|K AA1 L EH0 K T|V 53 | COLLECTS|K AH0 L EH1 K T S|K AA1 L EH0 K T S|V 54 | COMBAT|K AH0 M B AE1 T|K AA1 M B AE0 T|V 55 | COMBATS|K AH0 M B AE1 T S|K AH1 M B AE0 T S|V 56 | COMBINE|K AH0 M B AY1 N|K AA1 M B AY0 N|V 57 | COMMUNE|K AH0 M Y UW1 N|K AA1 M Y UW0 N|V 58 | COMMUNES|K AH0 M Y UW1 N Z|K AA1 M Y UW0 N Z|V 59 | COMPACT|K AH0 M P AE1 K T|K AA1 M P AE0 K T|V 60 | COMPACTS|K AH0 M P AE1 K T S|K AA1 M P AE0 K T S|V 61 | COMPLEX|K AH0 M P L EH1 K S| K AA1 M P L EH0 K S|ADJ 62 | COMPLIMENT|K AA1 M P L AH0 M EH0 N T|K AA1 M P L AH0 M AH0 N T|V 63 | COMPLIMENTS|K AA1 M P L AH0 M EH0 N T S|K AA1 M P L AH0 M AH0 N T S|V 64 | COMPOUND|K AH0 M P AW1 N D|K AA1 M P AW0 N D|V 65 | COMPOUNDS|K AH0 M P AW1 N D Z|K AA1 M P AW0 N D Z|V 66 | COMPRESS|K AH0 M P R EH1 S|K AA1 M P R EH0 S|V 67 | COMPRESSES|K AH0 M P R EH1 S IH0 Z|K AA1 M P R EH0 S AH0 Z|V 68 | CONCERT|K AH0 N S ER1 T|K AA1 N S ER0 T|V 69 | CONCERTS|K AH0 N S ER1 T S|K AA1 N S ER0 T S|V 70 | CONDUCT|K AA0 N D AH1 K T|K AA1 N D AH0 K T|V 71 | CONFEDERATE|K AH0 N F EH1 D ER0 EY2 T|K AH0 N F EH1 D ER0 AH0 T|V 72 | CONFEDERATES|K AH0 N F EH1 D ER0 EY2 T S|K AH0 N F EH1 D ER0 AH0 T S|V 73 | CONFINES|K AH0 N F AY1 N Z|K AA1 N F AY2 N Z|V 74 | CONFLICT|K AH0 N F L IH1 K T|K AA1 N F L IH0 K T|V 75 | CONFLICTS|K AH0 N F L IH1 K T S|K AA1 N F L IH0 K T S|V 76 | CONGLOMERATE|K AH0 N G L AA1 M ER0 EY2 T|K AH0 N G L AA1 M ER0 AH0 T|V 77 | CONGLOMERATES|K AH0 N G L AA1 M ER0 EY2 T S|K AH0 N G L AA1 M ER0 AH0 T S|V 78 | CONSCRIPT|K AH0 N S K R IH1 P T|K AA1 N S K R IH0 P T|V 79 | CONSCRIPTS|K AH0 N S K R IH1 P T S|K AA1 N S K R IH0 P T S|V 80 | CONSOLE|K AH0 N S OW1 L|K AA1 N S OW0 L|V 81 | CONSOLES|K AH0 N S OW1 L Z|K AA1 N S OW0 L Z|V 82 | CONSORT|K AH0 N S AO1 R T|K AA1 N S AO0 R T|V 83 | CONSTRUCT|K AH0 N S T R AH1 K T|K AA1 N S T R AH0 K T|V 84 | CONSTRUCTS|K AH0 N S T R AH1 K T S|K AA1 N S T R AH0 K T S|V 85 | CONSUMMATE|K AA1 N S AH0 M EY2 T|K AA0 N S AH1 M AH0 T|V 86 | CONTENT|K AA1 N T EH0 N T|K AH0 N T EH1 N T|N 87 | CONTENTS|K AH0 N T EH1 N T S|K AA1 N T EH0 N T S|V 88 | CONTEST|K AH0 N T EH1 S T|K AA1 N T EH0 S T|V 89 | CONTESTS|K AH0 N T EH1 S T S|K AA1 N T EH0 S T S|V 90 | CONTRACT|K AH0 N T R AE1 K T|K AA1 N T R AE2 K T|V 91 | CONTRACTS|K AH0 N T R AE1 K T S|K AA1 N T R AE2 K T S|V 92 | CONTRAST|K AH0 N T R AE1 S T|K AA1 N T R AE0 S T|V 93 | CONTRASTS|K AH0 N T R AE1 S T S|K AA1 N T R AE0 S T S|V 94 | CONVERSE|K AH0 N V ER1 S|K AA1 N V ER0 S|V 95 | CONVERT|K AH0 N V ER1 T|K AA1 N V ER0 T|V 96 | CONVERTS|K AH0 N V ER1 T S|K AA1 N V ER0 T S|V 97 | CONVICT|K AH0 N V IH1 K T|K AA1 N V IH0 K T|V 98 | CONVICTS|K AH0 N V IH1 K T S|K AA1 N V IH0 K T S|V 99 | COORDINATE|K OW0 AO1 R D AH0 N EY2 T|K OW0 AO1 R D AH0 N AH0 T|V 100 | COORDINATES|K OW0 AO1 R D AH0 N EY2 T S|K OW0 AO1 R D AH0 N AH0 T S|V 101 | COUNTERBALANCE|K AW1 N T ER0 B AE2 L AH0 N S|K AW2 N T ER0 B AE1 L AH0 N S|V 102 | COUNTERBALANCES|K AW2 N T ER0 B AE1 L AH0 N S IH0 Z|K AW1 N T ER0 B AE2 L AH0 N S IH0 Z|V 103 | CRABBED|K R AE1 B D|K R AE1 B IH0 D|V 104 | CROOKED|K R UH1 K T|K R UH1 K AH0 D|V 105 | CURATE|K Y UH0 R AH1 T|K Y UH1 R AH0 T|V 106 | CURSED|K ER1 S T|K ER1 S IH0 D|V 107 | DECOY|D IY0 K OY1|D IY1 K OY0|V 108 | DECOYS|D IY0 K OY1 Z|D IY1 K OY0 Z|V 109 | DECREASE|D IH0 K R IY1 S|D IY1 K R IY2 S|V 110 | DECREASES|D IH0 K R IY1 S IH0 Z|D IY1 K R IY2 S IH0 Z|V 111 | DEFECT|D IH0 F EH1 K T|D IY1 F EH0 K T|V 112 | DEFECTS|D IH0 F EH1 K T S|D IY1 F EH0 K T S|V 113 | DEGENERATE|D IH0 JH EH1 N ER0 EY2 T|D IH0 JH EH1 N ER0 AH0 T|V 114 | DEGENERATES|D IH0 JH EH1 N ER0 EY2 T S|D IH0 JH EH1 N ER0 AH0 T S|V 115 | DELEGATE|D EH1 L AH0 G EY2 T|D EH1 L AH0 G AH0 T|V 116 | DELEGATES|D EH1 L AH0 G EY2 T S|D EH1 L AH0 G AH0 T S|V 117 | DELIBERATE|D IH0 L IH1 B ER0 EY2 T|D IH0 L IH1 B ER0 AH0 T|V 118 | DESERT|D IH0 Z ER1 T|D EH1 Z ER0 T|V 119 | DESERTS|D IH0 Z ER1 T S|D EH1 Z ER0 T S|V 120 | DESOLATE|D EH1 S AH0 L EY2 T|D EH1 S AH0 L AH0 T|V 121 | DIAGNOSES|D AY1 AH0 G N OW2 Z IY0 Z|D AY2 AH0 G N OW1 S IY0 Z|V 122 | DICTATE|D IH0 K T EY1 T|D IH1 K T EY2 T|V 123 | DICTATES|D IH0 K T EY1 T S|D IH1 K T EY2 T S|V 124 | DIFFUSE|D IH0 F Y UW1 Z|D IH0 F Y UW1 S|V 125 | DIGEST|D AY0 JH EH1 S T|D AY1 JH EH0 S T|V 126 | DIGESTS|D AY2 JH EH1 S T S|D AY1 JH EH0 S T S|V 127 | DISCARD|D IH0 S K AA1 R D|D IH1 S K AA0 R D|V 128 | DISCARDS|D IH0 S K AA1 R D Z|D IH1 S K AA0 R D Z|V 129 | DISCHARGE|D IH0 S CH AA1 R JH|D IH1 S CH AA2 R JH|V 130 | DISCHARGES|D IH0 S CH AA1 R JH AH0 Z|D IH1 S CH AA2 R JH AH0 Z|V 131 | DISCOUNT|D IH0 S K AW1 N T|D IH1 S K AW0 N T|V 132 | DISCOUNTS|D IH0 S K AW1 N T S|D IH1 S K AW2 N T S|V 133 | DISCOURSE|D IH0 S K AO1 R S|D IH1 S K AO0 R S|V 134 | DISCOURSES|D IH0 S K AO1 R S IH0 Z|D IH1 S K AO0 R S IH0 Z|V 135 | DOCUMENT|D AA1 K Y UW0 M EH0 N T|D AA1 K Y AH0 M AH0 N T|V 136 | DOCUMENTS|D AA1 K Y UW0 M EH0 N T S|D AA1 K Y AH0 M AH0 N T S|V 137 | DOGGED|D AO1 G IH0 D|D AO1 G D|V 138 | DUPLICATE|D UW1 P L AH0 K EY2 T|D UW1 P L AH0 K AH0 T|V 139 | DUPLICATES|D UW1 P L AH0 K EY2 T S|D UW1 P L AH0 K AH0 T S|V 140 | EJACULATE|IH0 JH AE1 K Y UW0 L EY2 T|IH0 JH AE1 K Y UW0 L AH0 T|V 141 | EJACULATES|IH0 JH AE1 K Y UW0 L EY2 T S|IH0 JH AE1 K Y UW0 L AH0 T S|V 142 | ELABORATE|IH0 L AE1 B ER0 EY2 T|IH0 L AE1 B R AH0 T|V 143 | ENTRANCE|IH0 N T R AH1 N S|EH1 N T R AH0 N S|V 144 | ENTRANCES|IH0 N T R AH1 N S AH0 Z|EH1 N T R AH0 N S AH0 Z|V 145 | ENVELOPE|IH0 N V EH1 L AH0 P|EH1 N V AH0 L OW2 P|V 146 | ENVELOPES|IH0 N V EH1 L AH0 P S|EH1 N V AH0 L OW2 P S|V 147 | ESCORT|EH0 S K AO1 R T|EH1 S K AO0 R T|V 148 | ESCORTS|EH0 S K AO1 R T S|EH1 S K AO0 R T S|V 149 | ESSAY|EH0 S EY1|EH1 S EY2|V 150 | ESSAYS|EH0 S EY1 Z|EH1 S EY2 Z|V 151 | ESTIMATE|EH1 S T AH0 M EY2 T|EH1 S T AH0 M AH0 T|V 152 | ESTIMATES|EH1 S T AH0 M EY2 T S|EH1 S T AH0 M AH0 T S|V 153 | EXCESS|IH0 K S EH1 S|EH1 K S EH2 S|V 154 | EXCISE|EH0 K S AY1 S|EH1 K S AY0 Z|V 155 | EXCUSE|IH0 K S K Y UW1 Z|IH0 K S K Y UW1 S|V 156 | EXCUSES|IH0 K S K Y UW1 Z IH0 Z|IH0 K S K Y UW1 S IH0 Z|V 157 | EXPATRIATE|EH0 K S P EY1 T R IY0 EY2 T|EH0 K S P EY1 T R IY0 AH0 T|V 158 | EXPATRIATES|EH0 K S P EY1 T R IY0 EY2 T S|EH0 K S P EY1 T R IY0 AH0 T S|V 159 | EXPLOIT|EH1 K S P L OY2 T|EH2 K S P L OY1 T|V 160 | EXPLOITS|EH1 K S P L OY2 T S|EH2 K S P L OY1 T S|V 161 | EXPORT|IH0 K S P AO1 R T|EH1 K S P AO0 R T|V 162 | EXPORTS|IH0 K S P AO1 R T S|EH1 K S P AO0 R T S|V 163 | EXTRACT|IH0 K S T R AE1 K T|EH1 K S T R AE2 K T|V 164 | EXTRACTS|IH0 K S T R AE1 K T S|EH1 K S T R AE2 K T S|V 165 | FERMENT|F ER0 M EH1 N T|F ER1 M EH0 N T|V 166 | FERMENTS|F ER0 M EH1 N T S|F ER1 M EH0 N T S|V 167 | FRAGMENT|F R AE1 G M AH0 N T|F R AE0 G M EH1 N T|V 168 | FRAGMENTS|F R AE0 G M EH1 N T S|F R AE1 G M AH0 N T S|V 169 | FREQUENT|F R IY1 K W EH2 N T|F R IY1 K W AH0 N T|V 170 | GRADUATE|G R AE1 JH AH0 W EY2 T|G R AE1 JH AH0 W AH0 T|V 171 | GRADUATES|G R AE1 JH AH0 W EY2 T S|G R AE1 JH AH0 W AH0 T S|V 172 | HOUSE|HH AW1 Z|HH AW1 S|V 173 | IMPACT|IH2 M P AE1 K T|IH1 M P AE0 K T|V 174 | IMPACTS|IH2 M P AE1 K T S|IH1 M P AE0 K T S|V 175 | IMPLANT|IH2 M P L AE1 N T|IH1 M P L AE2 N T|V 176 | IMPLANTS|IH2 M P L AE1 N T S|IH1 M P L AE2 N T S|V 177 | IMPLEMENT|IH1 M P L AH0 M EH0 N T|IH1 M P L AH0 M AH0 N T|V 178 | IMPLEMENTS|IH1 M P L AH0 M EH0 N T S|IH1 M P L AH0 M AH0 N T S|V 179 | IMPORT|IH2 M P AO1 R T|IH1 M P AO2 R T|V 180 | IMPORTS|IH2 M P AO1 R T S|IH1 M P AO2 R T S|V 181 | IMPRESS|IH0 M P R EH1 S|IH1 M P R EH0 S|V 182 | IMPRINT|IH1 M P R IH0 N T|IH2 M P R IH1 N T|V 183 | IMPRINTS|IH2 M P R IH1 N T S|IH1 M P R IH0 N T S|V 184 | INCENSE|IH2 N S EH1 N S|IH1 N S EH2 N S|V 185 | INCLINE|IH2 N K L AY1 N|IH1 N K L AY0 N|V 186 | INCLINES|IH2 N K L AY1 N Z|IH1 N K L AY0 N Z|V 187 | INCORPORATE|IH2 N K AO1 R P ER0 EY2 T|IH2 N K AO1 R P ER0 AH0 T|V 188 | INCREASE|IH2 N K R IY1 S|IH1 N K R IY2 S|V 189 | INCREASES|IH2 N K R IY1 S IH0 Z|IH1 N K R IY2 S IH0 Z|V 190 | INDENT|IH2 N D EH1 N T|IH1 N D EH0 N T|V 191 | INDENTS|IH2 N D EH1 N T S|IH1 N D EH0 N T S|V 192 | INEBRIATE|IH2 N EH1 B R IY0 EY2 T|IH2 N EH1 B R IY0 AH0 T|V 193 | INEBRIATES|IH2 N EH1 B R IY0 EY2 T S|IH2 N EH1 B R IY0 AH0 T S|V 194 | INITIATE|IH2 N IH1 SH IY0 EY2 T|IH2 N IH1 SH IY0 AH0 T|V 195 | INITIATES|IH2 N IH1 SH IY0 EY2 T S|IH2 N IH1 SH IY0 AH0 T S|V 196 | INLAY|IH2 N L EY1|IH1 N L EY2|V 197 | INLAYS|IH2 N L EY1 Z|IH1 N L EY2 Z|V 198 | INSERT|IH2 N S ER1 T|IH1 N S ER2 T|V 199 | INSERTS|IH2 N S ER1 T S|IH1 N S ER2 T S|V 200 | INSET|IH2 N S EH1 T|IH1 N S EH2 T|V 201 | INSETS|IH2 N S EH1 T S|IH1 N S EH2 T S|V 202 | INSTINCT|IH2 N S T IH1 NG K T|IH1 N S T IH0 NG K T|V 203 | INSULT|IH2 N S AH1 L T|IH1 N S AH2 L T|V 204 | INSULTS|IH2 N S AH1 L T S|IH1 N S AH2 L T S|V 205 | INTERCHANGE|IH2 T ER0 CH EY1 N JH|IH1 N T ER0 CH EY2 N JH|V 206 | INTERCHANGES|IH2 T ER0 CH EY1 N JH IH0 Z|IH1 N T ER0 CH EY2 N JH IH0 Z|V 207 | INTERDICT|IH2 N T ER0 D IH1 K T|IH1 N T ER0 D IH2 K T|V 208 | INTERDICTS|IH2 N T ER0 D IH1 K T S|IH1 N T ER0 D IH2 K T S|V 209 | INTERN|IH0 N T ER1 N|IH1 N T ER0 N|V 210 | INTERNS|IH0 N T ER1 N Z|IH1 N T ER0 N Z|V 211 | INTIMATE|IH1 N T IH0 M EY2 T|IH1 N T AH0 M AH0 T|V 212 | INTIMATES|IH1 N T IH0 M EY2 T S|IH1 N T AH0 M AH0 T S|V 213 | INTROVERT|IH2 N T R AO0 V ER1 T|IH1 N T R AO0 V ER2 T|V 214 | INTROVERTS|IH2 N T R AO0 V ER1 T S|IH1 N T R AO0 V ER2 T S|V 215 | INVERSE|IH1 N V ER0 S|IH2 N V ER1 S|V 216 | INVITE|IH2 N V AY1 T|IH1 N V AY0 T|V 217 | INVITES|IH2 N V AY1 T S|IH1 N V AY0 T S|V 218 | JAGGED|JH AE1 G D|JH AE1 G IH0 D|V 219 | LEARNED|L ER1 N IH0 D|L ER1 N D|V 220 | LEGITIMATE|L AH0 JH IH1 T AH0 M EY2 T|L AH0 JH IH1 T AH0 M AH0 T|V 221 | MANDATE|M AE1 N D EY2 T|M AE2 N D EY1 T|V 222 | MISCONDUCT|M IH2 S K AA1 N D AH0 K T|M IH2 S K AA0 N D AH1 K T|V 223 | MISPRINT|M IH2 S P R IH1 N T|M IH1 S P R IH0 N T|V 224 | MISPRINTS|M IH2 S P R IH1 N T S|M IH1 S P R IH0 N T S|V 225 | MISUSE|M IH0 S Y UW1 S|M IH0 S Y UW1 Z|V 226 | MISUSES|M IH0 S Y UW1 Z IH0 Z|M IH0 S Y UW1 S IH0 Z|V 227 | MODERATE|M AA1 D ER0 EY2 T|M AA1 D ER0 AH0 T|V 228 | MODERATES|M AA1 D ER0 EY2 T S|M AA1 D ER0 AH0 T S|V 229 | MOUTH|M AW1 TH|M AW1 DH|V 230 | MOUTHS|M AW1 DH Z|M AW1 TH S|V 231 | OBJECT|AA1 B JH EH0 K T|AH0 B JH EH1 K T|V 232 | OBJECTS|AH0 B JH EH1 K T S|AA1 B JH EH0 K T S|V 233 | ORNAMENT|AO1 R N AH0 M EH0 N T|AO1 R N AH0 M AH0 N T|V 234 | ORNAMENTS|AO1 R N AH0 M EH0 N T S|AO1 R N AH0 M AH0 N T S|V 235 | OVERCHARGE|OW2 V ER0 CH AA1 R JH|OW1 V ER0 CH AA2 R JH|V 236 | OVERCHARGES|OW2 V ER0 CH AA1 R JH IH0 Z|OW1 V ER0 CH AA2 R JH IH0 Z|V 237 | OVERFLOW|OW2 V ER0 F L OW1|OW1 V ER0 F L OW2|V 238 | OVERFLOWS|OW2 V ER0 F L OW1 Z|OW1 V ER0 F L OW2 Z|V 239 | OVERHANG|OW2 V ER0 HH AE1 NG|OW1 V ER0 HH AE2 NG|V 240 | OVERHANGS|OW2 V ER0 HH AE1 NG Z|OW1 V ER0 HH AE2 NG Z|V 241 | OVERHAUL|OW2 V ER0 HH AO1 L|OW1 V ER0 HH AO2 L|V 242 | OVERHAULS|OW2 V ER0 HH AO1 L Z|OW1 V ER0 HH AO2 L Z|V 243 | OVERLAP|OW2 V ER0 L AE1 P|OW1 V ER0 L AE2 P|V 244 | OVERLAPS|OW2 V ER0 L AE1 P S|OW1 V ER0 L AE2 P S|V 245 | OVERLAY|OW2 V ER0 L EY1|OW1 V ER0 L EY2|V 246 | OVERLAYS|OW2 V ER0 L EY1 Z|OW1 V ER0 L EY2 Z|V 247 | OVERWORK|OW2 V ER0 W ER1 K|OW1 V ER0 W ER2 K|V 248 | PERFECT|P ER0 F EH1 K T|P ER1 F IH2 K T|V 249 | PERFUME|P ER0 F Y UW1 M|P ER1 F Y UW0 M|V 250 | PERFUMES|P ER0 F Y UW1 M Z|P ER1 F Y UW0 M Z|V 251 | PERMIT|P ER0 M IH1 T|P ER1 M IH2 T|V 252 | PERMITS|P ER0 M IH1 T S|P ER1 M IH2 T S|V 253 | PERVERT|P ER0 V ER1 T|P ER1 V ER0 T|V 254 | PERVERTS|P ER0 V ER1 T S|P ER1 V ER0 T S|V 255 | PONTIFICATE|P AA0 N T IH1 F AH0 K AH0 T|P AA0 N T IH1 F AH0 K EY2 T|V 256 | PONTIFICATES|P AA0 N T IH1 F AH0 K EY2 T S|P AA0 N T IH1 F AH0 K AH0 T S|V 257 | PRECIPITATE|P R IH0 S IH1 P IH0 T AH0 T|P R IH0 S IH1 P IH0 T EY2 T|V 258 | PREDICATE|P R EH1 D IH0 K AH0 T|P R EH1 D AH0 K EY2 T|V 259 | PREDICATES|P R EH1 D AH0 K EY2 T S|P R EH1 D IH0 K AH0 T S|V 260 | PREFIX|P R IY2 F IH1 K S|P R IY1 F IH0 K S|V 261 | PREFIXES|P R IY2 F IH1 K S IH0 JH|P R IY1 F IH0 K S IH0 JH|V 262 | PRESAGE|P R EH2 S IH1 JH|P R EH1 S IH0 JH|V 263 | PRESAGES|P R EH2 S IH1 JH IH0 JH|P R EH1 S IH0 JH IH0 JH|V 264 | PRESENT|P R IY0 Z EH1 N T|P R EH1 Z AH0 N T|V 265 | PRESENTS|P R IY0 Z EH1 N T S|P R EH1 Z AH0 N T S|V 266 | PROCEEDS|P R AH0 S IY1 D Z|P R OW1 S IY0 D Z|V 267 | PROCESS|P R AO2 S EH1 S|P R AA1 S EH2 S|V 268 | PROCESSES|P R AA1 S EH0 S AH0 Z|P R AO2 S EH1 S AH0 Z|V 269 | PROCESSING|P R AA0 S EH1 S IH0 NG|P R AA1 S EH0 S IH0 NG|V 270 | PRODUCE|P R AH0 D UW1 S|P R OW1 D UW0 S|V 271 | PROGRESS|P R AH0 G R EH1 S|P R AA1 G R EH2 S|V 272 | PROGRESSES|P R OW0 G R EH1 S AH0 Z|P R AA1 G R EH2 S AH0 Z|V 273 | PROJECT|P R AA0 JH EH1 K T|P R AA1 JH EH0 K T|V 274 | PROJECTS|P R AA0 JH EH1 K T S|P R AA1 JH EH0 K T S|V 275 | PROSPECT|P R AH2 S P EH1 K T|P R AA1 S P EH0 K T|V 276 | PROSPECTS|P R AH2 S P EH1 K T S|P R AA1 S P EH0 K T S|V 277 | PROSTRATE|P R AA0 S T R EY1 T|P R AA1 S T R EY0 T|V 278 | PROTEST|P R AH0 T EH1 S T|P R OW1 T EH2 S T|V 279 | PROTESTS|P R AH0 T EH1 S T S|P R OW1 T EH2 S T S|V 280 | PURPORT|P ER0 P AO1 R T|P ER1 P AO2 R T|V 281 | QUADRUPLE|K W AA1 D R UW0 P AH0 L|K W AA0 D R UW1 P AH0 L|V 282 | QUADRUPLES|K W AA0 D R UW1 P AH0 L Z|K W AA1 D R UW0 P AH0 L Z|V 283 | RAGGED|R AE1 G D|R AE1 G AH0 D|V 284 | RAMPAGE|R AE2 M P EY1 JH|R AE1 M P EY2 JH|V 285 | RAMPAGES|R AE2 M P EY1 JH IH0 Z|R AE1 M P EY2 JH IH0 Z|V 286 | READ|R IY1 D|R EH1 D|VBD 287 | REBEL|R EH1 B AH0 L|R IH0 B EH1 L|V 288 | REBELS|R IH0 B EH1 L Z|R EH1 B AH0 L Z|V 289 | REBOUND|R IY0 B AW1 N D|R IY1 B AW0 N D|V 290 | REBOUNDS|R IY0 B AW1 N D Z|R IY1 B AW0 N D Z|V 291 | RECALL|R IH0 K AO1 L|R IY1 K AO2 L|V 292 | RECALLS|R IH0 K AO1 L Z|R IY1 K AO2 L Z|V 293 | RECAP|R IH0 K AE1 P|R IY1 K AE2 P|V 294 | RECAPPED|R IH0 K AE1 P T|R IY1 K AE2 P T|V 295 | RECAPPING|R IH0 K AE1 P IH0 NG|R IY1 K AE2 P IH0 NG|V 296 | RECAPS|R IH0 K AE1 P S|R IY1 K AE2 P S|V 297 | RECOUNT|R IY2 K AW1 N T| R IH1 K AW0 N T|V 298 | RECOUNTS|R IY2 K AW1 N T S| R IH1 K AW0 N T S|V 299 | RECORD|R IH0 K AO1 R D|R EH1 K ER0 D|V 300 | RECORDS|R IH0 K AO1 R D Z|R EH1 K ER0 D Z|V 301 | REFILL|R IY0 F IH1 L|R IY1 F IH0 L|V 302 | REFILLS|R IY0 F IH1 L Z|R IY1 F IH0 L Z|V 303 | REFIT|R IY0 F IH1 T|R IY1 F IH0 T|V 304 | REFITS|R IY0 F IH1 T S|R IY1 F IH0 T S|V 305 | REFRESH|R IH0 F R EH1 SH|R IH1 F R EH0 SH|V 306 | REFUND|R IH0 F AH1 N D|R IY1 F AH2 N D|V 307 | REFUNDS|R IH0 F AH1 N D Z|R IY1 F AH2 N D Z|V 308 | REFUSE|R IH0 F Y UW1 Z|R EH1 F Y UW2 Z|V 309 | REGENERATE|R IY0 JH EH1 N ER0 EY2 T|R IY0 JH EH1 N ER0 AH0 T|V 310 | REHASH|R IY0 HH AE1 SH|R IY1 HH AE0 SH|V 311 | REHASHES|R IY0 HH AE1 SH IH0 Z|R IY1 HH AE0 SH IH0 Z|V 312 | REINCARNATE|R IY2 IH0 N K AA1 R N EY2 T|R IY2 IH0 N K AA1 R N AH0 T|V 313 | REJECT|R IH0 JH EH1 K T|R IY1 JH EH0 K T|V 314 | REJECTS|R IH0 JH EH1 K T S|R IY1 JH EH0 K T S|V 315 | RELAY|R IY2 L EY1|R IY1 L EY2|V 316 | RELAYING|R IY2 L EY1 IH0 NG|R IY1 L EY2 IH0 NG|V 317 | RELAYS|R IY2 L EY1 Z|R IY1 L EY2 Z|V 318 | REMAKE|R IY2 M EY1 K|R IY1 M EY0 K|V 319 | REMAKES|R IY2 M EY1 K S|R IY1 M EY0 K S|V 320 | REPLAY|R IY0 P L EY1|R IY1 P L EY0|V 321 | REPLAYS|R IY0 P L EY1 Z|R IY1 P L EY0 Z|V 322 | REPRINT|R IY0 P R IH1 N T|R IY1 P R IH0 N T|V 323 | REPRINTS|R IY0 P R IH1 N T S|R IY1 P R IH0 N T S|V 324 | RERUN|R IY2 R AH1 N|R IY1 R AH0 N|V 325 | RERUNS|R IY2 R AH1 N Z|R IY1 R AH0 N Z|V 326 | RESUME|R IY0 Z UW1 M|R EH1 Z AH0 M EY2|V 327 | RETAKE|R IY0 T EY1 K|R IY1 T EY0 K|V 328 | RETAKES|R IY0 T EY1 K S|R IY1 T EY0 K S|V 329 | RETHINK|R IY2 TH IH1 NG K|R IY1 TH IH0 NG K|V 330 | RETHINKS|R IY2 TH IH1 NG K S|R IY1 TH IH0 NG K S|V 331 | RETREAD|R IY2 T R EH1 D|R IY1 T R EH0 D|V 332 | RETREADS|R IY2 T R EH1 D Z|R IY1 T R EH0 D Z|V 333 | REWRITE|R IY0 R AY1 T|R IY1 R AY2 T|V 334 | REWRITES|R IY0 R AY1 T S|R IY1 R AY2 T S|V 335 | SEGMENT|S EH1 G M AH0 N T|S EH2 G M EH1 N T|V 336 | SEGMENTS|S EH2 G M EH1 N T S|S EH1 G M AH0 N T S|V 337 | SEPARATE|S EH1 P ER0 EY2 T|S EH1 P ER0 IH0 T|V 338 | SEPARATES|S EH1 P ER0 EY2 T S|S EH1 P ER0 IH0 T S|V 339 | SUBCONTRACT|S AH0 B K AA1 N T R AE2 K T|S AH2 B K AA0 N T R AE1 K T|V 340 | SUBCONTRACTS|S AH2 B K AA0 N T R AE1 K T S|S AH0 B K AA1 N T R AE2 K T S|V 341 | SUBJECT|S AH0 B JH EH1 K T|S AH1 B JH IH0 K T|V 342 | SUBJECTS|S AH0 B JH EH1 K T S|S AH1 B JH IH0 K T S|V 343 | SUBORDINATE|S AH0 B AO1 R D AH0 N EY2 T|S AH0 B AO1 R D AH0 N AH0 T|V 344 | SUBORDINATES|S AH0 B AO1 R D AH0 N EY2 T S|S AH0 B AO1 R D AH0 N AH0 T S|V 345 | SUPPLEMENT|S AH1 P L AH0 M EH0 N T|S AH1 P L AH0 M AH0 N T|V 346 | SUPPLEMENTS|S AH1 P L AH0 M EH0 N T S|S AH1 P L AH0 M AH0 N T S|V 347 | SURMISE|S ER0 M AY1 Z|S ER1 M AY0 Z|V 348 | SURMISES|S ER0 M AY1 Z IH0 Z|S ER1 M AY0 Z IH0 Z|V 349 | SURVEY|S ER0 V EY1|S ER1 V EY2|V 350 | SURVEYS|S ER0 V EY1 Z|S ER1 V EY2 Z|V 351 | SUSPECT|S AH0 S P EH1 K T|S AH1 S P EH2 K T|V 352 | SUSPECTS|S AH0 S P EH1 K T S|S AH1 S P EH2 K T S|V 353 | SYNDICATE|S IH1 N D AH0 K EY2 T|S IH1 N D IH0 K AH0 T|V 354 | SYNDICATES|S IH1 N D IH0 K EY2 T S|S IH1 N D IH0 K AH0 T S|V 355 | TORMENT|T AO1 R M EH2 N T|T AO0 R M EH1 N T|V 356 | TRANSFER|T R AE0 N S F ER1|T R AE1 N S F ER0|V 357 | TRANSFERS|T R AE0 N S F ER1 Z|T R AE1 N S F ER0 Z|V 358 | TRANSPLANT|T R AE0 N S P L AE1 N T|T R AE1 N S P L AE0 N T|V 359 | TRANSPLANTS|T R AE0 N S P L AE1 N T S|T R AE1 N S P L AE0 N T S|V 360 | TRANSPORT|T R AE0 N S P AO1 R T|T R AE1 N S P AO0 R T|V 361 | TRANSPORTS|T R AE0 N S P AO1 R T S|T R AE1 N S P AO0 R T S|V 362 | TRIPLICATE|T R IH1 P L IH0 K EY2 T|T R IH1 P L IH0 K AH0 T|V 363 | TRIPLICATES|T R IH1 P L IH0 K EY2 T S|T R IH1 P L IH0 K AH0 T S|V 364 | UNDERCUT|AH2 N D ER0 K AH1 T|AH1 N D ER0 K AH2 T|V 365 | UNDERESTIMATE|AH1 N D ER0 EH1 S T AH0 M EY2 T|AH1 N D ER0 EH1 S T AH0 M AH0 T|V 366 | UNDERESTIMATES|AH1 N D ER0 EH1 S T AH0 M EY2 T S|AH1 N D ER0 EH1 S T AH0 M AH0 T S|V 367 | UNDERLINE|AH2 N D ER0 L AY1 N|AH1 N D ER0 L AY2 N|V 368 | UNDERLINES|AH2 N D ER0 L AY1 N Z|AH1 N D ER0 L AY2 N Z|V 369 | UNDERTAKING|AH2 N D ER0 T EY1 K IH0 NG|AH1 N D ER0 T EY2 K IH0 NG|V 370 | UNDERTAKINGS|AH2 N D ER0 T EY1 K IH0 NG Z|AH1 N D ER0 T EY2 K IH0 NG Z|V 371 | UNUSED|AH0 N Y UW1 Z D|AH0 N Y UW1 S T|V 372 | UPGRADE|AH0 P G R EY1 D|AH1 P G R EY0 D|V 373 | UPGRADES|AH0 P G R EY1 D Z|AH1 P G R EY0 D Z|V 374 | UPLIFT|AH2 P L IH1 F T|AH1 P L IH0 F T|V 375 | UPSET|AH0 P S EH1 T|AH1 P S EH2 T|V 376 | UPSETS|AH0 P S EH1 T S|AH1 P S EH2 T S|V 377 | USE|Y UW1 Z|Y UW1 S|V 378 | USED|Y UW1 Z D|Y UW1 S T|VBN 379 | USES|Y UW1 Z IH0 Z|Y UW1 S IH0 Z|V -------------------------------------------------------------------------------- /setup.cfg: -------------------------------------------------------------------------------- 1 | [metadata] 2 | description-file = README.md 3 | -------------------------------------------------------------------------------- /setup.py: -------------------------------------------------------------------------------- 1 | #from distutils.core import setup 2 | from setuptools import setup 3 | from codecs import open 4 | from os import path 5 | 6 | here = path.abspath(path.dirname(__file__)) 7 | 8 | # Get the long description from the README file 9 | with open(path.join(here, 'README.rst'), encoding='utf-8') as f: 10 | long_description = f.read() 11 | 12 | setup( 13 | name = 'g2p_en', 14 | packages = ['g2p_en'], # this must be the same as the name above 15 | version = '2.0.0', 16 | description = 'A Simple Python Module for English Grapheme To Phoneme Conversion', 17 | long_description=long_description, 18 | author = 'Kyubyong Park & Jongseok Kim', 19 | author_email = 'kbpark.linguist@gmail.com', 20 | url = 'https://github.com/Kyubyong/g2p', # use the URL to the github repo 21 | download_url = 'https://github.com/Kyubyong/g2p/archive/1.0.0.tar.gz', # I'll explain this in a second 22 | keywords = ['g2p','g2p_en'], # arbitrary keywords 23 | classifiers = [], 24 | install_requires = [ 25 | 'numpy>=1.13.1', 26 | 'nltk>=3.2.4', 27 | 'inflect>=0.3.1', 28 | 'distance>=0.1.3', 29 | ], 30 | license='Apache Software License', 31 | include_package_data=True 32 | ) 33 | 34 | --------------------------------------------------------------------------------