-- 내가 나중에 참고하려고 쓰는 기록 --
텍스트 전처리
- 수집한 말뭉치(corpus, 코퍼스) 데이터를 필요에 맞게 토큰화, 정제, 정규화 하는 과정
- 수집한 말뭉치 데이터에 오타가 있거나 문장 구성이 문법상 올바르지 않을 경우 모델 결과가 아무 의미가 없어지기 때문에 전처리 과정은 매우 중요 → Garbage In Garbage Out
정규표현식(Regular Expression) import re
.
r = re.compile("a.c") # a 랑 c 사이에 다른 문자 하나만 허용
print(r.search("b.a")) # None
print(r.search("abbc")) # None
print(r.search("abc")) # <re.Match object; span=(0, 3), match='abc'>
print(r.search("axc")) # <re.Match object; span=(0, 3), match='axc'>
r2 = re.compile("a..c") # .의 개수로 허용 가능한 문자 수 조정
print(r2.search("abbc")) # <re.Match object; span=(0, 4), match='abbc'>
?
r = re.compile("ab?c") # 해당문자(b)가 0개 이거나 1개 이거나
print(r.search("abc")) # <re.Match object; span=(0, 3), match='abc'>
print(r.search("axc"))# None
print(r.search("ac")) # <re.Match object; span=(0, 2), match='ac'>
print(r.search("a"))# None
*
r = re.compile("ab*c") #해당문자(b)가 0개 혹은 여러개
print(r.search("abc")) # <re.Match object; span=(0, 3), match='abc'>
print(r.search("abbc")) # <re.Match object; span=(0, 4), match='abbc'>
print(r.search("ac")) # <re.Match object; span=(0, 2), match='ac'>
print(r.search("azc"))# None
+
r = re.compile("ab+c") #해당문자(b)가 1개 이상 있어야 함
print(r.search("abc")) # <re.Match object; span=(0, 3), match='abc'>
print(r.search("abbc")) # <re.Match object; span=(0, 4), match='abbc'>
print(r.search("ac"))# None
print(r.search("azc"))# None
^
r = re.compile("^ab") #해당문자(ab)로 시작
print(r.search("abc")) # <re.Match object; span=(0, 2), match='ab'>
print(r.search("abbc")) # <re.Match object; span=(0, 2), match='ab'>
print(r.search("ac"))# None
print(r.search("azc"))# None
print(r.search("cab"))# None
{int} or {int,int}
r = re.compile("ab{2}c") #해당문자(b) 등장 횟수 지정
print(r.search("abc"))# None
print(r.search("abbc")) # <re.Match object; span=(0, 4), match='abbc'>
print(r.search("ac"))# None
print(r.search("azc"))# None
print(r.search("cab"))# None
r = re.compile("ab{2,4}c") #등장 횟수 범위 지정
print(r.search("abc"))# None
print(r.search("abbc")) # <re.Match object; span=(0, 4), match='abbc'>
print(r.search("abbbc")) # <re.Match object; span=(0, 5), match='abbbc'>
print(r.search("abbbbbc"))# None
print(r.search("ac"))# None
r = re.compile("ab{2,}c")
print(r.search("abc")) # None
print(r.search("abbc")) # <re.Match object; span=(0, 4), match='abbc'>
print(r.search("abbbc"))# <re.Match object; span=(0, 5), match='abbbc'>
print(r.search("abbbbbc")) # <re.Match object; span=(0, 7), match='abbbbbc'>
print(r.search("abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbc")) # <re.Match object; span=(0, 40), match='abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbc'>
-
r = re.compile('[b-e]')
print(r.search("abcdefghi")) # <re.Match object; span=(1, 2), match='b'>
print(r.search("defghijklmn")) # <re.Match object; span=(0, 1), match='d'>
print(r.search("zxfty")) # None
print(r.search("ezdie")) # <re.Match object; span=(0, 1), match='e'>
[^]
r = re.compile("[^abcd]") # ^이후 문자 제외하고 시작하는거
print(r.search("abc")) # None
print(r.search("abbc")) # None
print(r.search("abbbc")) # None
print(r.search("abbbc")) # None
print(r.search("abbbbbc")) # None
print(r.search("ac")) # None
print(r.search("azc")) # <re.Match object; span=(1, 2), match='z'>
print(r.search("cab")) # None
print(r.search("erer")) # <re.Match object; span=(0, 1), match='e'>
print(r.search("abezecd")) # <re.Match object; span=(2, 3), match='e'>
re.match vs re.search
r = re.compile("ab.")
print(r.match("tttabc"))
print(r.search("tttabc")) #search : 텍스트 전체를 보고 정규식(compile)조사
print(r.match("abcttt")) #match : 처음부터 조사
'''
None
<re.Match object; span=(3, 6), match='abc'>
<re.Match object; span=(0, 3), match='abc'>
'''
split
text = "I am Groot"
re.split(" ",text) # = text.split()
'''출력
['I', 'am', 'Groot']
'''
text2 = "I+am+Groot"
re.split("\+",text2)
'''출력
['I', 'am', 'Groot']
'''
text3 = """
name : sol
phone : 010-0000-0000
age : 25
gender : female
"""
print(re.findall('\d+',text3)) # d: 숫자
'''출력
['010', '0000', '0000', '25']
'''
text4 = '''<저작권자(c) 연합뉴스, 무단 전재-재배포 금지> 2023/01/04 10:12 송고'''
re_res = re.sub("[^a-zA-Z]",' ',text4) #영어만 냄기고 다 지워~
print(re_res)
'''출력
' c '
'''
sub
text5 = "ㅋㅋㅋ so 이따가 시간되?"
re.compile("[ 가-힣]+").sub("",text5)
'''출력
'ㅋㅋㅋso?'
'''
re.compile("[|가-힣]+").sub("",text5)
'''출력
'ㅋㅋㅋ so ?'
'''
text6 = "ㅋㅋㅋ so 이따가 시간되? ㅜㅠ"
re.compile("[가-힣]+").sub("",text6).split()
'''출력
['ㅋㅋㅋ', 'so', '?', 'ㅜㅠ']
'''
findall
text5 = "ㅋㅋㅋ so 이따가 시간되?"
re.compile("[|가-힣]+").findall(text5)
'''출력
['이따가', '시간되']
'''
'🏷️CS > Python' 카테고리의 다른 글
[for 와 else 를 같이 사용] (0) | 2023.07.31 |
---|---|
[정규표현식] re 모듈 (0) | 2023.07.14 |
[assert 가정 설정문] (1) | 2023.07.10 |
[다차원 배열 초기화 방법의 차이점] (1) | 2023.05.13 |
[anaconda 가상환경] (0) | 2023.01.07 |