NLP1 자연어처리

ganadara·2023년 1월 4일
0

복습

목록 보기
34/49
post-thumbnail
post-custom-banner

가상환경

conda명령어는 anaconda prompt에서 사용

cmd와 비슷하게 생김, 차이점은 (base)

create

conda create -n test python=3.8

자연어처리용, 이미지처리용 라이브러리 충돌

자연어처리 넘파이 2.6이상 필요 이미지처리 넘파이 1.5이하 필요하면 충돌하면 안 되기 때문에 가상환경으로 따로따로 만들어한다. 라이브러리 충돌을 막기 위해서

deactivate 하면 base로 다시 나올 수 있지만 별로 안 쓴다.

activate

conda activate test

설치된 리스트 확인

conda list

base는 엄청 많은 게 설치되어 있기 때문에 가상환경을 만들어서 사용하는 것이 좋다.

가상환경 리스트 확인

conda env list

install

conda install jupyter notebook
pip install pandas
conda install matplotlib

가상환경 지우기

다른 환경으로 가서 지우기

conda env remove -n test

오픈소스를 다운받으면 .yml 파일이 따라오는 경우가 있는데. 그 속에는 메모장에 쓰인 것처럼 이름과, 파일 환경이 있으니, 가상환경을 메모장안에 환경으로 설정해야 한다.

import re

re: 정규표현식 regular expression , 텍스트 처리와 관련됨
#정규표현식을 사용하면 유연하게 사용가능, beautifulsoup을 통해 크롤링할 때 사용하면 좋음

import re 

기호 . = 아무거나 괜찮다

r = re.compile("a.c")
print(r.search("qwerty"))
None
r.search("abc")
<re.Match object; span=(0, 3), match='abc'>
r.search("abbc")
r.search("axc")
<re.Match object; span=(0, 3), match='axc'>

r2 = re.compile("a..c")
r2.search("abbc")
<re.Match object; span=(0, 4), match='abbc'>

기호 ? = ac사이에 b가 와라 : 해당 문자가 0개 이거나 1개이거나

r = re.compile("ab?c")
r.search("abc")
<re.Match object; span=(0, 3), match='abc'>
r.search("axc")
r.search("ac")
<re.Match object; span=(0, 2), match='ac'>

기호 * = ac이랑 b가 여러개 올 수 있다.


r = re.compile("ab*c")
r.search("a")
r.search("ac")
<re.Match object; span=(0, 2), match='ac'>
r.search("abc")
<re.Match object; span=(0, 3), match='abc'>
r.search("adc")
r.search("abbc")
<re.Match object; span=(0, 4), match='abbc'>
r.search("abbbc")
<re.Match object; span=(0, 5), match='abbbc'>
r.search("acbb")
<re.Match object; span=(0, 2), match='ac'>
r.search("acbbb")
<re.Match object; span=(0, 2), match='ac'>

기호 + : 없는 거에는 반응 안 함, 하나 이상은 있어야 한다.

r = re.compile("ab+c")
r.search("ac")
r.search("abc")
<re.Match object; span=(0, 3), match='abc'>
r.search("abbc")
<re.Match object; span=(0, 4), match='abbc'>

기호 ^ : ab로 시작하면 된다.

r = re.compile("^ab")
r.search("ab")
<re.Match object; span=(0, 2), match='ab'>
r.search("aab")
r.search("abc")
<re.Match object; span=(0, 2), match='ab'>
r.search("abb")
<re.Match object; span=(0, 2), match='ab'>

기호 {숫자} : 정해진 횟수만큼 나올 수 있다.

r = re.compile("ab{2}c")
r.search("abc")
r.search("abbc")
<re.Match object; span=(0, 4), match='abbc'>
r.search("abbbc")
r.search("ac")

기호 {숫자, 숫자} : 범위 시작, 끝 (2번부터 4번까지 반복가능)

r = re.compile("ab{2,4}c")
r.search("abc")
r.search("abbc")
<re.Match object; span=(0, 4), match='abbc'>
r.search("abbbc")
<re.Match object; span=(0, 5), match='abbbc'>
r.search("abbbbc")
<re.Match object; span=(0, 6), match='abbbbc'>
r.search("abbbbbc")

기호 {숫자, } : 범위 시작만 지정

r = re.compile("ab{2,}c")
r.search("abc")
r.search("abbc")
<re.Match object; span=(0, 4), match='abbc'>
r.search("abbbc")
<re.Match object; span=(0, 5), match='abbbc'>
r.search("abbbbc")
<re.Match object; span=(0, 6), match='abbbbc'>
r.search("abbbbbbc")
<re.Match object; span=(0, 8), match='abbbbbbc'>

기호 [-] : b~e사이에 해당되면 사용

r = re.compile("[b-e]") #bcde
r.search("abcdefghi")
<re.Match object; span=(1, 2), match='b'>
r.search("abcd")
<re.Match object; span=(1, 2), match='b'>
r.search("apoi")
r.search("ab")
<re.Match object; span=(1, 2), match='b'>
r.search("b")
<re.Match object; span=(0, 1), match='b'>
r.search("defghijklmn")
<re.Match object; span=(0, 1), match='d'>
r.search("efghijklmn")
<re.Match object; span=(0, 1), match='e'>
r.search("fghijklmn")

기호 [^ ] : ^이후 제외, 범위제외하고 시작하는 거

r = re.compile("[^abcd]")
r.search("a")
r.search("abc")
r.search("bc")
r.search("efg")
<re.Match object; span=(0, 1), match='e'>

re.match vs re.search

r = re.compile("ab.")
r.match("tttabc")
r.match("abcttt") #match:처음부터 조사
<re.Match object; span=(0, 3), match='abc'>
r.search("tttabc") #search: 텍스트 전체를 보고 정규식(compile) 조사
<re.Match object; span=(3, 6), match='abc'>
r.search("tttc")
r.search("tttac")

텍스트 분해

text="호날두는 입단 기자회견에서 유럽에서 내 일은 끝났다. 나는 유럽의 주요 클럽에서 모든 걸 성취했고, 이제 아시아에서 새로운 도전을 한다고 말했습니다."
text.split()
['호날두는',
 '입단',
 '기자회견에서',
 '유럽에서',
 '내',
 '일은',
 '끝났다.',
 '나는',
 '유럽의',
 '주요',
 '클럽에서',
 '모든',
 '걸',
 '성취했고,',
 '이제',
 '아시아에서',
 '새로운',
 '도전을',
 '한다고',
 '말했습니다.']
re.split(" ",text)
['호날두는',
 '입단',
 '기자회견에서',
 '유럽에서',
 '내',
 '일은',
 '끝났다.',
 '나는',
 '유럽의',
 '주요',
 '클럽에서',
 '모든',
 '걸',
 '성취했고,',
 '이제',
 '아시아에서',
 '새로운',
 '도전을',
 '한다고',
 '말했습니다.']
text2 = "안녕 나는 뽀로로야"
re.split("\+",text2)
['안녕 나는 뽀로로야']
text2.split("+")
['안녕 나는 뽀로로야']
text3 = """
이름:크롱
전화번호:010-1234-5678
나이:3
성별:남
"""
re.findall("\d+", text3) #d: 숫자
['010', '1234', '5678', '3']
#영어만 나오기
text4 ="""뉴스홈페이지 : https://goo.gl/4bWbkG"""
re_res =re.sub("[^a-zA-Z]", ' ',text4)
re_res
'         https   goo gl  bWbkG'
profile
DL 공부중
post-custom-banner

0개의 댓글