파이썬으로 가능한 기본적인 처리방법들


제 .1 방법 : 공란처리


영어나 한글 일본어 등등 텍스트의 경우 공란(Space Bar)는 단어와 단어를 구분하는 기능을 수행한다.

하지만 문자 입력의 실수, 또는 온라인 텍스트 수집 과정의 오류로 공란이 2개이상 발견되는 경우가 있다.

Ex(예) : 파이썬으로 가능한 기본적인 처리방법들 <- 정상

   : 파이썬으로  가능한 기본적은  처리방법들 <- 공란이 2개씩 쓰여진 문자열


2개 이상의 공란이 연달아 발견되는 경우 해당 공란을 1개로 축약시키는 방법이다.


코드는 간단하게 짤 수 있다.


# 입력하여 출력해본다.


str_text_before = '덩          기덕 쿵       더러러러 쿵 기덕 쿵          덕'

print(str_text_before)

출력결과 -->           기덕 쿵       더러러러 쿵 기덕 쿵         


# split() 처리를 통해 리스트로 만들어 준다.


str_text_after = str_text_before.split()

print(str_text_after)

출력결과 --> ['덩', '기덕', '쿵', '더러러러', '쿵', '기덕', '쿵', '덕']


# split() 처리가된 텍스트(리스트)를 join 함수를 이용하여 처리


complete_text = " ".join(str_text_after)

print(complete_text)

출력결과 --> 덩 기덕 쿵 더러러러 쿵 기덕 쿵 덕


이렇게 공란 처리가 가능하다.


제 .2 방법 : 대 소문자 통일하기


한국어 텍스트에서는 해당사항이 없지만, 영문의 경우에는 대.소문자를 구분한다.

영어의 경우 문장의 첫 단어의 첫문자, 거유명사의 첫 문자, 축양어인 경우 대문자를 사용하며

다른 경우는 소문자를 사용한다.

그러나 대문자는 문장의 특정부분을 강조하는 경우에도 종종 사용된다.


Ex(예)

'President Trump plays the trump.' <-- 이 문자열을 보면 앞의 트럼프는 대통령 트럼프를 나타내고

뒤의 트럼프는 트럼프 카드게임을 나타낸다.


이것을 어떻게 구분할까?

간단하게 하고싶다면 replace 를 사용하면 된다.


str_text = str_text.replace('Trump', 'Trump_unique')

print(str_text)

출력결과 --> President Trump_unique plays the trump.


이렇게 대통령 트럼프와 게임 트럼프를 구분할 수 있다.


이 외의 방법은

str_text = 'President Trump plays the trump.'

print(str_text)


for key in (('Trump', 'Trump_unique'), ('plays', 'uniquePlays')):

str_text = str_text.replace(*key)

print(str_text)


출력결과 --> President Trump_unique uniquePlays the trump.


이렇게 하면 여러개의 문자열을 한번에 변경 할 수 있다.


이렇게 구분이 가능해지면

이제 대문자로 하든 소문자로 하든 처리를 한다.


처리는 아주 간단하다 문자열 뒤에 lower()또는 upper()를 붙여주면 된다.


print(str_text.lower())

출력결과 --> president trump_unique uniqueplays the trump.


print(str_text.upper())

출력결과 --> PRESIDENT TRUMP_UNIQUE UNIQUEPLAYS THE TRUMP.


제 .3 방법 : HTML코드 제거하기


# &pos, &gt, &lt 등의 HTML 문자열을 제거하여 준다.

# 의존성 from bs4 import BeautifulSoup

Ex(예)


str_html = '&gt asdfasdfasdf &lt'


html_str = BeautifulSoup(str_html, 'html.parser').get_text()

print(html_str)

출력결과 --> asdfasdfasdf


이렇게 HTML에서 남은 찌꺼기를 처리할 수 있다.



제 .4 방법 : 특수문자와 숫자표현 제거하기


텍스트가 데이터에서는 숫자가 아닌 문자로 표현된 자료는 물론 숫자로 표현된 자료도 포함된다.

