Ubuntu 사용자로서 Rhythmbox를 기본 뮤직 플레이어로 사용하는데,

Lyrics Plugin에서 K-Pop가사를 지원하는 소스가 없어, 알송 가사 서비스를 가져오도록 추가함.


1. Python requests를 이용 ALSong Lyrics 추출 (Artist, Title)

https://item4.github.io/2018-10-20/Fetch-Alsong-Lyrics-with-Python/


2. lLyrics에서 Artist, Title의 한글 문자열이 Hangul Jamo (U+1100 ~ U+11FF)방식으로 표현되어

이를 Hangul Syllables (U+AC00 ~ U+D7AF)로 전환 후 UTF-8 인코딩하도록 추가 작업

https://pypi.org/project/jamotools/

추가수정 : 유니코드 한글이 왜 자모로 변환되었는지 찾았습니다. lLyrics에서 NFKD로 정규화를 해서 Hangul Jamo로 전환되었던거네요.

lLyrics.py:492:        artist = unicodedata.normalize('NFKD', artist)

lLyrics.py:494:        title = unicodedata.normalize('NFKD', title)

jamotools 대신 unicodedata를 쓰는 것으로 바꿨습니다.

ALSongLyricsParser.py:52:            title = unicodedata.normalize("NFC", self.title),

ALSongLyricsParser.py:53:            artist = unicodedata.normalize("NFC", self.artist),


작업한 소스 저장소 :

https://github.com/jang574/lLyrics



unicodedata에서 유니코드 정규화를 지원함.

#!/usr/bin/python3

import unicodedata


text1 = b'\xe1\x84\x80\xe1\x85\xb5\xe1\x86\xaf\xe1\x84\x80\xe1\x85\xa1\xe1\x84\x8b\xe1\x85\xa6'

text2 = b'\xea\xb8\xb8\xea\xb0\x80\xec\x97\x90'


print("text1 : {}".format(text1.decode('utf-8')))

print("text2 : {}".format(text2.decode('utf-8')))


print("------ text1 -------")

for c in text1.decode('utf-8'):

    print( unicodedata.name(c))


print("------ text2 -------")

for c in text2.decode('utf-8'):

    print( unicodedata.name(c))


print("------ Normalize text1 using NFC -------")

for c in unicodedata.normalize("NFC", text1.decode('utf-8')):

    print( unicodedata.name(c))


print("------ Normalize text2 using NFD -------")

for c in unicodedata.normalize("NFD", text2.decode('utf-8')):

    print( unicodedata.name(c))

출력

text1 : 길가에

text2 : 길가에

------ text1 -------

HANGUL CHOSEONG KIYEOK

HANGUL JUNGSEONG I

HANGUL JONGSEONG RIEUL

HANGUL CHOSEONG KIYEOK

HANGUL JUNGSEONG A

HANGUL CHOSEONG IEUNG

HANGUL JUNGSEONG E

------ text2 -------

HANGUL SYLLABLE GIL

HANGUL SYLLABLE GA

HANGUL SYLLABLE E

------ Normalize text1 using NFC -------

HANGUL SYLLABLE GIL

HANGUL SYLLABLE GA

HANGUL SYLLABLE E

------ Normalize text2 using NFD -------

HANGUL CHOSEONG KIYEOK

HANGUL JUNGSEONG I

HANGUL JONGSEONG RIEUL

HANGUL CHOSEONG KIYEOK

HANGUL JUNGSEONG A

HANGUL CHOSEONG IEUNG

HANGUL JUNGSEONG E


+ Recent posts