[python] 회문 판별과 N-gram 만들기

anjiyoo·2024년 3월 6일

Python

목록 보기
27/41
post-thumbnail

1.회문 판별하기

  • 회문 : 순서를 거꾸로 읽어도 제대로 읽은 것과 같은 단어와 문장

단어를 입력하세요: level (입력)
단어를 입력하세요: hello (입력)

1-1.시퀀스로 뒤집기로 문자 검사하기

  • 시퀀스의 객체 슬라이스를 활용하면 간단하게 판별
word = input('단어를 입력하세요: ')

print(word == word[::-1]). # 원래 문자열과 반대로 뒤집은 문자열을 비교

1-2.리스트와 reversed 사용하기

  • 리스트에 문자열을 넣으면 문자 하나하나가 리스트의 요소로 들어감
word = 'level'
list(word) == list(reversed(word))

1-3.문자열의 join 메소드와 reversed 사용하기

  • join은 구분자 문자열과 문자열 리스트의 요소를 연결
  • join은 요소 사이에 구분자를 넣지면 빈 문자열 ''을 활용하여 각 문자를 그대로 연결하는 방식
word = 'level'
word == ''.join(reversed(word))  # ==로 비교하면 문자열이 회문인지 판별 가능

2.N-gram 만들기

  • 문자열에서 N개의 연속된 요소를 추출하는 방법
  • 2-gram으로 추출하면 두글자씩 추출

2-1.반복문으로 N-gram 출력하기

# 글자 단위 N-gram

text = 'Hello'

# 2-gram이므로 문자열의 끝에서 한 글자 앞까지만 반복함
for i in range(len(text)-1):
	print(text[i], text[i+1], set['')  # 현재 문자와 그다음 문자 출력
# 단어 단위 N-gram

text = 'this is python script'
words = text.split()  # 공백을 기준으로 문자열을 분리하여 리스트로 만듦

# 2-gram이므로 리스트의 마지막에서 요소 한 개 앞까지만 반복함
for i in range(len(words)-1):
	print(words[i], words[i+1])  # 현재 문자열과 그다음 문자열 출력

2-2.zip으로 2-gram 만들기

  • zip 함수는 리스트 두 개를 딕셔너리로 만들 때 사용
  • zip 함수는 반복 가능한 객체의 각 요소를 튜플로 묶어줌
text = 'this is python scripy'
words = text.split()
list(zip(words, words[1:]))

2-3.zip과 리스트 표현식으로 N-gram 만들기

  • 리스트 언패킹 : 리스트에 *를 붙이는 방법
text = 'hello'
[text[i:] for i in range(3)]
list(zip(['hello', 'ello', 'llo']))  # 이제 리스트를  zip에 넣기
list(zip(+['hello', 'ello', 'llo']))  # zip에 리스트의 각 요소를 콤마로 구분해서 넣어주려면 리스트 앞에 *
profile
기록으로 흔적을 남기는 것을 좋아합니다

0개의 댓글