기본 Python만 사용하여 텍스트 사전 처리 및 전자 메일 분류
17131 단어 datasciencepythonnlppreprocessing
네, 그렇습니다.그러나 내장 라이브러리를 사용하지 않으면 처음부터 코드를 작성할까요?이 블로그는 내장된python 라이브러리를 사용했지만 그 배후의 내용을 확정하지 못한 사람들을 위해 쓴 것이다.전체 코드 찾기here.이 블로그를 읽으면 전체 파이프라인을 더욱 잘 이해할 수 있습니다.그럼 우리 그냥 뛰어들어가자!
이 문제의 기본 절차는-
먼저 e-메일을 읽고 목록에 저장합니다.다음은 csv 리더를 사용하여 이 점을 보여 줍니다.
emails = []
with open('emaildataset.csv', 'r') as file:
reader = csv.reader(file)
for row in reader:
emails.append((row[0].strip(), row[1].strip()))
1. 예처리
우리는 지금 예처리 단계에 들어갈 수 있다.이 전자메일들은 먼저 소문자로 변환된 다음에 기호화폐로 분할된다.그 다음에 우리는 표기에 세 가지 기본적인 예처리 과정을 적용한다. 그것이 바로 문장 삭제, 정지 단어 삭제와 어간 분석이다.이것들을 상세하게 토론합시다.
구두점 삭제
이 과정은 문자열의 모든 문장을 삭제하는 데 관련됩니다. 우리는python의 문자열 함수replace () 를 사용하여 완성합니다.다음 함수는 문자열을 입력으로 하고 빈 문자열로 바꾸며 문장부호가 없는 문자열을 되돌려줍니다.목록에 더 많은 문장을 추가할 수도 있고, 문장 정규 표현식을 사용할 수도 있습니다.
def punctuation_removal(data_string):
punctuations = [",", ".", "?", "!", "'", "+", "(", ")"]
for punc in punctuations:
data_string = data_string.replace(punc, "")
return data_string
스톱 워드 삭제이 과정은 모든 상용어를 삭제하는 것을 포함하는데, 이 단어들은 문장의 문법을 정확하게 하는 데 사용되며, 많은 의미를 증가시키지 않는다.다음에 제시된 함수는 영패 목록을 입력으로 하고 이를 분석하여 지정한 stopwords 목록에 있는지 확인하고 stopwords가 없는 영패 목록을 되돌려줍니다.목록에 더 많은 정지어를 추가할 수 있습니다.
def stopword_removal(tokens):
stopwords = ['of', 'on', 'i', 'am', 'this', 'is', 'a', 'was']
filtered_tokens = []
for token in tokens:
if token not in stopwords:
filtered_tokens.append(token)
return filtered_tokens
저지하다이 과정은 파이프를 예처리하는 마지막 단계다.여기서 우리는 기호화폐를 기본 형식으로 바꿀 것이다.'먹기','먹기','먹기'같은 단어는'먹기'로 바뀐다.이를 위해, 우리는python 사전의 도움말을 사용하여 키와 값을 기본 형식의 표기, 그리고 다른 형식의 단어 목록으로 정의합니다.예를 들어, {"먹음": [먹는 것","먹는 것","먹는 것]].이것은 데이터/자료 라이브러리의 단어를 규범화하는 데 도움이 된다.
우리는 모든 태그를 분석하고 비기본 형식의 단어 목록에 나타나는지 확인합니다.만약 그렇다면, 이 단어의 기본 형식을 사용한다.아래의 함수는 이 점을 보여 주었다.
def stemming(filtered_tokens):
root_to_token = {'you have':['youve'],
'select':['selected', 'selection'],
'it is':['its'],
'move':['moving'],
'photo':['photos'],
'success':['successfully', 'successful']
}
base_form_tokens = []
for token in filtered_tokens:
for base_form, token_list in root_to_token.items():
if token in token_list:
base_form_tokens.append(base_form)
else:
base_form_tokens.append(token)
return base_form_tokens
이제 위에서 정의한 함수를 사용하여 다음과 같이 기본 프로세싱 파이핑을 형성합니다.tokens = []
for email in emails:
email = email[0].lower().split()
for word in email:
clean_word = punctuation_removal(word)
tokens.append(clean_word)
tokens = set(tokens)
filtered_tokens = stopword_removal(tokens)
base_form_tokens = stemming(filtered_tokens)
2. 독특한 단어 찾기
전자 우편이 기본 형식의 태그 목록으로 변환된 후에 문장부호와 정지어가 없습니다. set () 함수를 사용하면 유일한 단어만 얻을 수 있습니다.
unique_words = []
unique_words = set(base_form_tokens)
3. 특징 벡터 추출
각 피쳐 벡터는 고유한 단어 목록과 동일한 길이로 정의됩니다.모든 유일한 단어에 대해 특정한 전자메일에 나타나면 벡터에 1을 추가하지 않으면 0을 추가합니다.예를 들어 이메일 "헤이, 난 베티야!"유일한 단어 목록은 ['안녕','헤이','샌드위치','나','그것은','표시']이고 특징 벡터는 [0,1,0,0,1,0]이다."betty"는 유일한 단어 목록에 없기 때문에 최종 결과에서 무시됩니다.
다음 코드 세션은 이 점을 보여 줍니다. 특징 벡터는python 사전이고 키는 유일한 단어이며 값은 0 또는 1입니다. 이것은 이 단어가 전자메일에 나타나는지 여부에 달려 있습니다.각 e-메일에 대한 레이블도 저장됩니다.
feature_vec = {}
for word in unique_words:
feature_vec[word] = word in base_form_tokens
pair = (feature_vec, email[1]) #email[1] is the label for each email
train_data.append(pair)
이렇게 하면 우리는 훈련 데이터를 생성할 수 있다.다음은 이 단계까지의 완전한 파이프의 코드 세션을 보여 줍니다.train_data = []
for email in emails:
tokens = []
word_list = email[0].lower().split()
for word in word_list:
clean_word = punctuation_removal(word)
tokens.append(clean_word)
filtered_tokens = stopword_removal(tokens)
base_form_tokens = stemming(filtered_tokens)
feature_vec = {}
for word in unique_words:
feature_vec[word] = word in base_form_tokens
pair = (feature_vec, email[1])
train_data.append(pair)
4. 소박 베일러 분류기 활용
소박 베일러 분류기는 nltk 모듈에서 가져온 것입니다.우리는 현재 모든 전자메일의 특징 벡터 (예를 들어 '테스트 기능') 를 찾을 수 있으며, 이를 스팸메일로 분류할 수 있다.
from nltk import NaiveBayesClassifier
classifier = NaiveBayesClassifier.train(train_data)
output = classifier.classify(test_features)
다음은 온전한 테스트 파이프-def testing(email_str):
tokens = []
word_list = email_str.lower().split()
for word in word_list:
clean_word = punctuation_removal(word)
tokens.append(clean_word)
filtered_tokens = stopword_removal(tokens)
base_form_tokens = stemming(filtered_tokens)
test_features = {}
for word in unique_words:
test_features[word] = word in base_form_tokens
output = classifier.classify(test_features)
return output
이것들이 있으면, 당신은 이제 기본적인 자연 언어 처리 파이프의 세부 사항을 알게 될 것입니다.도움이 됐으면 좋겠어요!
Reference
이 문제에 관하여(기본 Python만 사용하여 텍스트 사전 처리 및 전자 메일 분류), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/saxenamansi/classifying-spam-emails-using-basic-python-2m70텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)