형태소 분석 및 Lemmatization Python 예제가 포함된 NLTK
형태소 분석 및 Lemmatization이란 무엇입니까? Python NLTK?
형태소 분석 및 표제어 추출 in Python NLTK는 자연어 처리를 위한 텍스트 정규화 기술입니다. 이러한 기술은 텍스트 전처리에 널리 사용됩니다. 어간 추출과 레마타이징의 차이점은 어간 추출은 맥락을 알지 못한 채 단어를 자르기 때문에 빠르고, 레마타이징은 처리하기 전에 단어의 맥락을 알기 때문에 느리다는 것입니다.
형태소 분석이란 무엇입니까?
줄기 단어를 정규화하는 방법이다. 자연 언어 처리. 검색을 단축하기 위해 문장의 단어 집합을 시퀀스로 변환하는 기술입니다. 이 방법에서는 의미는 같지만 문맥이나 문장에 따라 약간의 차이가 있는 단어를 정규화합니다.
즉, 어근은 하나이지만 같은 단어에도 변형이 많다는 뜻이다. 예를 들어, 루트 단어는 "먹다"이고 변형은 "먹고, 먹고, 먹고, 그래서 좋아합니다"입니다. 같은 방법으로 Stemming의 도움으로 Python, 우리는 모든 변형의 어근을 찾을 수 있습니다.
예를 들어
He was riding. He was taking the ride.
위의 두 문장에서 의미는 동일합니다. 즉, 과거의 승마 활동입니다. 인간은 두 의미가 동일하다는 것을 쉽게 이해할 수 있습니다. 그러나 기계의 경우 두 문장이 다릅니다. 따라서 동일한 데이터 행으로 변환하기가 어려워졌습니다. 동일한 데이터 세트를 제공하지 않으면 기계는 예측에 실패합니다. 따라서 머신러닝을 위한 데이터셋을 준비하기 위해서는 각 단어의 의미를 차별화하는 것이 필요합니다. 그리고 여기서 형태소 분석은 루트 단어를 가져와 동일한 유형의 데이터를 분류하는 데 사용됩니다.
이를 다음과 같이 구현해 보겠습니다. Python program.NLTK에는 "PorterStemmer"라는 알고리즘이 있습니다. 이 알고리즘은 토큰화된 단어 목록을 승인하고 이를 루트 단어로 추출합니다.
Stemming 이해 프로그램
from nltk.stem import PorterStemmer e_words= ["wait", "waiting", "waited", "waits"] ps =PorterStemmer() for w in e_words: rootWord=ps.stem(w) print(rootWord)
산출:
wait wait wait wait
코드 설명 :
- NLTk에는 가져온 스템 모듈이 있습니다. 전체 모듈을 가져오면 수천 줄의 코드가 포함되어 있어 프로그램이 무거워집니다. 그래서 전체 스템 모듈 중에서 "PorterStemmer"만 가져왔습니다.
- 동일한 단어의 변형 데이터 더미 목록을 준비했습니다.
- nltk.stem.porter.PorterStemmer 클래스에 속하는 객체가 생성됩니다.
- 또한 "for" 루프를 사용하여 하나씩 PorterStemmer에 전달했습니다. 마지막으로 목록에 언급된 각 단어의 루트 단어가 출력되었습니다.
위의 설명을 통해 형태소 분석은 데이터의 중복성과 동일한 단어의 변형을 제거했기 때문에 중요한 전처리 단계로 간주된다는 결론을 내릴 수도 있습니다. 결과적으로 데이터가 필터링되어 더 나은 기계 학습에 도움이 됩니다.
이제 완전한 문장을 전달하고 출력으로서의 동작을 확인합니다.
프로그램:
from nltk.stem import PorterStemmer from nltk.tokenize import sent_tokenize, word_tokenize sentence="Hello Guru99, You have to build a very good site and I love visiting your site." words = word_tokenize(sentence) ps = PorterStemmer() for w in words: rootWord=ps.stem(w) print(rootWord)
출력:
hello guru99 , you have build a veri good site and I love visit your site
코드 설명 :
- 패키지 PorterStemer는 모듈 스템에서 가져옵니다.
- 문장과 단어의 토큰화를 위한 패키지를 가져옵니다.
- 다음 단계에서 토큰화할 문장이 작성됩니다.
- 이 단계에서는 단어 토큰화 형태소 추출이 구현됩니다.
- PorterStemmer용 개체가 여기에서 생성됩니다.
- 루프가 실행되고 각 단어의 형태소 분석은 코드 라인 5에서 생성된 개체를 사용하여 수행됩니다.
결론 :
Stemming은 데이터 전처리 모듈입니다. 영어에는 한 단어에도 다양한 변형이 있습니다. 이러한 변형은 기계 학습 훈련 및 예측에 모호성을 만듭니다. 성공적인 모델을 만들려면 이러한 단어를 필터링하고 형태소 분석을 사용하여 동일한 유형의 시퀀스 데이터로 변환하는 것이 중요합니다. 또한 이는 문장 집합에서 행 데이터를 가져오고 정규화라고도 알려진 중복 데이터를 제거하는 중요한 기술입니다.
표절화란 무엇입니까?
정리 NLTK에서는 단어의 의미와 문맥에 따라 단어의 기본형을 찾는 알고리즘 프로세스입니다. 표제어 분석은 일반적으로 굴절 어미를 제거하는 것을 목표로 하는 단어의 형태학적 분석을 의미합니다. 이는 기본형으로 알려진 단어의 기본 또는 사전 형식을 반환하는 데 도움이 됩니다.
NLTK Lemmatization 방법은 WorldNet의 내장 모프 기능을 기반으로 합니다. 텍스트 전처리에는 형태소 분석과 표제어 분석이 모두 포함됩니다. 많은 사람들이 두 용어를 혼동한다고 생각합니다. 일부에서는 이를 동일하게 취급하지만 형태소 분석과 표제어 분석 간에는 차이가 있습니다. 다음과 같은 이유로 Lemmatization이 전자보다 선호됩니다.
Lemmatization이 형태소 분석보다 나은 이유는 무엇입니까?
형태소 분석 알고리즘은 단어에서 접미사를 잘라내는 방식으로 작동합니다. 더 넓은 의미에서는 단어의 시작이나 끝을 잘라냅니다.
반면, 레마타이징은 더 강력한 연산이며, 단어의 형태소 분석을 고려합니다. 모든 굴절 형태의 기본 형태인 레마를 반환합니다. 사전을 만들고 단어의 적절한 형태를 찾으려면 심층적인 언어 지식이 필요합니다. 어간 추출은 일반적인 연산인 반면 레마타이징은 적절한 형태가 사전에서 검색되는 지능적인 연산입니다. 따라서 레마타이징은 더 나은 기계 학습 기능을 제공합니다.
Lemmatization과 Stemming을 구별하는 코드
형태소 분석 코드:
import nltk from nltk.stem.porter import PorterStemmer porter_stemmer = PorterStemmer() text = "studies studying cries cry" tokenization = nltk.word_tokenize(text) for w in tokenization: print("Stemming for {} is {}".format(w,porter_stemmer.stem(w)))
출력::
Stemming for studies is studi Stemming for studying is studi Stemming for cries is cri Stemming for cry is cri
표준화 코드:
import nltk from nltk.stem import WordNetLemmatizer wordnet_lemmatizer = WordNetLemmatizer() text = "studies studying cries cry" tokenization = nltk.word_tokenize(text) for w in tokenization: print("Lemma for {} is {}".format(w, wordnet_lemmatizer.lemmatize(w)))
출력:
Lemma for studies is study Lemma for studying is studying Lemma for cries is cry Lemma for cry is cry
출력에 대한 논의
연구 및 연구에 대한 형태소 분석을 보면 출력은 동일하지만(studi) NLTK 표제어 분석기는 연구를 위한 토큰 연구와 연구를 위한 연구 모두에 대해 서로 다른 보조정리를 제공합니다. 따라서 기계를 훈련시키기 위한 기능 세트를 만들어야 할 때 표제어 추출을 선호한다면 좋을 것입니다.
Lemmatizer 사용 사례
Lemmatizer는 텍스트 모호성을 최소화합니다. 자전거 또는 자전거와 같은 예시 단어는 기본 단어인 자전거로 변환됩니다. 기본적으로 의미는 동일하지만 표현이 다른 모든 단어를 기본 형태로 변환합니다. 주어진 텍스트의 단어 밀도를 줄이고 훈련 기계의 정확한 기능을 준비하는 데 도움이 됩니다. 데이터가 깨끗할수록 기계 학습 모델이 더욱 지능적이고 정확해집니다. NLTK Lemmatizer는 메모리와 계산 비용도 절약합니다.
Wordnet Lemmatization 및 POS 태그 사용을 보여주는 실시간 예제 Python
from nltk.corpus import wordnet as wn from nltk.stem.wordnet import WordNetLemmatizer from nltk import word_tokenize, pos_tag from collections import defaultdict tag_map = defaultdict(lambda : wn.NOUN) tag_map['J'] = wn.ADJ tag_map['V'] = wn.VERB tag_map['R'] = wn.ADV text = "guru99 is a totally new kind of learning experience." tokens = word_tokenize(text) lemma_function = WordNetLemmatizer() for token, tag in pos_tag(tokens): lemma = lemma_function.lemmatize(token, tag_map[tag[0]]) print(token, "=>", lemma)
코드 설명
- 먼저 코퍼스 리더 워드넷을 가져옵니다.
- WordNetLemmatizer는 wordnet에서 가져옵니다.
- 단어 토큰화 및 품사 태그를 nltk에서 가져옵니다.
- 기본 사전은 컬렉션에서 가져옵니다.
- 사전은 pos_tag(첫 글자)가 키 값인 곳에서 생성되고, 그 값은 wordnet 사전의 값과 매핑됩니다. 루프에서 나중에 사용할 것이므로 첫 글자만 가져왔습니다.
- 텍스트가 작성되고 토큰화됩니다.
- 루프 내부에서 사용될 객체 lemma_function이 생성됩니다.
- 루프가 실행되고 lemmatize는 두 개의 인수를 사용합니다. 하나는 토큰이고 다른 하나는 pos_tag와 wordnet 값의 매핑입니다.
산출:
guru99 => guru99 is => be totally => totally new => new kind => kind of => of learning => learn experience => experience . => .
Python Lemmatization은 다음과 밀접한 관계가 있습니다. 워드넷 사전, 이 주제를 연구하는 것이 필수적이므로 다음 주제로 유지합니다.