365 |
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 | [](https://pypi.org/project/g2p-en/)
2 | [](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 |
--------------------------------------------------------------------------------