Tuesday, August 11, 2015

[Korean] 한국어 노래 가사에 제일 많이 나오는 단어는?

일단 성격 급한 분들을 위해 (ex;저) 결론부터.

=== TOP N WORD ===
1: 13719 times; 보다
2: 10558 times; 주다
3: 7597 times; 사랑
4: 6936 times; 사랑하다
5: 6133 times; 가다
6: 6102 times; 되다
7: 5363 times; 이제
8: 5136 times; 말다
9: 4855 times; love
10: 4766 times; 오다
11: 4696 times; 알다
12: 4169 times; 다시
13: 4011 times; 모르다
14: 3947 times; 사람
15: 3825 times; babi
16: 3476 times; 너무
17: 3370 times; 버리다
18: 3345 times; 아니다
19: 3247 times; 좋다
20: 3205 times; 마음
21: 3061 times; 눈물
22: 3048 times; 없어
23: 3043 times; 오늘
24: 2939 times; 없는
25: 2877 times; 잊다
26: 2850 times; 있어
27: 2730 times; 말하다
28: 2684 times; 못하다
29: 2628 times; 세상
30: 2530 times; 아프다
31: 2496 times; 지금
32: 2399 times; 떠나다
33: 2394 times; 가슴
34: 2313 times; 만나다
35: 2256 times; 웃다
36: 2242 times; 나다
37: 2199 times; 이렇다
38: 2188 times; girl
39: 2101 times; 울다
40: 2099 times; 있는
41: 2029 times; 같은
42: 2012 times; 살다
43: 2010 times; 모든
44: 1990 times; 아직
45: 1983 times; 보이다
46: 1950 times; 없이
47: 1932 times; 하루
48: 1929 times; 기다리다
49: 1860 times; 정말
50: 1837 times; 모습

자 위의 50개 단어를 적당히 섞어서 그럴싸한 가사를 만들어보세요!!

상세 내용:
2015년 *월 *일부터 *월 *일까지 약 *일간 * 뮤직 서비스에서 재생된 곡 중 상위 *곡. 중에서 가사가 존재하는 음원 *개를 분석했습니다.
국문/영어를 같이 처리했고 stop words는 이곳 저곳에서 구해서 합쳤는데, 내부적으로 사용하는 모듈에서 처리되는 부분도 있어서 정확한 목록을 밝히기가 애매하군요.
명사인 사랑과 동사형태인 사랑하다를 합치면 14000번이 넘게 나옵니다. 뜻 위주로 생각하면 love까지 더해도 될 것 같구요. 그러먼 무려 19000번! 압도적인 1위입니다.
그 외엔 일반적인 말뭉치(corpus)의 순위를 어느정도 따르지 않을까 합니다. 특이사항을 꼽자면 14위의 사람, 15위의 babi (baby, babi, babe 를 다 합친것같은데 파이썬의 normalization 코드를 다시 한 번 봐야 알 것 같네요), 20 마음, 21눈물, ... 29 세상 30 아프다 33 가슴 38 girl 48 기다리다, 등이 눈에 띄네요.



Monday, August 3, 2015

Lyrics for text processing

Recently I'm looking into lyrics before implementing music lyric processing codes. 
There are many aspects that make song lyrics different from usual text, which are quite interesting and going to give me some pain. Few of them are introduced as below. Please enjoy!

  • Incomplete sentence
example:
Scars make us who we are
Hearts and homes are broken, broken
Far, we could go so far
With our minds wide open, open

example:
Love you forever and forever 
Love you with all my heart 
Love you whenever we're together 
Love you when we're apart 

In terms of grammar, it's easy to find some incomplete sentences. What makes them trickier is however, that they don't have proper punctuation marks. It would be okay for word-level processing (though there is still some issues such as negation..), but sentence-level processing would require a huge pre-processing. New-line character doesn't always indicate the end of the sentences, of course!



  • Use of arbitrary special characters
example:
사르륵녹은 그대를 보면 사랑을 느끼죠
oh so beautiful 사랑을 말해봐요 
매일 너와 함께! ~~해!~~~
조금더 다가와줘
example:
다가와- 느껴봐 음- 
It may be more about Korean speaker's writing habit. Korean (and Japanese) prefers to use '~' than '-'. In some cases, -- is automatically 'corrected' to  , a long dash, which makes the problem more complex. (Not that much, actually, since all of them should be just ignored as a stopword.)

  •  Multiple languages
example:
簡単に
(칸탄니)
간단히
You make me happy
一言で
(히토코토데)
한마디로
夕べの すれ違い
(유우베노 스레치가이)
저녁때의 엇갈림
まだまだ 埋まってない
(마다마다 우맛테나이)
아직아직 채워지지 않아
So I'm waiting ソワソワ Oh
(소와소와)
안절부절

The example above is an extreme one, written with Korean, Japanese, and English (+Korean interpretation for Japanese sentences in parentheses). However, it's very common to use English words in Korean lyrics.


  • Corruption by other information
example:
[Chorus]
Yeah (yeah) 
Shorty got down to come and get me [x2]

There are many non-lyric texts such as [Chorus] or [x2] to help the viewer, while giving me pain.


  • So many Yeah's and Oh's
