Closed Ldoun closed 3 years ago
I found that "(enus) (ko)" before this tag there are some missing word
and the result is different by the input sentence length for example "하늘은 파랗게 구름은 하얗게 실바람도 불어와 부풀은 내 마음 나뭇잎 푸르게 강물도 푸르게 아름다운" this sentence's result has word "hæŋɡul" but with the full sentence (above) there is no "hæŋɡul" in the result
Hi, in your first example, there are 2 mistakes. you have "end of the sentence" in your text. You do not specify the language (so it default to US English). For instance this works:
$ echo "하늘은 파랗게 구름은 하얗게 실바람도 불어와 부풀은 내 마음" | phonemize -l ko
hɐnɯɾɯn phɐɾɐtkhe ɡuɾɯmɯn hɐjɐtkhe siɫbɐɾɐmdo puɾʌwɐ puphuɾɯnnɛmɐɯm
Yes I tried without the "end of the sentence" and with the -l option but the result only translate part of the input to ipa so I solved with by python making phonemizer to take a word and output a word (not a whole sentence) It takes a longer time but this way it is more accurate
Ok so I found a bug with your example, the phonemizer discards the end of the espeak output. For instance above espeak output have 93 words and phonemizer only 70.
sentence="하늘은 파랗게 구름은 하얗게 실바람도 불어와 부풀은 내 마음 나뭇잎 푸르게 강물도 푸르게 아름다운 이곳에 내가 있고 네가 있네 우리는 이 땅 위에 우리는 태어나고 아름다운 이곳에 자랑스런 이곳에 살리라 찬란하게 빛나는 붉은 태양이 비추고 하얀 물결 넘치는 저 바다와 함께 있네 그 얼마나 좋은가 우리 사는 이곳에 사랑하는 그대와 노래하리 빰빠밤빠밤 빠바밤 빠바밤 빰빠 빠바바바바밤 오늘도 너를 만나러 가야지 말해야지 먼 훗날에 너와 나 살고 지고 영원한 이곳에 우리의 새 꿈을 만들어 보고파 찬란하게 빛나는 붉은 태양이 비추고 하얀 물결 넘치는 저 바다와 함께 있네 그 얼마나 좋은가 우리 사는 이곳에 사랑하는 그대와 사랑하며 노래하리 빰빠밤빠밤 빠바밤 빠바밤 빰빠 빠바바바바밤 빰빠밤빠밤 빠바밤 빠바밤 빰빠 빠바바바바밤 빰빠밤빠밤 빠바밤 빠바밤 빰빠 빠바바바바밤 빰빠밤빠밤 빠바밤 빠바밤 빰빠 빠바바바바밤 오오오오 봄여름 이 지나면 가을 겨울이 온다네 아름다운 강산 너의 마음은 나의 마음 나의 마음은 너의 마음 너와 나는 한마음 너와 나 우리 영원히 영원히 사랑 영원히 영원히 우리 모두 다 모두 다 끝없이 다정해"
echo $sentence | espeak-ng -vko -x --ipa -q --sep=_ | tr -d "_'ˈˌ-" | wc -w
93
echo $sentence | phonemize -lko | wc -w
70
echo $sentence | espeak-ng -vko -x --ipa -q --sep=_ | tr -d "_'ˈˌ-" | tr -s "\n" " "
hɐnɯɾɯn phɐɾɐtkhe ɡuɾɯmɯn hɐjɐtkhe siɫbɐɾɐmdo puɾ�wɐ puphuɾɯnnɛmɐɯmnɐmunnip phuɾɯqe ɡɐŋmuɫdo phuɾɯqe ɐɾɯmdɐun iqosenɛqɐ itkoneqɐ inne uɾinɯn i tɐŋ wie uɾinɯn thɛ�nɐqo ɐɾɯmdɐun iqose tɕɐɾɐŋsɯɾ�n iqose sɐliɾɐ tʃhɐnɾɐnhɐqe pinnɐnɯn pulɡɯn thɛjɐŋi pitʃhuqo hɐjɐnmuɫqj�ɫn�mtʃhinɯn tɕ� pɐdɐwɐ hɐmqe inne ɡɯ �ɫmɐnɐ tɕot hɐjɐnmuɫqj�ɫn�mtʃhinɯn tɕ� pɐdɐwɐ hɐmqe inne ɡɯ �ɫmɐnɐ tɕoɯnqɐ uɾi sɐnɯn iqose sɐɾɐŋhɐnɯn ɡɯdɛwɐ sɐɾɐŋhɐmj�noɾɛhɐɾi pɐmpɐbɐmpɐbɐm pɐbɐbɐm pɐbɐbɐm pɐmpɐ pɐbɐbɐbɐbɐbɐm pɐmpɐbɐmpɐbɐm pɐbɐbɐm pɐbɐbɐm pɐmpɐ pɐbɐbɐbɐbɐbɐm pɐmpɐbɐmpɐbɐm pɐbɐbɐm pɐbɐbɐm pɐmpɐ pɐbɐbɐbɐbɐbɐm pɐmpɐbɐmpɐbɐm pɐbɐbɐm pɐbɐbɐm pɐmpɐ pɐbɐbɐbɐbɐbɐm oooo pomj�ɾɯm i tɕinɐmj�n ɡɐɯɫ ɡj�uɾi ondɐne ɐɾɯmdɐun ɡɐŋsɐnn�ɯjmɐɯmɯnnɐɯjmɐɯmnɐɯjmɐɯmɯnn�ɯjmɐɯmn�wɐnɐnɯn hɐnmɐɯmn�wɐnɐ uɾi j�ŋw�nhi j�ŋw�nhi sɐɾɐŋ j�ŋw�nhi j�ŋw�nhi uɾimodu dɐmodu dɐ qɯth�psi dɐdʑ�ŋhɛ
echo $sentence | phonemize -lko
hɐnɯɾɯn phɐɾɐtkhe ɡuɾɯmɯn hɐjɐtkhe siɫbɐɾɐmdo puɾʌwɐ puphuɾɯnnɛmɐɯmnɐmunnip phuɾɯqe ɡɐŋmuɫdo phuɾɯqe ɐɾɯmdɐun iqosenɛqɐ itkoneqɐ inne uɾinɯn i tɐŋ wie uɾinɯn thɛʌnɐqo ɐɾɯmdɐun iqose tɕɐɾɐŋsɯɾʌn iqose sɐliɾɐ tʃhɐnɾɐnhɐqe pinnɐnɯn pulɡɯn thɛjɐŋi pitʃhuqo hɐjɐnmuɫqjʌɫnʌmtʃhinɯn tɕʌ pɐdɐwɐ hɐmqe inne ɡɯ ʌɫmɐnɐ tɕot hɐjɐnmuɫqjʌɫnʌmtʃhinɯn tɕʌ pɐdɐwɐ hɐmqe inne ɡɯ ʌɫmɐnɐ tɕoɯnqɐ uɾi sɐnɯn iqose sɐɾɐŋhɐnɯn ɡɯdɛwɐ sɐɾɐŋhɐmjʌnoɾɛhɐɾi pɐmpɐbɐmpɐbɐm pɐbɐbɐm pɐbɐbɐm pɐmpɐ pɐbɐbɐbɐbɐbɐm pɐmpɐbɐmpɐbɐm pɐbɐbɐm pɐbɐbɐm pɐmpɐ pɐbɐbɐbɐbɐbɐm pɐmpɐbɐmpɐbɐm pɐbɐbɐm pɐbɐbɐm pɐmpɐ pɐbɐbɐbɐbɐbɐm pɐmpɐbɐmpɐbɐm pɐbɐbɐm pɐbɐ
Actually I played on google translate with the $sentence
above. It seems the are several sentences in the text. Can you please put the periods, or give me the text one sentence per line please?
It's a song lyric and here is the sentence with the periods
하늘은 파랗게 구름은 하얗게 실바람도 불어와 부풀은 내 마음 나뭇잎 푸르게 강물도 푸르게 아름다운 이곳에 내가 있고 네가 있네 손잡고 가보자. 달려보자. 저 광야로 우리들 모여서 말해보자. 새 희망을 하늘은 파랗게 구름은 하얗게 실바람도 불어와 부풀은 내 마음 우리는 이 땅 위에 우리는 태어나고 아름다운 이곳에 자랑스런 이곳에 살리라. 찬란하게 빛나는 붉은 태양이 비추고 하얀 물결 넘치는 저 바다와 함께 있네. 그 얼마나 좋은가 우리 사는 이곳에 사랑하는 그대와 노래하리. 빰빠밤 빠밤빠바밤 빠바밤 빰빠밤빠바빠바밤 빰빠밤 빠밤빠바밤 빠바밤 빰빠밤빠바빠바밤. 오늘도 너를 만나러 가야지 말해야지. 먼 훗날에 그대와 나 살고 지고 영원한 이곳에 우리의 새 꿈을 만들어 보고파 봄여름이 지나면 가을 겨울이 온다네. 아름다운 강산 너의 마음 나의 마음 나의 마음 너의 마음 너와 나는 한마음. 너와 나 우리 영원히 영원히 사랑 영원히 영원히 우리 모두 다 모두 다 끝없이 다정해.
Ok thank you! So actually this issue is not really a bug because the specification for phonemize.phonemize()
stand that the input text must have one sentence per line. If you respect that this is working. Below two working examples, either by cutting the text into utterances, or by setting preserve_punctuation=True
.
#!/usr/bin/env python
from phonemizer import phonemize
text="하늘은 파랗게 구름은 하얗게 실바람도 불어와 부풀은 내 마음 나뭇잎 푸르게 강물도 푸르게 아름다운 이곳에 내가 있고 네가 있네 손잡고 가보자. 달려보자. 저 광야로 우리들 모 여서 말해보자. 새 희망을 하늘은 파랗게 구름은 하얗게 실바람도 불어와 부풀은 내 마음 우리는 이 땅 위에 우리는 태어나고 아름다운 이곳에 자랑스런 이곳에 살리라. 찬란하게 빛나는 붉은 태양이 비추고 하얀 물결 넘치는 저 바다와 함께 있네. 그 얼마나 좋은가 우리 사는 이곳에 사랑하는 그대와 노래하리. 빰빠밤 빠밤빠바밤 빠바밤 빰빠밤빠바빠바밤 빰빠밤 빠밤빠바밤 빠바밤 빰빠밤빠바빠바밤. 오늘도 너를 만나러 가야지 말해야지. 먼 훗날에 그대와 나 살고 지고 영원한 이곳에 우리의 새 꿈을 만들어 보고파 봄여름이 지나면 가을 겨울이 온다네. 아름다운 강산 너의 마음 나의 마음 나의 마음 너의 마음 너와 나는 한마음. 너와 나 우리 영원히 영원히 사랑 영원히 영원히 우리 모두 다 모두 다 끝없이 다정해."
def do_phonemizer(text):
text = [l for l in (l.strip() for l in text.split('.')) if l]
out = phonemize(
text, language='ko', backend='espeak', strip=True)
return '\n'.join(out)
def do_phonemizer_punct(text):
return phonemize(
text, language='ko', backend='espeak', strip=True,
preserve_punctuation=True)
print('### phonemizer')
for utt in do_phonemizer(text).split('\n'):
print(utt)
print('### phonemizer punct')
print(do_phonemizer_punct(text).replace('. ', '\n').replace('.', ''))
hmmmm ok then if there is no periods in the sentences it needs to be processed by characters right?(because with whole sentences as input some input will be Ignored) or is there other way?
if there is no periods, you can put one sentence per line (what I did in script above: .replace('. ', '\n').replace('.', '')
). If you don't know the sentence boundaries you have no other choice than to process by word...
ah got it. thanks for the help
I'm using WSL to preprocess korean to ipa . for some reason the phonemizer takes only part of the sentence as input and do not preprocess characters after that . I tried using cat,echo,and phonemizer I/O(using option -o) but the result are all same