출처 : https://dojang.io/mod/page/view.php?id=2332
N-gram : 문자열에서 N개 요소를 연속으로 추출한다.
1. 반복문 사용하기
#반복문을 사용한 2-gram
text = 'Hello'
for i in range(len(text)-1):
print(text[i],text[i+1],sep='')
He
el
ll
lo
단어 단위로 N-gram 적용
text = 'this is python script'
words text.split() # 공백으로 문자열을 분리해 리스트로 생성
for i in range(len(words)-1):
print(words[i], words[i+1])
this is
is python
python script
2. zip 사용하기
text = 'Hello'
two_gram = zip(text, text[1:])
for i in two_gram:
print(i[0], i[1], sep='')
zip(text, text[1:])은 다음과 같다.
'Hello'와 'ello'를 요소를 각각 순서대로 묶어서 튜플로 만든다.
튜플결과는 다음과 같다.
('h', 'e'), ('e', 'l'), ('l', 'l'), ('l', 'o')
단어 단위로도 다음과 같이 만들 수 있다.
text = 'this is python script'
words = text.split()
list(zip(words, words[1:]))
[('this', 'is'), ('is', 'python'), ('python', 'script')]
만약 3-gram을 만든다면 zip(words, words[1:], words[2:])로 만들면 된다.
3. zip, 리스트 표현식 사용하기
위처럼 list(zip(words, words[1:], words[2:], ...)) 으로 슬라이스를 반복해서 명시하는 것은 번거롭다.
이 과정을 리스트 표현식을 사용해서 편하게 사용해보자.
list(zip(*[text[i:] for i in range(3)]))
[('h', 'e', 'l'), ('e', 'l', 'l'), ('l', 'l', 'o')]
*은 list unpacking이라고 한다. zip을 사용할 때 리스트의 각 요소를 콤마로 구분해서 넣을 수 있다.
'Programming > Python' 카테고리의 다른 글
FLASK 1 - Flask 가상환경 생성, 패키지 설치 및 app.py (0) | 2020.12.14 |
---|---|
파이썬 '...' ellipsis 의미 (0) | 2020.10.26 |
Python Palindrome(회문) 판별 (0) | 2020.01.02 |
Python 객체 파일에 저장하기 (0) | 2020.01.01 |
Python 내장 함수 (0) | 2019.12.26 |