There are so many Yeah's and Oh's in lyrics. I'm not sure what should I do with them. 





  • To summarise, these are the lists that I think I should add to usual stopwords list to process lyrics.
    • Some special characters (which should be already included in stopwords list)
      • * ** *** + " ' ` . .. ... / ~ ~~ ~~~ ~~~~ ~~~~~ ? - -- --- ^, ^^, a, b, c,...z,...
    • Unnecessary (and common) words that are included in lyrics texts
      • chorus, verse, pre-chorus, bridge, feat, hook, song, solo, twice, outro, sabi, intro, pre-hook, rap, x2, x3, x4, x5, x6, x7, x8, x9, x10, copyright, azlyrics, writer, br, choir, guitar
      • (Korean words:)간주, 후렴, 반복, 가사입력, 출처, 작성자, 악보, 연주곡, 간주중



[Korean] 노래 가사 자연어 처리를 위한 준비작업


노래 가사를 텍스트로 보고 처리하는 과정에서 흥미로운 내용이 있어서 정리했습니다. 자연어 처리 관점에서 노래 가사를 다루니 일반적인 텍스트와 다른 점이 많이 보이네요.


  • 구두점의 활용이 불명확함

예:

이런 그대를 믿으라고 했나요..
그 때 왜 나를 사랑한다 했나요..
그대가 바랬던 마음을 그려왔었던..
그 모습에 내가 많이 모자란 건가요..
예:
버리고 싶은 건 니가 아니었어
버려지는 건 내가 되어줄께
이렇게 그냥 버려둬 오지마
첫 번째 예는 문장 끝마다 '..' 을 붙였습니다. 반면 두 번째 예는 문장 끝에 마침표가 전혀 찍혀있지 않습니다. 결론적으로 노래 가사에서 마침표, 쉼표, 느낌표 등 모든 구두점은 전부 없애버리는 편이 처리하기에 수월해보입니다. 노래 가사는 일관된 규칙으로 작성하지 않으니까요.
자연어 처리를 단어 레벨에서 한다면 큰 문제는 없습니다. 다만 문장 레벨로 처리하려면 좀 곤란하겠죠.



  • 특수문자의 활용이 다양하고 다채로움


예:
사르륵녹은 그대를 보면 사랑을 느끼죠
oh so beautiful 사랑을 말해봐요 
매일 너와 함께! ~~해!~~~
조금더 다가와줘
예:
다가와- 느껴봐 음- 
위의 예를 보시면 물결과 느낌표, 대쉬 기호가 같은 것을 의미합니다. 이 외에도 -, - - , ---, ~, 등 아주 다양합니다.


  • 사용하는 언어가 다양하다


(극단적인) 예:
簡単に
(칸탄니)
간단히
You make me happy
一言で
(히토코토데)
한마디로
夕べの すれ違い
(유우베노 스레치가이)
저녁때의 엇갈림
まだまだ 埋まってない
(마다마다 우맛테나이)
아직아직 채워지지 않아
So I'm waiting ソワソワ Oh
(소와소와)
안절부절
무슨 노래인지는 모르겠지만 이 노래는 영어가사, 일본어, 일본어 발음, 한국어 해석이 적혀있습니다. 위의 예가 조금 특이한 경우지만 영어 단어/문장과 국문이 섞여서 나오는 가사는 아주 흔하죠.


  • 각종 잡; 내용
예:

Simply just look at you
Why must I fall for you? Ooo-Ooo-Ooo
Or why I can't think of words when I, 
Simply approach you
I don't know what to do, Ooo-Ooo-Ooo


^ㅅ^/
예:
[Chorus]
Yeah (yeah) 
Shorty got down to come and get me [x2]

첫 번째 예는 잘 나가는데 가사 맨 끝에 왠 이모티콘을 넣어놨습니다. 두번째 예는 [chorus], [x2] 와 같은 부가적인 정보가 그대로 텍스트에 포함되어있습니다.


  • 예 워 오 우 
노래 가사에 yeah, oh, whoa, 예, 워, 예이예, 라라라, 워, 오, 오오, .... 가 아주 많이 나옵니다.



  • 그 외에 나를 힘들게 하는 것들
예:


to moonn6pence  from shootingstar
가사입력 papayeverte
[Jazz Instrumental]
가사 어쩌구저쩌구<br>가사 다음줄<br>가사 가사 <br>
from A-Zlyrics, ... 





  • 위의 내용을 다 보듬어 보면 아래와 같은 식의  Stopword를 추가해야 한다는 결론이 나옵니다. 물론 이외에도 많이 있겠죠. 
    • 일반적으로 stopword로 인식되는 값 확인사살
      • * ** *** + " ' ` . .. ... / ~ ~~ ~~~ ~~~~ ~~~~~ ? - -- --- ^, ^^, a, b, c,...z,...
    • 노래 가사에 붙어있는 불필요한 단어
      • chorus, verse, pre-chorus, bridge, feat, hook, song, solo, twice, outro, sabi, intro, pre-hook, rap, x2, x3, x4, x5, x6, x7, x8, x9, x10, copyright, azlyrics, writer, br, choir, guitar
      • 간주, 후렴, 반복, 가사입력, 출처, 작성자, 악보, 연주곡, 간주중