그렇다면 텍스트 데이터에서 숫자가 의미를 가질 수 있고 의미를 가지지 않을 수도 있다.

이게 상당히 애매한 문제인데 무조건적으로 숫자를 제거하면 정보의 왜곡될 가능성이 높다.


대부분 텍스트 마이닝을 적용한 상당수 연구자들은 숫자를 제거하거나, 모든 숫자를 하나로 통합하는 방식으로 또는 텍스트를 사전처리 적용을 한다.


숫자를 제거하고 제거안하고는 마이닝할 텍스트에 따라 다르다.


Ex(예)

str_text = 'President?#Trump!plays...the&^%trump.'

print(str_text)

출력결과 --> President?#Trump!plays...the&^%trump.


sub_text = re.sub('[^a-zA-Z]', ' ', str_text)

print(sub_text)

출력결과 --> President  Trump plays   the   trump


특수문자나 숫자가 있던자리에 공백이 덕지덕지 끼여있는데 위에있는 공란처리로

처리하면 될것이다.



제 .5 방법 : 불용어 처리하기


모든 인간의 자연어는 외부 세계 대상에 대한 지시어와 이 지시어들을 연결하는 기능어가 존재한다.

예를들어 I am a boy 와 같은 문장에서 a라는 단어는 boy라는 명사가 셀 수 있는 명사임을 알려주는 기능을 한다.

흔히 boy라는 명사는 구체적인 의미를 전달하는 경우가 많지만, a라는 부정관사에서는 구체적인 의미를 찾기 쉽지 않다.

한국어 역시 마찬가지이다. "나는 남자다." 라는 문장에서 '남자'는 명사 형태의 어간은 의미를 갖지만, '다' 라는 서술격 조사에서는 의미론적으로 특별한 의미를 찾기 쉽지 않다.


영어의 경우 a, an, the 등과 같이 빈번하게 사용되나 구체적인 의미를 찾기 어려운 단어들을 불용어

라고 부른다.


고로 문장에서 의미가 딱히없는 단어들을 제거하는 방법을 알아보자


Ex(예)

STOPWORDS = ['a','able','about','across','after','all','almost','also','am','among',

'an','and','any','are','as','at','be','because','been','but','by','can','cannot',

'could','dear','did','do','does','either','else','ever','every','for','from','get',

'got','had','has','have','he','her','hers','him','his','how','however','i','if','in',

'into','is','it','its','just','least','let','like','likely','may','me','might','most',

'must','my','neither','no','nor','not','of','off','often','on','only','or','other','our',

'own','rather','said','say','says','she','should','since','so','some','than','that','the',

'their','them','then','there','these','they','this','tis','to','too','twas','us','wants',

'was','we','were','what','when','where','which','while','who','whom','why','will','with',

'would','yet','you','your','ourselves','between','yourself','again','once','during','out',

'very','having','yours','such','itself','s','each','themselves', 'until', 'below','through',

'don','more','himself','down','above','both','up','ours','before','same','yourselves','over',

'now','under','herself','myself','those','few','t','being','theirs','against','doing','further','here']


def remove_stop_words(wordlist, stopwords=STOPWORDS):

marked = []

# ask for sentence if wordlist is empty

if not wordlist:

sentence = raw_input("type a sentence: ")

wordlist = sentence.split()

for key in wordlist:

if key.lower() in stopwords:

# marked.append('')

pass

else:

marked.append(key)

return marked



wordlist = 'President Trump between plays the trump.'.split()


marked_list = remove_stop_words(wordlist)

print(marked_list)


complete_text = " ".join(marked_list)

print(complete_text)


대략적인 불용어 처리가 이렇게 할 수 있다.

'NLP' 카테고리의 다른 글

스파크 임시  (1378) 2018.04.18
Spark RDD란 무엇인가?  (923) 2018.04.18
Spark를 설치 실행해보자  (934) 2018.04.18
블로그 이미지

ZeroFlag

,